summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorAnatoli Papirovski <apapirovski@mac.com>2018-09-13 07:35:15 -0700
committerRich Trott <rtrott@gmail.com>2018-10-17 20:38:07 -0700
commite7af9830e98fcda7e7a11e0b13b667163cc8c940 (patch)
treebf90f7e9823fe29f90ea9b890ec39370a3e97526 /benchmark
parent4e9e0d339efa46316d90d6f2618afd0c0fc6cd34 (diff)
downloadandroid-node-v8-e7af9830e98fcda7e7a11e0b13b667163cc8c940.tar.gz
android-node-v8-e7af9830e98fcda7e7a11e0b13b667163cc8c940.tar.bz2
android-node-v8-e7af9830e98fcda7e7a11e0b13b667163cc8c940.zip
timers: run nextTicks after each immediate and timer
In order to better match the browser behaviour, run nextTicks (and subsequently the microtask queue) after each individual Timer and Immediate, rather than after the whole list is processed. The current behaviour is somewhat of a performance micro-optimization and also partly dictated by how timer handles were implemented. PR-URL: https://github.com/nodejs/node/pull/22842 Fixes: https://github.com/nodejs/node/issues/22257 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/timers/timers-timeout-nexttick.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/benchmark/timers/timers-timeout-nexttick.js b/benchmark/timers/timers-timeout-nexttick.js
new file mode 100644
index 0000000000..781e505ae4
--- /dev/null
+++ b/benchmark/timers/timers-timeout-nexttick.js
@@ -0,0 +1,36 @@
+'use strict';
+const common = require('../common.js');
+
+// The following benchmark measures setting up n * 1e6 timeouts,
+// as well as scheduling a next tick from each timeout. Those
+// then get executed on the next uv tick.
+
+const bench = common.createBenchmark(main, {
+ n: [5e4, 5e6],
+});
+
+function main({ n }) {
+ let count = 0;
+
+ // Function tracking on the hidden class in V8 can cause misleading
+ // results in this benchmark if only a single function is used —
+ // alternate between two functions for a fairer benchmark.
+
+ function cb() {
+ process.nextTick(counter);
+ }
+ function cb2() {
+ process.nextTick(counter);
+ }
+ function counter() {
+ count++;
+ if (count === n)
+ bench.end(n);
+ }
+
+ for (var i = 0; i < n; i++) {
+ setTimeout(i % 2 ? cb : cb2, 1);
+ }
+
+ bench.start();
+}