lib: move DTRACE_* probes out of global scope · nodejs/node@f9ddbb6 (original) (raw)
`@@ -48,6 +48,7 @@
`
48
48
``
49
49
`namespace node {
`
50
50
``
``
51
`+
using v8::Context;
`
51
52
`using v8::FunctionCallbackInfo;
`
52
53
`using v8::GCCallbackFlags;
`
53
54
`using v8::GCType;
`
`@@ -262,31 +263,7 @@ void dtrace_gc_done(Isolate* isolate, GCType type, GCCallbackFlags flags) {
`
262
263
`}
`
263
264
``
264
265
``
265
``
`-
void InitDTrace(Environment* env, Local target) {
`
266
``
`-
HandleScope scope(env->isolate());
`
267
``
-
268
``
`-
static struct {
`
269
``
`-
const char* name;
`
270
``
`-
void (*func)(const FunctionCallbackInfo&);
`
271
``
`-
} tab[] = {
`
272
``
`-
#define NODE_PROBE(name) #name, name
`
273
``
`-
{ NODE_PROBE(DTRACE_NET_SERVER_CONNECTION) },
`
274
``
`-
{ NODE_PROBE(DTRACE_NET_STREAM_END) },
`
275
``
`-
{ NODE_PROBE(DTRACE_HTTP_SERVER_REQUEST) },
`
276
``
`-
{ NODE_PROBE(DTRACE_HTTP_SERVER_RESPONSE) },
`
277
``
`-
{ NODE_PROBE(DTRACE_HTTP_CLIENT_REQUEST) },
`
278
``
`-
{ NODE_PROBE(DTRACE_HTTP_CLIENT_RESPONSE) }
`
279
``
`-
#undef NODE_PROBE
`
280
``
`-
};
`
281
``
-
282
``
`-
for (size_t i = 0; i < arraysize(tab); i++) {
`
283
``
`-
Local key = OneByteString(env->isolate(), tab[i].name);
`
284
``
`-
Local val = env->NewFunctionTemplate(tab[i].func)
`
285
``
`-
->GetFunction(env->context())
`
286
``
`-
.ToLocalChecked();
`
287
``
`-
target->Set(env->context(), key, val).FromJust();
`
288
``
`-
}
`
289
``
-
``
266
`+
void InitDTrace(Environment* env) {
`
290
267
`#ifdef HAVE_ETW
`
291
268
`// ETW is neither thread-safe nor does it clean up resources on exit,
`
292
269
`// so we can use it only on the main thread.
`
`@@ -295,10 +272,27 @@ void InitDTrace(Environment* env, Local target) {
`
295
272
` }
`
296
273
`#endif
`
297
274
``
298
``
`-
#if defined HAVE_DTRACE || defined HAVE_ETW
`
299
275
` env->isolate()->AddGCPrologueCallback(dtrace_gc_start);
`
300
276
` env->isolate()->AddGCEpilogueCallback(dtrace_gc_done);
`
``
277
`+
}
`
``
278
+
``
279
`+
void InitializeDTrace(Local target,
`
``
280
`+
Local unused,
`
``
281
`+
Local context,
`
``
282
`+
void* priv) {
`
``
283
`+
Environment* env = Environment::GetCurrent(context);
`
``
284
+
``
285
`+
#if defined HAVE_DTRACE || defined HAVE_ETW
`
``
286
`+
define NODE_PROBE(name) env->SetMethod(target, #name, name);
`
``
287
`+
NODE_PROBE(DTRACE_NET_SERVER_CONNECTION)
`
``
288
`+
NODE_PROBE(DTRACE_NET_STREAM_END)
`
``
289
`+
NODE_PROBE(DTRACE_HTTP_SERVER_REQUEST)
`
``
290
`+
NODE_PROBE(DTRACE_HTTP_SERVER_RESPONSE)
`
``
291
`+
NODE_PROBE(DTRACE_HTTP_CLIENT_REQUEST)
`
``
292
`+
NODE_PROBE(DTRACE_HTTP_CLIENT_RESPONSE)
`
``
293
`+
undef NODE_PROBE
`
301
294
`#endif
`
302
295
`}
`
303
296
``
304
297
`} // namespace node
`
``
298
`+
NODE_MODULE_CONTEXT_AWARE_INTERNAL(dtrace, node::InitializeDTrace)
`