diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2018-12-29 18:44:11 +0800 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-01-16 13:49:36 +0800 |
commit | b367ab2a6624b41bd59b751c61cf64ad91a9e2d6 (patch) | |
tree | 60e2e85a2f60bb773a642d6c948855072ff3e3d6 /lib/internal/process | |
parent | 2b401e33de81428dc5f6dfc60343e65ee5167886 (diff) | |
download | android-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.js | 101 | ||||
-rw-r--r-- | lib/internal/process/per_thread.js | 2 | ||||
-rw-r--r-- | lib/internal/process/write-coverage.js | 41 |
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; |