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: https://github.com/nodejs/node/pull/13110 Fixes: https://github.com/nodejs/node/issues/13102 Fixes: https://github.com/nodejs/node/issues/12433 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
parent
171a43a986
commit
c3067b5640
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user