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)

`