mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.4 KiB
62 lines
1.4 KiB
'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;
|
|
|