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();
|
||||
process.chdir(common.tmpDir);
|
||||
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,
|
||||
// then a large number of unknown ticks should be present
|
||||
runTest(/LazyCompile.*\[eval\]:1|.*% UNKNOWN/,
|
||||
@ -43,19 +43,9 @@ function runTest(pattern, code) {
|
||||
assert.fail('There should be a single log file.');
|
||||
}
|
||||
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'});
|
||||
assert(out.match(pattern));
|
||||
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