Permalink
Browse files

benchmark: allow no duration in benchmark tests

Imprecision in process.hrtime() in some situations can result in a zero
duration being used as a denominator in benchmark tests. This would
almost certainly never happen in real benchmarks. It is only likely in
very short benchmarks like the type we run in our test suite to just
make sure that the benchmark code is runnable.

So, if the environment variable that we use in tests to indicate "allow
ludicrously short benchmarks" is set, convert a zero duration for
a benchmark to 1 nano-second.

PR-URL: #13110
Fixes: #13102
Fixes: #12433
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
  • Loading branch information...
Trott authored and jasnell committed May 18, 2017
1 parent e29477a commit 72429b39811cc8e981aeda03be254121bef81fb9
Showing with 4 additions and 1 deletion.
  1. +4 −1 benchmark/common.js
View
@@ -197,7 +197,10 @@ Benchmark.prototype.end = function(operations) {
throw new Error('called end() with operation count <= 0');
}
if (elapsed[0] === 0 && elapsed[1] === 0) {
throw new Error('insufficient time precision for short benchmark');
if (!process.env.NODEJS_BENCHMARK_ZERO_ALLOWED)
throw new Error('insufficient clock precision for short benchmark');
// avoid dividing by zero
elapsed[1] = 1;
}
const time = elapsed[0] + elapsed[1] / 1e9;

0 comments on commit 72429b3

Please sign in to comment.