diff options
author | Vse Mozhet Byt <vsemozhetbyt@gmail.com> | 2017-02-19 18:23:59 +0200 |
---|---|---|
committer | cjihrig <cjihrig@gmail.com> | 2017-03-01 10:24:03 -0500 |
commit | dd81d539e281fd9dde3402df2656f17d56b3c7bb (patch) | |
tree | 816f5e2c4a5a62eeeac4c10ff9e6a79c34298e9c /benchmark/child_process | |
parent | abc13e56b6ceb3926e106fe620af708d14993969 (diff) | |
download | android-node-v8-dd81d539e281fd9dde3402df2656f17d56b3c7bb.tar.gz android-node-v8-dd81d539e281fd9dde3402df2656f17d56b3c7bb.tar.bz2 android-node-v8-dd81d539e281fd9dde3402df2656f17d56b3c7bb.zip |
child_process: fix deoptimizing use of arguments
Removed or fixed use of arguments in execFile(),
normalizeExecArgs(), and normalizeSpawnArguments().
Refs: https://github.com/nodejs/node/issues/10323
Refs: https://bugs.chromium.org/p/v8/issues/detail?id=6010
PR-URL: https://github.com/nodejs/node/pull/11535
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'benchmark/child_process')
-rw-r--r-- | benchmark/child_process/child-process-params.js | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/benchmark/child_process/child-process-params.js b/benchmark/child_process/child-process-params.js new file mode 100644 index 0000000000..644b2136a0 --- /dev/null +++ b/benchmark/child_process/child-process-params.js @@ -0,0 +1,146 @@ +'use strict'; + +const common = require('../common.js'); +const cp = require('child_process'); + +const command = 'echo'; +const args = ['hello']; +const options = {}; +const cb = () => {}; + +const configs = { + n: [1e3], + methodName: [ + 'exec', 'execSync', + 'execFile', 'execFileSync', + 'spawn', 'spawnSync', + ], + params: [1, 2, 3, 4], +}; + +const bench = common.createBenchmark(main, configs); + +function main(conf) { + const n = +conf.n; + const methodName = conf.methodName; + const params = +conf.params; + + const method = cp[methodName]; + + switch (methodName) { + case 'exec': + switch (params) { + case 1: + bench.start(); + for (let i = 0; i < n; i++) method(command).kill(); + bench.end(n); + break; + case 2: + bench.start(); + for (let i = 0; i < n; i++) method(command, options).kill(); + bench.end(n); + break; + case 3: + bench.start(); + for (let i = 0; i < n; i++) method(command, options, cb).kill(); + bench.end(n); + break; + } + break; + case 'execSync': + switch (params) { + case 1: + bench.start(); + for (let i = 0; i < n; i++) method(command); + bench.end(n); + break; + case 2: + bench.start(); + for (let i = 0; i < n; i++) method(command, options); + bench.end(n); + break; + } + break; + case 'execFile': + switch (params) { + case 1: + bench.start(); + for (let i = 0; i < n; i++) method(command).kill(); + bench.end(n); + break; + case 2: + bench.start(); + for (let i = 0; i < n; i++) method(command, args).kill(); + bench.end(n); + break; + case 3: + bench.start(); + for (let i = 0; i < n; i++) method(command, args, options).kill(); + bench.end(n); + break; + case 4: + bench.start(); + for (let i = 0; i < n; i++) method(command, args, options, cb).kill(); + bench.end(n); + break; + } + break; + case 'execFileSync': + switch (params) { + case 1: + bench.start(); + for (let i = 0; i < n; i++) method(command); + bench.end(n); + break; + case 2: + bench.start(); + for (let i = 0; i < n; i++) method(command, args); + bench.end(n); + break; + case 3: + bench.start(); + for (let i = 0; i < n; i++) method(command, args, options); + bench.end(n); + break; + } + break; + case 'spawn': + switch (params) { + case 1: + bench.start(); + for (let i = 0; i < n; i++) method(command).kill(); + bench.end(n); + break; + case 2: + bench.start(); + for (let i = 0; i < n; i++) method(command, args).kill(); + bench.end(n); + break; + case 3: + bench.start(); + for (let i = 0; i < n; i++) method(command, args, options).kill(); + bench.end(n); + break; + } + break; + case 'spawnSync': + switch (params) { + case 1: + bench.start(); + for (let i = 0; i < n; i++) method(command); + bench.end(n); + break; + case 2: + bench.start(); + for (let i = 0; i < n; i++) method(command, args); + bench.end(n); + break; + case 3: + bench.start(); + for (let i = 0; i < n; i++) method(command, args, options); + bench.end(n); + break; + } + break; + } +} |