diff --git a/benchmark/timers/immediate.js b/benchmark/timers/immediate.js new file mode 100644 index 00000000000000..7d85dc0325a8be --- /dev/null +++ b/benchmark/timers/immediate.js @@ -0,0 +1,113 @@ +'use strict'; +var common = require('../common.js'); + +var bench = common.createBenchmark(main, { + thousands: [2000], + type: ['depth', 'depth1', 'breadth', 'breadth1', 'breadth4', 'clear'] +}); + +function main(conf) { + var N = +conf.thousands * 1e3; + switch (conf.type) { + case 'depth': + depth(N); + break; + case 'depth1': + depth1(N); + break; + case 'breadth': + breadth(N); + break; + case 'breadth1': + breadth1(N); + break; + case 'breadth4': + breadth4(N); + break; + case 'clear': + clear(N); + break; + } +} + +// setImmediate tail recursion, 0 arguments +function depth(N) { + var n = 0; + bench.start(); + setImmediate(cb); + function cb() { + n++; + if (n === N) + bench.end(N / 1e3); + else + setImmediate(cb); + } +} + +// setImmediate tail recursion, 1 argument +function depth1(N) { + var n = 0; + bench.start(); + setImmediate(cb, 1); + function cb(a1) { + n++; + if (n === N) + bench.end(N / 1e3); + else + setImmediate(cb, 1); + } +} + +// concurrent setImmediate, 0 arguments +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++) { + setImmediate(cb); + } +} + +// concurrent setImmediate, 1 argument +function breadth1(N) { + var n = 0; + bench.start(); + function cb(a1) { + n++; + if (n === N) + bench.end(N / 1e3); + } + for (var i = 0; i < N; i++) { + setImmediate(cb, 1); + } +} + +// concurrent setImmediate, 4 arguments +function breadth4(N) { + var n = 0; + bench.start(); + function cb(a1, a2, a3, a4) { + n++; + if (n === N) + bench.end(N / 1e3); + } + for (var i = 0; i < N; i++) { + setImmediate(cb, 1, 2, 3, 4); + } +} + +function clear(N) { + bench.start(); + function cb(a1) { + if (a1 === 2) + bench.end(N / 1e3); + } + for (var i = 0; i < N; i++) { + clearImmediate(setImmediate(cb, 1)); + } + setImmediate(cb, 2); +}