summaryrefslogtreecommitdiff
path: root/benchmark/misc
diff options
context:
space:
mode:
authorBrian White <mscdex@mscdex.net>2015-12-06 01:35:52 -0500
committerBrian White <mscdex@mscdex.net>2016-03-18 19:25:51 -0400
commit089bef0a811e3eba7a309da687e90499ec06ce63 (patch)
tree149ce09498f5c2e4eb9585d67bafd609de9491de /benchmark/misc
parentad8257fa5b9795d3d79fa4a91d0f18c43f024ab3 (diff)
downloadandroid-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.js28
-rw-r--r--benchmark/misc/set-immediate-breadth.js21
-rw-r--r--benchmark/misc/set-immediate-depth-args.js47
-rw-r--r--benchmark/misc/set-immediate-depth.js22
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);
+ }
+}