summaryrefslogtreecommitdiff
path: root/lib/internal/process
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2018-12-29 18:44:11 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2019-01-16 13:49:36 +0800
commitb367ab2a6624b41bd59b751c61cf64ad91a9e2d6 (patch)
tree60e2e85a2f60bb773a642d6c948855072ff3e3d6 /lib/internal/process
parent2b401e33de81428dc5f6dfc60343e65ee5167886 (diff)
downloadandroid-node-v8-b367ab2a6624b41bd59b751c61cf64ad91a9e2d6.tar.gz
android-node-v8-b367ab2a6624b41bd59b751c61cf64ad91a9e2d6.tar.bz2
android-node-v8-b367ab2a6624b41bd59b751c61cf64ad91a9e2d6.zip
process: refactor coverage setup during bootstrap
- Renamed `internal/process/write-coverage.js` to `internal/coverage-gen/with_instrumentation.js`, `internal/process/coverage.js` to `internal/coverage-gen/with_profiler.js` to distinguish the two better and added comments. - Separate the coverage directory setup and the connection setup, moves the directory setup into `node.js` and closer to the exit hooks because that's where it's used. - Moves the `process.reallyExit` overwrite and `process.on('exit')` hooks setup into bootstrap/node.js for clarity, and move them to a later stage of bootstrap since they do not have to happen that early. PR-URL: https://github.com/nodejs/node/pull/25398 Reviewed-By: Ben Coe <bencoe@gmail.com>
Diffstat (limited to 'lib/internal/process')
-rw-r--r--lib/internal/process/coverage.js101
-rw-r--r--lib/internal/process/per_thread.js2
-rw-r--r--lib/internal/process/write-coverage.js41
3 files changed, 1 insertions, 143 deletions
diff --git a/lib/internal/process/coverage.js b/lib/internal/process/coverage.js
deleted file mode 100644
index 95235c8ac9..0000000000
--- a/lib/internal/process/coverage.js
+++ /dev/null
@@ -1,101 +0,0 @@
-'use strict';
-let coverageConnection = null;
-let coverageDirectory;
-
-function writeCoverage() {
- if (!coverageConnection && coverageDirectory) {
- return;
- }
-
- const { join } = require('path');
- const { mkdirSync, writeFileSync } = require('fs');
- const { threadId } = require('internal/worker');
-
- const filename = `coverage-${process.pid}-${Date.now()}-${threadId}.json`;
- try {
- mkdirSync(coverageDirectory, { recursive: true });
- } catch (err) {
- if (err.code !== 'EEXIST') {
- console.error(err);
- return;
- }
- }
-
- const target = join(coverageDirectory, filename);
- try {
- disableAllAsyncHooks();
- let msg;
- coverageConnection._coverageCallback = function(_msg) {
- msg = _msg;
- };
- coverageConnection.dispatch(JSON.stringify({
- id: 3,
- method: 'Profiler.takePreciseCoverage'
- }));
- const coverageInfo = JSON.parse(msg).result;
- writeFileSync(target, JSON.stringify(coverageInfo));
- } catch (err) {
- console.error(err);
- } finally {
- coverageConnection.disconnect();
- coverageConnection = null;
- }
-}
-
-function disableAllAsyncHooks() {
- const { getHookArrays } = require('internal/async_hooks');
- const [hooks_array] = getHookArrays();
- hooks_array.forEach((hook) => { hook.disable(); });
-}
-
-exports.writeCoverage = writeCoverage;
-
-function setup() {
- const { hasInspector } = internalBinding('config');
- if (!hasInspector) {
- process._rawDebug('inspector not enabled');
- return;
- }
-
- const { Connection } = internalBinding('inspector');
- coverageConnection = new Connection((res) => {
- if (coverageConnection._coverageCallback) {
- coverageConnection._coverageCallback(res);
- }
- });
- coverageConnection.dispatch(JSON.stringify({
- id: 1,
- method: 'Profiler.enable'
- }));
- coverageConnection.dispatch(JSON.stringify({
- id: 2,
- method: 'Profiler.startPreciseCoverage',
- params: {
- callCount: true,
- detailed: true
- }
- }));
-
- try {
- const { cwd } = internalBinding('process_methods');
- const { resolve } = require('path');
- coverageDirectory = process.env.NODE_V8_COVERAGE =
- resolve(cwd(), process.env.NODE_V8_COVERAGE);
- } catch (err) {
- process._rawDebug(err.toString());
- }
-}
-
-exports.setup = setup;
-
-function setupExitHooks() {
- const reallyReallyExit = process.reallyExit;
- process.reallyExit = function(code) {
- writeCoverage();
- reallyReallyExit(code);
- };
-
- process.on('exit', writeCoverage);
-}
-
-exports.setupExitHooks = setupExitHooks;
diff --git a/lib/internal/process/per_thread.js b/lib/internal/process/per_thread.js
index efa736fa61..6d64c636b2 100644
--- a/lib/internal/process/per_thread.js
+++ b/lib/internal/process/per_thread.js
@@ -155,7 +155,7 @@ function wrapProcessMethods(binding) {
function kill(pid, sig) {
var err;
if (process.env.NODE_V8_COVERAGE) {
- const { writeCoverage } = require('internal/process/coverage');
+ const { writeCoverage } = require('internal/coverage-gen/with_profiler');
writeCoverage();
}
diff --git a/lib/internal/process/write-coverage.js b/lib/internal/process/write-coverage.js
deleted file mode 100644
index 17da7ee609..0000000000
--- a/lib/internal/process/write-coverage.js
+++ /dev/null
@@ -1,41 +0,0 @@
-'use strict';
-const path = require('path');
-const { mkdirSync, writeFileSync } = require('fs');
-
-function writeCoverage() {
- if (!global.__coverage__) {
- return;
- }
-
- const dirname = path.join(path.dirname(process.execPath), '.coverage');
- const filename = `coverage-${process.pid}-${Date.now()}.json`;
- try {
- mkdirSync(dirname);
- } catch (err) {
- if (err.code !== 'EEXIST') {
- console.error(err);
- return;
- }
- }
-
- const target = path.join(dirname, filename);
- const coverageInfo = JSON.stringify(global.__coverage__);
- try {
- writeFileSync(target, coverageInfo);
- } catch (err) {
- console.error(err);
- }
-}
-
-function setup() {
- const reallyReallyExit = process.reallyExit;
-
- process.reallyExit = function(code) {
- writeCoverage();
- reallyReallyExit(code);
- };
-
- process.on('exit', writeCoverage);
-}
-
-exports.setup = setup;