summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2019-03-09 09:28:04 +0100
committerJames M Snell <jasnell@gmail.com>2019-03-12 14:19:36 +0000
commitf9ddbb6b2f2ff61bb62a4ee8a8819d561322c9e8 (patch)
tree3e761d0fd70523fbf801520fa1e3863548f32169 /src
parentf2064dfc1fee2daa0537bc27d79d5aa0f734faaf (diff)
downloadandroid-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.cc2
-rw-r--r--src/node_binding.cc9
-rw-r--r--src/node_config.cc4
-rw-r--r--src/node_dtrace.cc46
-rw-r--r--src/node_dtrace.h2
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