From 6ea8ec1c591777b5ddff314d28bc4cc642971033 Mon Sep 17 00:00:00 2001 From: Matt Loring Date: Mon, 14 Sep 2015 15:28:27 -0700 Subject: [PATCH] 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 Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-tick-processor.js | 16 ++-------- tools/v8-prof/linux-tick-processor | 23 -------------- tools/v8-prof/mac-tick-processor | 7 ----- tools/v8-prof/tick-processor.js | 51 ++++++++++++++++++++++++++++++++ tools/v8-prof/windows-tick-processor.bat | 19 ------------ 5 files changed, 54 insertions(+), 62 deletions(-) delete mode 100755 tools/v8-prof/linux-tick-processor delete mode 100755 tools/v8-prof/mac-tick-processor create mode 100644 tools/v8-prof/tick-processor.js delete mode 100755 tools/v8-prof/windows-tick-processor.bat diff --git a/test/parallel/test-tick-processor.js b/test/parallel/test-tick-processor.js index 5e1cf13..d6bf642 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 ba72b3a..0000000 --- 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 968df80..0000000 --- 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 0000000..b25bcb7 --- /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 8b5d791..0000000 --- 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% -- 2.7.4