benchmark: split timers benchmark and refactor

The depth benchmark for timers sets a timer that sets a timer that sets
a timer that... 500K of them.

Since each timer has to wait for the next tick of the event loop this
benchmark takes a very long time to run compared to the breadth
test that is already in the file. This may be more of an event loop
benchmark than a timer benchmark.

Reduce the number of iterations for the depth test as it's really just
running the iterations in sequence, not in parallel. And even on an
infinitely fast machine, it would take over 8 minutes to run because
each tick of the event loop would have to wait 1ms before firing the
timer.

Split the depth and breadth benchmarks so that their `N` values can be
set independently.

Do some minor refactoring to the benchmarks (but no ES6 additions so
that the benchmarks can still be run with old versions of Node.js).

Refs: https://github.com/nodejs/node/issues/9493
PR-URL: https://github.com/nodejs/node/pull/9497
Reviewed-By: Andreas Madsen <amwebdk@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
Rich Trott 2016-11-06 16:47:41 -08:00
parent 1ce05ad540
commit ef6a5cf40a
3 changed files with 40 additions and 41 deletions

View File

@ -0,0 +1,20 @@
'use strict';
var common = require('../common.js');
var bench = common.createBenchmark(main, {
thousands: [500],
});
function main(conf) {
var N = +conf.thousands * 1e3;
var n = 0;
bench.start();
function cb() {
n++;
if (n === N)
bench.end(N / 1e3);
}
for (var i = 0; i < N; i++) {
setTimeout(cb, 1);
}
}

View File

@ -0,0 +1,20 @@
'use strict';
var common = require('../common.js');
var bench = common.createBenchmark(main, {
thousands: [1],
});
function main(conf) {
var N = +conf.thousands * 1e3;
var n = 0;
bench.start();
setTimeout(cb, 1);
function cb() {
n++;
if (n === N)
bench.end(N / 1e3);
else
setTimeout(cb, 1);
}
}

View File

@ -1,41 +0,0 @@
'use strict';
var common = require('../common.js');
var bench = common.createBenchmark(main, {
thousands: [500],
type: ['depth', 'breadth']
});
function main(conf) {
var n = +conf.thousands * 1e3;
if (conf.type === 'breadth')
breadth(n);
else
depth(n);
}
function depth(N) {
var n = 0;
bench.start();
setTimeout(cb);
function cb() {
n++;
if (n === N)
bench.end(N / 1e3);
else
setTimeout(cb);
}
}
function breadth(N) {
var n = 0;
bench.start();
function cb() {
n++;
if (n === N)
bench.end(N / 1e3);
}
for (var i = 0; i < N; i++) {
setTimeout(cb);
}
}