diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-03-12 18:34:22 +0800 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-03-19 05:37:20 +0800 |
commit | a91d36fcc12c90f842d38f4a6b50809133bf1bc7 (patch) | |
tree | 0ff1ec46eeadb162af18d4d7390dd3c77e55dff8 /lib/internal | |
parent | e2a2f9398e30faaadf1e124844112b89322fae2e (diff) | |
download | android-node-v8-a91d36fcc12c90f842d38f4a6b50809133bf1bc7.tar.gz android-node-v8-a91d36fcc12c90f842d38f4a6b50809133bf1bc7.tar.bz2 android-node-v8-a91d36fcc12c90f842d38f4a6b50809133bf1bc7.zip |
process: set the trace category update handler during bootstrap
Set the trace category update handler during bootstrap, but delay
the initial invocation of it until pre-execution. In addition, do
not serialize the `node.async_hooks` category state when loading
the trace_event binding during bootstrap, since it depends on
run time states (e.g. CLI flags). Instead, use the
`isTraceCategoryEnabled` v8 intrinsics to query that value during
pre-execution.
PR-URL: https://github.com/nodejs/node/pull/26605
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'lib/internal')
-rw-r--r-- | lib/internal/bootstrap/node.js | 7 | ||||
-rw-r--r-- | lib/internal/bootstrap/pre_execution.js | 26 | ||||
-rw-r--r-- | lib/internal/process/per_thread.js | 17 |
3 files changed, 27 insertions, 23 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index 9a9cb5aae9..d562298e23 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -197,6 +197,13 @@ if (!config.noBrowserGlobals) { defineOperation(global, 'setImmediate', timers.setImmediate); } +// Set the per-Environment callback that will be called +// when the TrackingTraceStateObserver updates trace state. +// Note that when NODE_USE_V8_PLATFORM is true, the observer is +// attached to the per-process TracingController. +const { setTraceCategoryStateUpdateHandler } = internalBinding('trace_events'); +setTraceCategoryStateUpdateHandler(perThreadSetup.toggleTraceCategoryState); + // process.allowedNodeEnvironmentFlags Object.defineProperty(process, 'allowedNodeEnvironmentFlags', { get() { diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index 04083b53a2..c38822bd89 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -1,9 +1,6 @@ 'use strict'; const { getOptionValue } = require('internal/options'); -// Lazy load internal/trace_events_async_hooks only if the async_hooks -// trace event category is enabled. -let traceEventsAsyncHook; function prepareMainThreadExecution() { // Patch the process object with legacy properties and normalizations @@ -162,26 +159,9 @@ function initializeReportSignalHandlers() { } function setupTraceCategoryState() { - const { - asyncHooksEnabledInitial, - setTraceCategoryStateUpdateHandler - } = internalBinding('trace_events'); - - toggleTraceCategoryState(asyncHooksEnabledInitial); - setTraceCategoryStateUpdateHandler(toggleTraceCategoryState); -} - -// Dynamically enable/disable the traceEventsAsyncHook -function toggleTraceCategoryState(asyncHooksEnabled) { - if (asyncHooksEnabled) { - if (!traceEventsAsyncHook) { - traceEventsAsyncHook = - require('internal/trace_events_async_hooks').createHook(); - } - traceEventsAsyncHook.enable(); - } else if (traceEventsAsyncHook) { - traceEventsAsyncHook.disable(); - } + const { isTraceCategoryEnabled } = internalBinding('trace_events'); + const { toggleTraceCategoryState } = require('internal/process/per_thread'); + toggleTraceCategoryState(isTraceCategoryEnabled('node.async_hooks')); } // In general deprecations are intialized wherever the APIs are implemented, diff --git a/lib/internal/process/per_thread.js b/lib/internal/process/per_thread.js index a0d6b32596..7a3bee3098 100644 --- a/lib/internal/process/per_thread.js +++ b/lib/internal/process/per_thread.js @@ -304,7 +304,24 @@ function buildAllowedFlags() { )); } +// Lazy load internal/trace_events_async_hooks only if the async_hooks +// trace event category is enabled. +let traceEventsAsyncHook; +// Dynamically enable/disable the traceEventsAsyncHook +function toggleTraceCategoryState(asyncHooksEnabled) { + if (asyncHooksEnabled) { + if (!traceEventsAsyncHook) { + traceEventsAsyncHook = + require('internal/trace_events_async_hooks').createHook(); + } + traceEventsAsyncHook.enable(); + } else if (traceEventsAsyncHook) { + traceEventsAsyncHook.disable(); + } +} + module.exports = { + toggleTraceCategoryState, assert, buildAllowedFlags, wrapProcessMethods |