tools: single, cross-platform tick processor
Currently there are three separate tick processor scripts for mac, windows, and linux. These have been replaced with a single node.js script to improve maintainability and remove the need to preserve parallel logic in these separate places. PR-URL: https://github.com/nodejs/node/pull/2868 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
This commit is contained in:
parent
4dcf24cfab
commit
e0c3d2ad57
@ -8,7 +8,7 @@ var common = require('../common');
|
|||||||
common.refreshTmpDir();
|
common.refreshTmpDir();
|
||||||
process.chdir(common.tmpDir);
|
process.chdir(common.tmpDir);
|
||||||
var processor =
|
var processor =
|
||||||
path.join(common.testDir, '..', 'tools', 'v8-prof', getScriptName());
|
path.join(common.testDir, '..', 'tools', 'v8-prof', 'tick-processor.js');
|
||||||
// Unknown checked for to prevent flakiness, if pattern is not found,
|
// Unknown checked for to prevent flakiness, if pattern is not found,
|
||||||
// then a large number of unknown ticks should be present
|
// then a large number of unknown ticks should be present
|
||||||
runTest(/LazyCompile.*\[eval\]:1|.*% UNKNOWN/,
|
runTest(/LazyCompile.*\[eval\]:1|.*% UNKNOWN/,
|
||||||
@ -43,19 +43,9 @@ function runTest(pattern, code) {
|
|||||||
assert.fail('There should be a single log file.');
|
assert.fail('There should be a single log file.');
|
||||||
}
|
}
|
||||||
var log = matches[0];
|
var log = matches[0];
|
||||||
var out = cp.execSync(processor + ' --call-graph-size=10 ' + log,
|
var out = cp.execSync(process.execPath + ' ' + processor +
|
||||||
|
' --call-graph-size=10 ' + log,
|
||||||
{encoding: 'utf8'});
|
{encoding: 'utf8'});
|
||||||
assert(out.match(pattern));
|
assert(out.match(pattern));
|
||||||
fs.unlinkSync(log);
|
fs.unlinkSync(log);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getScriptName() {
|
|
||||||
switch (process.platform) {
|
|
||||||
case 'darwin':
|
|
||||||
return 'mac-tick-processor';
|
|
||||||
case 'win32':
|
|
||||||
return 'windows-tick-processor.bat';
|
|
||||||
default:
|
|
||||||
return 'linux-tick-processor';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
umask 077
|
|
||||||
TEMP_SCRIPT_FILE="/tmp/node-tick-processor-input-script-$$"
|
|
||||||
tools_path=`cd $(dirname "$0");pwd`
|
|
||||||
v8_tools="$tools_path/../../deps/v8/tools"
|
|
||||||
|
|
||||||
cat "$tools_path/polyfill.js" "$v8_tools/splaytree.js" "$v8_tools/codemap.js" \
|
|
||||||
"$v8_tools/csvparser.js" "$v8_tools/consarray.js" \
|
|
||||||
"$v8_tools/profile.js" "$v8_tools/profile_view.js" \
|
|
||||||
"$v8_tools/logreader.js" "$v8_tools/tickprocessor.js" \
|
|
||||||
"$v8_tools/SourceMap.js" \
|
|
||||||
"$v8_tools/tickprocessor-driver.js" >> "$TEMP_SCRIPT_FILE"
|
|
||||||
|
|
||||||
NODE=${NODE:-node}
|
|
||||||
|
|
||||||
if [ ! -x "$NODE" ] && [ -x "$(dirname "$0")/../../node" ]; then
|
|
||||||
NODE="$(dirname "$0")/../../node"
|
|
||||||
fi
|
|
||||||
|
|
||||||
"$NODE" "$TEMP_SCRIPT_FILE" $@
|
|
||||||
|
|
||||||
rm -f "$TEMP_SCRIPT_FILE"
|
|
@ -1,7 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# A wrapper script to call 'linux-tick-processor' with Mac-specific settings.
|
|
||||||
|
|
||||||
tools_path=`cd $(dirname "$0");pwd`
|
|
||||||
v8_tools="$tools_path/../../deps/v8/tools"
|
|
||||||
"$tools_path/linux-tick-processor" --mac --nm="$v8_tools/mac-nm" $@
|
|
51
tools/v8-prof/tick-processor.js
Normal file
51
tools/v8-prof/tick-processor.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
'use strict';
|
||||||
|
var cp = require('child_process');
|
||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
var toolsPath = path.join(__dirname, '..', '..', 'deps', 'v8', 'tools');
|
||||||
|
var scriptFiles = [
|
||||||
|
path.join(__dirname, 'polyfill.js'),
|
||||||
|
path.join(toolsPath, 'splaytree.js'),
|
||||||
|
path.join(toolsPath, 'codemap.js'),
|
||||||
|
path.join(toolsPath, 'csvparser.js'),
|
||||||
|
path.join(toolsPath, 'consarray.js'),
|
||||||
|
path.join(toolsPath, 'csvparser.js'),
|
||||||
|
path.join(toolsPath, 'consarray.js'),
|
||||||
|
path.join(toolsPath, 'profile.js'),
|
||||||
|
path.join(toolsPath, 'profile_view.js'),
|
||||||
|
path.join(toolsPath, 'logreader.js'),
|
||||||
|
path.join(toolsPath, 'tickprocessor.js'),
|
||||||
|
path.join(toolsPath, 'SourceMap.js'),
|
||||||
|
path.join(toolsPath, 'tickprocessor-driver.js')];
|
||||||
|
var tempScript = path.join(__dirname, 'tick-processor-tmp-' + process.pid);
|
||||||
|
|
||||||
|
process.on('exit', function() {
|
||||||
|
try { fs.unlinkSync(tempScript); } catch (e) {}
|
||||||
|
});
|
||||||
|
process.on('uncaughtException', function(err) {
|
||||||
|
try { fs.unlinkSync(tempScript); } catch (e) {}
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
var inStreams = scriptFiles.map(function(f) {
|
||||||
|
return fs.createReadStream(f);
|
||||||
|
});
|
||||||
|
var outStream = fs.createWriteStream(tempScript);
|
||||||
|
inStreams.reduce(function(prev, curr, i) {
|
||||||
|
prev.on('end', function() {
|
||||||
|
curr.pipe(outStream, { end: i === inStreams.length - 1});
|
||||||
|
});
|
||||||
|
return curr;
|
||||||
|
});
|
||||||
|
inStreams[0].pipe(outStream, { end: false });
|
||||||
|
outStream.on('close', function() {
|
||||||
|
var tickArguments = [tempScript];
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
tickArguments.push('--mac', '--nm=' + path.join(toolsPath, 'mac-nm'));
|
||||||
|
} else if (process.platform === 'win32') {
|
||||||
|
tickArguments.push('--windows');
|
||||||
|
}
|
||||||
|
tickArguments.push.apply(tickArguments, process.argv.slice(2));
|
||||||
|
var processTicks = cp.spawn(process.execPath, tickArguments, { stdio: 'inherit' });
|
||||||
|
});
|
@ -1,19 +0,0 @@
|
|||||||
@echo off
|
|
||||||
setlocal
|
|
||||||
|
|
||||||
SET tools_dir=%~dp0
|
|
||||||
SET v8_tools=%tools_dir%..\..\deps\v8\tools\
|
|
||||||
|
|
||||||
SET temp_script=%TEMP%\node-tick-processor-input-script
|
|
||||||
|
|
||||||
IF NOT DEFINED NODE (SET NODE=node.exe)
|
|
||||||
%NODE% --version 2> NUL
|
|
||||||
if %ERRORLEVEL%==9009 (SET NODE=%~dp0\..\..\Release\node.exe)
|
|
||||||
|
|
||||||
|
|
||||||
type %tools_dir%polyfill.js %v8_tools%splaytree.js %v8_tools%codemap.js^
|
|
||||||
%v8_tools%csvparser.js %v8_tools%consarray.js %v8_tools%profile.js^
|
|
||||||
%v8_tools%profile_view.js %v8_tools%logreader.js %v8_tools%SourceMap.js^
|
|
||||||
%v8_tools%tickprocessor.js %v8_tools%tickprocessor-driver.js >> %temp_script%
|
|
||||||
%NODE% %temp_script% --windows %*
|
|
||||||
del %temp_script%
|
|
Loading…
x
Reference in New Issue
Block a user