diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2023-08-26 10:29:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-26 11:29:45 +0200 |
commit | 5dbf5c82936a1975067101e25580790c8b7c50b7 (patch) | |
tree | d0d869ef0bd801d2bbefe3fee577d2068ff1a9a2 /cli/tsc/dts/lib.deno.ns.d.ts | |
parent | 1cb547d885906d557a63b2670c4b1b95a8626826 (diff) |
fix(bench): explicit timers don't force high precision measurements (#20272)
Disables `BenchContext::start()` and `BenchContext::end()` for low
precision benchmarks (less than 0.01s per iteration). Prints a warning
when they are used in such benchmarks, suggesting to remove them.
```ts
Deno.bench("noop", { group: "noops" }, () => {});
Deno.bench("noop with start/end", { group: "noops" }, (b) => {
b.start();
b.end();
});
```
Before:
```
cpu: 12th Gen Intel(R) Core(TM) i9-12900K
runtime: deno 1.36.2 (x86_64-unknown-linux-gnu)
file:///home/nayeem/projects/deno/temp3.ts
benchmark time (avg) iter/s (min … max) p75 p99 p995
----------------------------------------------------------------------------- -----------------------------
noop 2.63 ns/iter 380,674,131.4 (2.45 ns … 27.78 ns) 2.55 ns 4.03 ns 5.33 ns
noop with start and end 302.47 ns/iter 3,306,146.0 (200 ns … 151.2 µs) 300 ns 400 ns 400 ns
summary
noop
115.14x faster than noop with start and end
```
After:
```
cpu: 12th Gen Intel(R) Core(TM) i9-12900K
runtime: deno 1.36.1 (x86_64-unknown-linux-gnu)
file:///home/nayeem/projects/deno/temp3.ts
benchmark time (avg) iter/s (min … max) p75 p99 p995
----------------------------------------------------------------------------- -----------------------------
noop 3.01 ns/iter 332,565,561.7 (2.73 ns … 29.54 ns) 2.93 ns 5.29 ns 7.45 ns
noop with start and end 7.73 ns/iter 129,291,091.5 (6.61 ns … 46.76 ns) 7.87 ns 13.12 ns 15.32 ns
Warning start() and end() calls in "noop with start and end" are ignored because it averages less than 0.01s per iteration. Remove them for better results.
summary
noop
2.57x faster than noop with start and end
```
Diffstat (limited to 'cli/tsc/dts/lib.deno.ns.d.ts')
-rw-r--r-- | cli/tsc/dts/lib.deno.ns.d.ts | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/cli/tsc/dts/lib.deno.ns.d.ts b/cli/tsc/dts/lib.deno.ns.d.ts index 436387eba..610ed1061 100644 --- a/cli/tsc/dts/lib.deno.ns.d.ts +++ b/cli/tsc/dts/lib.deno.ns.d.ts @@ -1011,6 +1011,10 @@ declare namespace Deno { /** Restarts the timer for the bench measurement. This should be called * after doing setup work which should not be measured. * + * Warning: This method should not be used for benchmarks averaging less + * than 0.01s per iteration. In such cases it will be disabled but the call + * will still have noticeable overhead, resulting in a warning. + * * ```ts * Deno.bench("foo", async (t) => { * const data = await Deno.readFile("data.txt"); @@ -1024,6 +1028,10 @@ declare namespace Deno { /** End the timer early for the bench measurement. This should be called * before doing teardown work which should not be measured. * + * Warning: This method should not be used for benchmarks averaging less + * than 0.01s per iteration. In such cases it will be disabled but the call + * will still have noticeable overhead, resulting in a warning. + * * ```ts * Deno.bench("foo", async (t) => { * const file = await Deno.open("data.txt"); |