diff options
author | Bartosz Sosnowski <bartosz@janeasystems.com> | 2016-05-25 16:33:10 +0200 |
---|---|---|
committer | João Reis <reis@janeasystems.com> | 2016-06-09 12:42:54 +0100 |
commit | cbbdc298b0e27b40634a50cb85da64a812fd2094 (patch) | |
tree | d8d974d49a4ffd11cc780435220c1460a03ced14 /benchmark/child_process | |
parent | 0cd01183342d0a1675a261c0bb57e742cfd75d7d (diff) | |
download | android-node-v8-cbbdc298b0e27b40634a50cb85da64a812fd2094.tar.gz android-node-v8-cbbdc298b0e27b40634a50cb85da64a812fd2094.tar.bz2 android-node-v8-cbbdc298b0e27b40634a50cb85da64a812fd2094.zip |
benchmark: fix child-process-read on Windows
Under Windows 'ipc' communication requires the other process to format
its messages with 'IPC framing protocol'. Otherwise, an assert is
triggered in libuv. This commit changes child-process-read benchmark
to use stdout to communicate with parent process. It also adds
child-process-read-ipc.js to benchmark IPC communication using
child node process.
PR-URL: https://github.com/nodejs/node/pull/6971
Reviewed-By: João Reis <reis@janeasystems.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'benchmark/child_process')
-rw-r--r-- | benchmark/child_process/child-process-read-ipc.js | 37 | ||||
-rw-r--r-- | benchmark/child_process/child-process-read.js | 13 |
2 files changed, 47 insertions, 3 deletions
diff --git a/benchmark/child_process/child-process-read-ipc.js b/benchmark/child_process/child-process-read-ipc.js new file mode 100644 index 0000000000..82e833980f --- /dev/null +++ b/benchmark/child_process/child-process-read-ipc.js @@ -0,0 +1,37 @@ +'use strict'; +if (process.argv[2] === 'child') +{ + const len = +process.argv[3]; + const msg = `"${'.'.repeat(len)}"`; + while (true) { + process.send(msg); + } +} else { + const common = require('../common.js'); + const bench = common.createBenchmark(main, { + len: [64, 256, 1024, 4096, 32768], + dur: [5] + }); + const spawn = require('child_process').spawn; + function main(conf) { + bench.start(); + + const dur = +conf.dur; + const len = +conf.len; + + const options = { 'stdio': ['ignore', 'ignore', 'ignore', 'ipc'] }; + const child = spawn(process.argv[0], + [process.argv[1], 'child', len], options); + + var bytes = 0; + child.on('message', function(msg) { + bytes += msg.length; + }); + + setTimeout(function() { + child.kill(); + const gbits = (bytes * 8) / (1024 * 1024 * 1024); + bench.end(gbits); + }, dur * 1000); + } +} diff --git a/benchmark/child_process/child-process-read.js b/benchmark/child_process/child-process-read.js index 33c268390f..b0128eb796 100644 --- a/benchmark/child_process/child-process-read.js +++ b/benchmark/child_process/child-process-read.js @@ -1,7 +1,14 @@ 'use strict'; const common = require('../common.js'); +const os = require('os'); + +var messagesLength = [64, 256, 1024, 4096]; +// Windows does not support that long arguments +if (os.platform() !== 'win32') + messagesLength.push(32768); + const bench = common.createBenchmark(main, { - len: [64, 256, 1024, 4096, 32768], + len: messagesLength, dur: [5] }); @@ -13,11 +20,11 @@ function main(conf) { const len = +conf.len; const msg = '"' + Array(len).join('.') + '"'; - const options = {'stdio': ['ignore', 'ipc', 'ignore']}; + const options = { 'stdio': ['ignore', 'pipe', 'ignore'] }; const child = spawn('yes', [msg], options); var bytes = 0; - child.on('message', function(msg) { + child.stdout.on('data', function(msg) { bytes += msg.length; }); |