Skip to content

Commit 95a3844

Browse files
committed
process: handle process.env.NODE_V8_COVERAGE in pre-execution
Since this depends on environment variable, and the worker threads do not need to persist the variable value because they cannot switch cwd. PR-URL: nodejs#26466 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
1 parent 50e4722 commit 95a3844

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

lib/internal/bootstrap/node.js

-23
Original file line numberDiff line numberDiff line change
@@ -303,29 +303,6 @@ Object.defineProperty(process, 'features', {
303303
hasUncaughtExceptionCaptureCallback;
304304
}
305305

306-
// User-facing NODE_V8_COVERAGE environment variable that writes
307-
// ScriptCoverage to a specified file.
308-
if (process.env.NODE_V8_COVERAGE) {
309-
const originalReallyExit = process.reallyExit;
310-
const cwd = NativeModule.require('internal/process/execution').tryGetCwd();
311-
const { resolve } = NativeModule.require('path');
312-
// Resolve the coverage directory to an absolute path, and
313-
// overwrite process.env so that the original path gets passed
314-
// to child processes even when they switch cwd.
315-
const coverageDirectory = resolve(cwd, process.env.NODE_V8_COVERAGE);
316-
process.env.NODE_V8_COVERAGE = coverageDirectory;
317-
const {
318-
writeCoverage,
319-
setCoverageDirectory
320-
} = NativeModule.require('internal/coverage-gen/with_profiler');
321-
setCoverageDirectory(coverageDirectory);
322-
process.on('exit', writeCoverage);
323-
process.reallyExit = (code) => {
324-
writeCoverage();
325-
originalReallyExit(code);
326-
};
327-
}
328-
329306
function setupProcessObject() {
330307
const EventEmitter = NativeModule.require('events');
331308
const origProcProto = Object.getPrototypeOf(process);

lib/internal/bootstrap/pre_execution.js

+29
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ function prepareMainThreadExecution() {
1010

1111
setupWarningHandler();
1212

13+
// Resolve the coverage directory to an absolute path, and
14+
// overwrite process.env so that the original path gets passed
15+
// to child processes even when they switch cwd.
16+
if (process.env.NODE_V8_COVERAGE) {
17+
process.env.NODE_V8_COVERAGE =
18+
setupCoverageHooks(process.env.NODE_V8_COVERAGE);
19+
}
20+
1321
// Only main thread receives signals.
1422
setupSignalHandlers();
1523

@@ -47,6 +55,26 @@ function setupWarningHandler() {
4755
}
4856
}
4957

58+
// Setup User-facing NODE_V8_COVERAGE environment variable that writes
59+
// ScriptCoverage to a specified file.
60+
function setupCoverageHooks(dir) {
61+
const originalReallyExit = process.reallyExit;
62+
const cwd = require('internal/process/execution').tryGetCwd();
63+
const { resolve } = require('path');
64+
const coverageDirectory = resolve(cwd, dir);
65+
const {
66+
writeCoverage,
67+
setCoverageDirectory
68+
} = require('internal/coverage-gen/with_profiler');
69+
setCoverageDirectory(coverageDirectory);
70+
process.on('exit', writeCoverage);
71+
process.reallyExit = (code) => {
72+
writeCoverage();
73+
originalReallyExit(code);
74+
};
75+
return coverageDirectory;
76+
}
77+
5078
function initializeReport() {
5179
if (!getOptionValue('--experimental-report')) {
5280
return;
@@ -279,6 +307,7 @@ function loadPreloadModules() {
279307
}
280308

281309
module.exports = {
310+
setupCoverageHooks,
282311
setupWarningHandler,
283312
prepareMainThreadExecution,
284313
initializeDeprecations,

lib/internal/main/worker_thread.js

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// message port.
55

66
const {
7+
setupCoverageHooks,
78
setupWarningHandler,
89
initializeDeprecations,
910
initializeESMLoader,
@@ -42,6 +43,12 @@ const debug = require('util').debuglog('worker');
4243

4344
setupWarningHandler();
4445

46+
// Since worker threads cannot switch cwd, we do not need to
47+
// overwrite the process.env.NODE_V8_COVERAGE variable.
48+
if (process.env.NODE_V8_COVERAGE) {
49+
setupCoverageHooks(process.env.NODE_V8_COVERAGE);
50+
}
51+
4552
debug(`[${threadId}] is setting up worker child environment`);
4653

4754
// Set up the message port and start listening

0 commit comments

Comments
 (0)