diff --git a/test/parallel/test-tick-processor.js b/test/parallel/test-tick-processor.js index 5e1cf13988..d6bf642bba 100644 --- a/test/parallel/test-tick-processor.js +++ b/test/parallel/test-tick-processor.js @@ -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'; - } -} diff --git a/tools/v8-prof/linux-tick-processor b/tools/v8-prof/linux-tick-processor deleted file mode 100755 index ba72b3a2b3..0000000000 --- a/tools/v8-prof/linux-tick-processor +++ /dev/null @@ -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" diff --git a/tools/v8-prof/mac-tick-processor b/tools/v8-prof/mac-tick-processor deleted file mode 100755 index 968df80c28..0000000000 --- a/tools/v8-prof/mac-tick-processor +++ /dev/null @@ -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" $@ diff --git a/tools/v8-prof/tick-processor.js b/tools/v8-prof/tick-processor.js new file mode 100644 index 0000000000..b25bcb75a4 --- /dev/null +++ b/tools/v8-prof/tick-processor.js @@ -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' }); +}); diff --git a/tools/v8-prof/windows-tick-processor.bat b/tools/v8-prof/windows-tick-processor.bat deleted file mode 100755 index 8b5d791efd..0000000000 --- a/tools/v8-prof/windows-tick-processor.bat +++ /dev/null @@ -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%