diff options
Diffstat (limited to 'lib/internal/bootstrap/node.js')
-rw-r--r-- | lib/internal/bootstrap/node.js | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index 53bab24ef5..ca979af258 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -158,13 +158,6 @@ function startup() { setupProcessStdio(getStdout, getStdin, getStderr); } - if (global.__coverage__) - NativeModule.require('internal/process/write-coverage').setup(); - - if (process.env.NODE_V8_COVERAGE) { - NativeModule.require('internal/process/coverage').setupExitHooks(); - } - if (config.hasInspector) { NativeModule.require('internal/inspector_async_hook').setup(); } @@ -295,6 +288,45 @@ function startup() { } }); + // Set up coverage exit hooks. + let originalReallyExit = process.reallyExit; + // Core coverage generation using nyc instrumented lib/ files. + // See `make coverage-build`. This does not affect user land. + // TODO(joyeecheung): this and `with_instrumentation.js` can be + // removed in favor of NODE_V8_COVERAGE once we switch to that + // in https://coverage.nodejs.org/ + if (global.__coverage__) { + const { + writeCoverage + } = NativeModule.require('internal/coverage-gen/with_instrumentation'); + process.on('exit', writeCoverage); + originalReallyExit = process.reallyExit = (code) => { + writeCoverage(); + originalReallyExit(code); + }; + } + // User-facing NODE_V8_COVERAGE environment variable that writes + // ScriptCoverage to a specified file. + if (process.env.NODE_V8_COVERAGE) { + const cwd = NativeModule.require('internal/process/execution').tryGetCwd(); + const { resolve } = NativeModule.require('path'); + // Resolve the coverage directory to an absolute path, and + // overwrite process.env so that the original path gets passed + // to child processes even when they switch cwd. + const coverageDirectory = resolve(cwd, process.env.NODE_V8_COVERAGE); + process.env.NODE_V8_COVERAGE = coverageDirectory; + const { + writeCoverage, + setCoverageDirectory + } = NativeModule.require('internal/coverage-gen/with_profiler'); + setCoverageDirectory(coverageDirectory); + process.on('exit', writeCoverage); + process.reallyExit = (code) => { + writeCoverage(); + originalReallyExit(code); + }; + } + const perf = internalBinding('performance'); const { NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE, |