diff options
author | Brian White <mscdex@mscdex.net> | 2015-12-06 01:35:52 -0500 |
---|---|---|
committer | Brian White <mscdex@mscdex.net> | 2016-03-18 19:25:51 -0400 |
commit | 089bef0a811e3eba7a309da687e90499ec06ce63 (patch) | |
tree | 149ce09498f5c2e4eb9585d67bafd609de9491de /benchmark/misc | |
parent | ad8257fa5b9795d3d79fa4a91d0f18c43f024ab3 (diff) | |
download | android-node-v8-089bef0a811e3eba7a309da687e90499ec06ce63.tar.gz android-node-v8-089bef0a811e3eba7a309da687e90499ec06ce63.tar.bz2 android-node-v8-089bef0a811e3eba7a309da687e90499ec06ce63.zip |
timers: improve setImmediate() performance
This commit improves setImmediate() performance by moving the
try-finally block that wraps callback execution into a separate
function because currently v8 never tries to optimize functions
that contain try-finally blocks.
With this change, there is a ~20-40% improvement in the included
setImmediate() depth benchmarks. The breadth benchmarks show a slight
improvement.
PR-URL: https://github.com/nodejs/node/pull/4169
Reviewed-By: Minwoo Jung <jmwsoft@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'benchmark/misc')
-rw-r--r-- | benchmark/misc/set-immediate-breadth-args.js | 28 | ||||
-rw-r--r-- | benchmark/misc/set-immediate-breadth.js | 21 | ||||
-rw-r--r-- | benchmark/misc/set-immediate-depth-args.js | 47 | ||||
-rw-r--r-- | benchmark/misc/set-immediate-depth.js | 22 |
4 files changed, 118 insertions, 0 deletions
diff --git a/benchmark/misc/set-immediate-breadth-args.js b/benchmark/misc/set-immediate-breadth-args.js new file mode 100644 index 0000000000..6a904e2675 --- /dev/null +++ b/benchmark/misc/set-immediate-breadth-args.js @@ -0,0 +1,28 @@ +'use strict'; + +const common = require('../common.js'); +const bench = common.createBenchmark(main, { + millions: [5] +}); + +function main(conf) { + const N = +conf.millions * 1e6; + + process.on('exit', function() { + bench.end(N / 1e6); + }); + + function cb1(arg1) {} + function cb2(arg1, arg2) {} + function cb3(arg1, arg2, arg3) {} + + bench.start(); + for (let i = 0; i < N; i++) { + if (i % 3 === 0) + setImmediate(cb3, 512, true, null); + else if (i % 2 === 0) + setImmediate(cb2, false, 5.1); + else + setImmediate(cb1, 0); + } +} diff --git a/benchmark/misc/set-immediate-breadth.js b/benchmark/misc/set-immediate-breadth.js new file mode 100644 index 0000000000..3d8b038342 --- /dev/null +++ b/benchmark/misc/set-immediate-breadth.js @@ -0,0 +1,21 @@ +'use strict'; + +const common = require('../common.js'); +const bench = common.createBenchmark(main, { + millions: [10] +}); + +function main(conf) { + const N = +conf.millions * 1e6; + + process.on('exit', function() { + bench.end(N / 1e6); + }); + + function cb() {} + + bench.start(); + for (let i = 0; i < N; i++) { + setImmediate(cb); + } +} diff --git a/benchmark/misc/set-immediate-depth-args.js b/benchmark/misc/set-immediate-depth-args.js new file mode 100644 index 0000000000..1f12ae6ec7 --- /dev/null +++ b/benchmark/misc/set-immediate-depth-args.js @@ -0,0 +1,47 @@ +'use strict'; + +const common = require('../common.js'); +const bench = common.createBenchmark(main, { + millions: [10] +}); + +function main(conf) { + const N = +conf.millions * 1e6; + + process.on('exit', function() { + bench.end(N / 1e6); + }); + + function cb3(n, arg2, arg3) { + if (--n) { + if (n % 3 === 0) + setImmediate(cb3, n, true, null); + else if (n % 2 === 0) + setImmediate(cb2, n, 5.1); + else + setImmediate(cb1, n); + } + } + function cb2(n, arg2) { + if (--n) { + if (n % 3 === 0) + setImmediate(cb3, n, true, null); + else if (n % 2 === 0) + setImmediate(cb2, n, 5.1); + else + setImmediate(cb1, n); + } + } + function cb1(n) { + if (--n) { + if (n % 3 === 0) + setImmediate(cb3, n, true, null); + else if (n % 2 === 0) + setImmediate(cb2, n, 5.1); + else + setImmediate(cb1, n); + } + } + bench.start(); + setImmediate(cb1, N); +} diff --git a/benchmark/misc/set-immediate-depth.js b/benchmark/misc/set-immediate-depth.js new file mode 100644 index 0000000000..12b9cdc7e6 --- /dev/null +++ b/benchmark/misc/set-immediate-depth.js @@ -0,0 +1,22 @@ +'use strict'; + +const common = require('../common.js'); +const bench = common.createBenchmark(main, { + millions: [10] +}); + +function main(conf) { + const N = +conf.millions * 1e6; + let n = N; + + process.on('exit', function() { + bench.end(N / 1e6); + }); + + bench.start(); + setImmediate(onNextTick); + function onNextTick() { + if (--n) + setImmediate(onNextTick); + } +} |