diff options
author | James M Snell <jasnell@gmail.com> | 2019-03-09 09:28:04 +0100 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2019-03-12 14:19:36 +0000 |
commit | f9ddbb6b2f2ff61bb62a4ee8a8819d561322c9e8 (patch) | |
tree | 3e761d0fd70523fbf801520fa1e3863548f32169 /src | |
parent | f2064dfc1fee2daa0537bc27d79d5aa0f734faaf (diff) | |
download | android-node-v8-f9ddbb6b2f2ff61bb62a4ee8a8819d561322c9e8.tar.gz android-node-v8-f9ddbb6b2f2ff61bb62a4ee8a8819d561322c9e8.tar.bz2 android-node-v8-f9ddbb6b2f2ff61bb62a4ee8a8819d561322c9e8.zip |
lib: move DTRACE_* probes out of global scope
The DTRACE_* probes have been global for no really good reason.
Move those into an internalBinding.
PR-URL: https://github.com/nodejs/node/pull/26541
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Matheus Marchini <mat@mmarchini.me>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/node.cc | 2 | ||||
-rw-r--r-- | src/node_binding.cc | 9 | ||||
-rw-r--r-- | src/node_config.cc | 4 | ||||
-rw-r--r-- | src/node_dtrace.cc | 46 | ||||
-rw-r--r-- | src/node_dtrace.h | 2 |
5 files changed, 34 insertions, 29 deletions
diff --git a/src/node.cc b/src/node.cc index 5e0e8df421..adcd6f6cad 100644 --- a/src/node.cc +++ b/src/node.cc @@ -255,7 +255,7 @@ MaybeLocal<Value> RunBootstrapping(Environment* env) { Local<Object> global = context->Global(); #if defined HAVE_DTRACE || defined HAVE_ETW - InitDTrace(env, global); + InitDTrace(env); #endif Local<Object> process = env->process_object(); diff --git a/src/node_binding.cc b/src/node_binding.cc index 9599cf956b..123bdad418 100644 --- a/src/node_binding.cc +++ b/src/node_binding.cc @@ -28,6 +28,12 @@ #define NODE_BUILTIN_PROFILER_MODULES(V) #endif +#if HAVE_DTRACE || HAVE_ETW +#define NODE_BUILTIN_DTRACE_MODULES(V) V(dtrace) +#else +#define NODE_BUILTIN_DTRACE_MODULES(V) +#endif + // A list of built-in modules. In order to do module registration // in node::Init(), need to add built-in modules in the following list. // Then in binding::RegisterBuiltinModules(), it calls modules' registration @@ -85,7 +91,8 @@ NODE_BUILTIN_OPENSSL_MODULES(V) \ NODE_BUILTIN_ICU_MODULES(V) \ NODE_BUILTIN_REPORT_MODULES(V) \ - NODE_BUILTIN_PROFILER_MODULES(V) + NODE_BUILTIN_PROFILER_MODULES(V) \ + NODE_BUILTIN_DTRACE_MODULES(V) // This is used to load built-in modules. Instead of using // __attribute__((constructor)), we call the _register_<modname> diff --git a/src/node_config.cc b/src/node_config.cc index a0d7d25ec8..c3c962bd88 100644 --- a/src/node_config.cc +++ b/src/node_config.cc @@ -74,6 +74,10 @@ static void Initialize(Local<Object> target, READONLY_PROPERTY(target, "bits", Number::New(env->isolate(), 8 * sizeof(intptr_t))); + +#if defined HAVE_DTRACE || defined HAVE_ETW + READONLY_TRUE_PROPERTY(target, "hasDtrace"); +#endif } // InitConfig } // namespace node diff --git a/src/node_dtrace.cc b/src/node_dtrace.cc index 59d1f9d143..5b2b9b8e14 100644 --- a/src/node_dtrace.cc +++ b/src/node_dtrace.cc @@ -48,6 +48,7 @@ namespace node { +using v8::Context; using v8::FunctionCallbackInfo; using v8::GCCallbackFlags; using v8::GCType; @@ -262,31 +263,7 @@ void dtrace_gc_done(Isolate* isolate, GCType type, GCCallbackFlags flags) { } -void InitDTrace(Environment* env, Local<Object> target) { - HandleScope scope(env->isolate()); - - static struct { - const char* name; - void (*func)(const FunctionCallbackInfo<Value>&); - } tab[] = { -#define NODE_PROBE(name) #name, name - { NODE_PROBE(DTRACE_NET_SERVER_CONNECTION) }, - { NODE_PROBE(DTRACE_NET_STREAM_END) }, - { NODE_PROBE(DTRACE_HTTP_SERVER_REQUEST) }, - { NODE_PROBE(DTRACE_HTTP_SERVER_RESPONSE) }, - { NODE_PROBE(DTRACE_HTTP_CLIENT_REQUEST) }, - { NODE_PROBE(DTRACE_HTTP_CLIENT_RESPONSE) } -#undef NODE_PROBE - }; - - for (size_t i = 0; i < arraysize(tab); i++) { - Local<String> key = OneByteString(env->isolate(), tab[i].name); - Local<Value> val = env->NewFunctionTemplate(tab[i].func) - ->GetFunction(env->context()) - .ToLocalChecked(); - target->Set(env->context(), key, val).FromJust(); - } - +void InitDTrace(Environment* env) { #ifdef HAVE_ETW // ETW is neither thread-safe nor does it clean up resources on exit, // so we can use it only on the main thread. @@ -295,10 +272,27 @@ void InitDTrace(Environment* env, Local<Object> target) { } #endif -#if defined HAVE_DTRACE || defined HAVE_ETW env->isolate()->AddGCPrologueCallback(dtrace_gc_start); env->isolate()->AddGCEpilogueCallback(dtrace_gc_done); +} + +void InitializeDTrace(Local<Object> target, + Local<Value> unused, + Local<Context> context, + void* priv) { + Environment* env = Environment::GetCurrent(context); + +#if defined HAVE_DTRACE || defined HAVE_ETW +# define NODE_PROBE(name) env->SetMethod(target, #name, name); + NODE_PROBE(DTRACE_NET_SERVER_CONNECTION) + NODE_PROBE(DTRACE_NET_STREAM_END) + NODE_PROBE(DTRACE_HTTP_SERVER_REQUEST) + NODE_PROBE(DTRACE_HTTP_SERVER_RESPONSE) + NODE_PROBE(DTRACE_HTTP_CLIENT_REQUEST) + NODE_PROBE(DTRACE_HTTP_CLIENT_RESPONSE) +# undef NODE_PROBE #endif } } // namespace node +NODE_MODULE_CONTEXT_AWARE_INTERNAL(dtrace, node::InitializeDTrace) diff --git a/src/node_dtrace.h b/src/node_dtrace.h index ee11cd68aa..cbabe90559 100644 --- a/src/node_dtrace.h +++ b/src/node_dtrace.h @@ -76,7 +76,7 @@ typedef struct { namespace node { -void InitDTrace(Environment* env, v8::Local<v8::Object> target); +void InitDTrace(Environment* env); } // namespace node |