mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
tick-processor-base.js is a module used by three other tests. It is not a test fixture so move it out of the fixture directory. (One downside to having it in the fixture directory is that fixture code is not currently linted.) It is possible that the code in tick-processor-base.js should be integrated into common.js. This can potentially happen subsequently (and might make a reasonable good first contribution for a new contributor). PR-URL: https://github.com/nodejs/node/pull/9022 Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const fs = require('fs');
|
|
const cp = require('child_process');
|
|
const path = require('path');
|
|
|
|
common.refreshTmpDir();
|
|
|
|
const LOG_FILE = path.join(common.tmpDir, 'tick-processor.log');
|
|
const RETRY_TIMEOUT = 150;
|
|
|
|
function runTest(test) {
|
|
const proc = cp.spawn(process.execPath, [
|
|
'--no_logfile_per_isolate',
|
|
'--logfile=-',
|
|
'--prof',
|
|
'-pe', test.code
|
|
], {
|
|
stdio: [ 'ignore', 'pipe', 'inherit' ]
|
|
});
|
|
|
|
let ticks = '';
|
|
proc.stdout.on('data', (chunk) => ticks += chunk);
|
|
|
|
// Try to match after timeout
|
|
setTimeout(() => {
|
|
match(test.pattern, proc, () => ticks);
|
|
}, RETRY_TIMEOUT);
|
|
}
|
|
|
|
function match(pattern, parent, ticks) {
|
|
// Store current ticks log
|
|
fs.writeFileSync(LOG_FILE, ticks());
|
|
|
|
const proc = cp.spawn(process.execPath, [
|
|
'--prof-process',
|
|
'--call-graph-size=10',
|
|
LOG_FILE
|
|
], {
|
|
stdio: [ 'ignore', 'pipe', 'inherit' ]
|
|
});
|
|
|
|
let out = '';
|
|
proc.stdout.on('data', (chunk) => out += chunk);
|
|
proc.stdout.once('end', () => {
|
|
proc.once('exit', () => {
|
|
fs.unlinkSync(LOG_FILE);
|
|
|
|
// Retry after timeout
|
|
if (!pattern.test(out))
|
|
return setTimeout(() => match(pattern, parent, ticks), RETRY_TIMEOUT);
|
|
|
|
parent.stdout.removeAllListeners();
|
|
parent.kill();
|
|
});
|
|
|
|
proc.stdout.removeAllListeners();
|
|
proc.kill();
|
|
});
|
|
}
|
|
|
|
exports.runTest = runTest;
|