diff options
author | Anatoli Papirovski <apapirovski@mac.com> | 2018-02-05 14:29:32 -0500 |
---|---|---|
committer | Anatoli Papirovski <apapirovski@mac.com> | 2018-02-09 14:59:07 -0500 |
commit | 0f9efef05deb11dbbdf5adf96460839f5b332207 (patch) | |
tree | a3e7fe462124de4f41f1dd21cb0a3267c864d1fa /benchmark/timers | |
parent | e5f101fe7beba032089ae3b3fb425c0ee15df258 (diff) | |
download | android-node-v8-0f9efef05deb11dbbdf5adf96460839f5b332207.tar.gz android-node-v8-0f9efef05deb11dbbdf5adf96460839f5b332207.tar.bz2 android-node-v8-0f9efef05deb11dbbdf5adf96460839f5b332207.zip |
timers: refactor timer list processing
Instead of using kOnTimeout index to track a special list
processing function, just pass in a function to C++ at
startup that executes all handles and determines which
function to call.
This change improves the performance of unpooled timeouts
by roughly 20%, as well as makes the unref/ref processing
easier to follow.
PR-URL: https://github.com/nodejs/node/pull/18582
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Vladimir de Turckheim <vlad2t@hotmail.com>
Reviewed-By: Evan Lucas <evanlucas@me.com>
Diffstat (limited to 'benchmark/timers')
-rw-r--r-- | benchmark/timers/timers-timeout-unpooled.js | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/benchmark/timers/timers-timeout-unpooled.js b/benchmark/timers/timers-timeout-unpooled.js new file mode 100644 index 0000000000..19f0f6a4af --- /dev/null +++ b/benchmark/timers/timers-timeout-unpooled.js @@ -0,0 +1,36 @@ +'use strict'; +const common = require('../common.js'); + +// The following benchmark sets up n * 1e6 unpooled timeouts, +// then measures their execution on the next uv tick + +const bench = common.createBenchmark(main, { + n: [1e6], +}); + +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() { + count++; + if (count === n) + bench.end(n); + } + function cb2() { + count++; + if (count === n) + bench.end(n); + } + + for (var i = 0; i < n; i++) { + // unref().ref() will cause each of these timers to + // allocate their own handle + setTimeout(i % 2 ? cb : cb2, 1).unref().ref(); + } + + bench.start(); +} |