Skip to content

Commit 46e801b

Browse files
committed
perf: fix broken benchmarks
Signed-off-by: Okiki <hey@okikio.dev>
1 parent 749ec31 commit 46e801b

File tree

11 files changed

+741
-663
lines changed

11 files changed

+741
-663
lines changed

benchmark/fixtures/postMessageMessageChannel.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { bench, group, run } from "@poolifier/tatami-ng";
1+
import { bench, group, run, type BenchmarkReport } from "@poolifier/tatami-ng";
22
import { format as bytes } from "@std/fmt/bytes";
33

44
import { getTransferable, getTransferables, hasTransferables } from "../../src/mod.ts";
@@ -76,20 +76,24 @@ export default async function (e: MouseEvent): Promise<string> {
7676
});
7777
}
7878

79-
const { benchmarks } = await run({
79+
const results = await run({
8080
units: true, // print units cheatsheet (default: false)
8181
silent: false, // enable/disable stdout output (default: false)
8282
json: false, // enable/disable json output (default: false)
8383
colors: true, // enable/disable colors (default: true)
8484
samples: 128, // minimum number of benchmark samples (default: 128)
8585
time: 1_000_000_000, // minimum benchmark time in nanoseconds (default: 1_000_000_000)
86-
avg: true, // enable/disable time (avg) column (default: true)
87-
iter: true, // enable/disable iter/s column (default: true)
88-
rmoe: true, // enable/disable error margin column (default: true)
89-
min_max: true, // enable/disable (min...max) column (default: true)
90-
percentiles: true, // enable/disable percentile columns (default: true)
91-
});
86+
throughput: true,
87+
latencyPercentiles: true,
88+
latencyMinMax: true
89+
// avg: true, // enable/disable time (avg) column (default: true)
90+
// iter: true, // enable/disable iter/s column (default: true)
91+
// rmoe: true, // enable/disable error margin column (default: true)
92+
// min_max: true, // enable/disable (min...max) column (default: true)
93+
// percentiles: true, // enable/disable percentile columns (default: true)
94+
}) as BenchmarkReport;
9295

96+
const benchmarks = results?.benchmarks as unknown as BenchmarkReport["benchmarks"][];
9397
const result = PrintMarkdownTable(variants, benchmarks);
9498
return result;
9599
}

benchmark/fixtures/postMessageWorker.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22

3-
import { bench, group, run } from "@poolifier/tatami-ng";
3+
import { bench, group, run, type BenchmarkReport } from "@poolifier/tatami-ng";
44
import { format as bytes } from "@std/fmt/bytes";
55

66
import { getTransferable, getTransferables, hasTransferables } from "../../src/mod.ts";
@@ -78,20 +78,24 @@ export default async function (e: MouseEvent): Promise<string> {
7878
});
7979
}
8080

81-
const { benchmarks } = await run({
81+
const results = await run({
8282
units: true, // print units cheatsheet (default: false)
8383
silent: false, // enable/disable stdout output (default: false)
8484
json: false, // enable/disable json output (default: false)
8585
colors: true, // enable/disable colors (default: true)
8686
samples: 128, // minimum number of benchmark samples (default: 128)
8787
time: 1_000_000_000, // minimum benchmark time in nanoseconds (default: 1_000_000_000)
88-
avg: true, // enable/disable time (avg) column (default: true)
89-
iter: true, // enable/disable iter/s column (default: true)
90-
rmoe: true, // enable/disable error margin column (default: true)
91-
min_max: true, // enable/disable (min...max) column (default: true)
92-
percentiles: true, // enable/disable percentile columns (default: true)
93-
});
88+
throughput: true,
89+
latencyPercentiles: true,
90+
latencyMinMax: true
91+
// avg: true, // enable/disable time (avg) column (default: true)
92+
// iter: true, // enable/disable iter/s column (default: true)
93+
// rmoe: true, // enable/disable error margin column (default: true)
94+
// min_max: true, // enable/disable (min...max) column (default: true)
95+
// percentiles: true, // enable/disable percentile columns (default: true)
96+
}) as BenchmarkReport;
9497

98+
const benchmarks = results?.benchmarks as unknown as BenchmarkReport["benchmarks"][];
9599
const result = PrintMarkdownTable(variants, benchmarks);
96100
return result;
97101
}

benchmark/fixtures/structuredClone.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { bench, group, run } from "@poolifier/tatami-ng";
1+
import { bench, group, run, type BenchmarkReport } from "@poolifier/tatami-ng";
22
import { format as bytes } from "@std/fmt/bytes";
33

44
import { getTransferable, getTransferables, hasTransferables } from "../../src/mod.ts";
@@ -62,20 +62,24 @@ export default async function (e: MouseEvent): Promise<string> {
6262
});
6363
}
6464

65-
const { benchmarks } = await run({
65+
const results = await run({
6666
units: true, // print units cheatsheet (default: false)
6767
silent: false, // enable/disable stdout output (default: false)
6868
json: false, // enable/disable json output (default: false)
6969
colors: true, // enable/disable colors (default: true)
7070
samples: 128, // minimum number of benchmark samples (default: 128)
7171
time: 1_000_000_000, // minimum benchmark time in nanoseconds (default: 1_000_000_000)
72-
avg: true, // enable/disable time (avg) column (default: true)
73-
iter: true, // enable/disable iter/s column (default: true)
74-
rmoe: true, // enable/disable error margin column (default: true)
75-
min_max: true, // enable/disable (min...max) column (default: true)
76-
percentiles: true, // enable/disable percentile columns (default: true)
77-
});
72+
throughput: true,
73+
latencyPercentiles: true,
74+
latencyMinMax: true
75+
// avg: true, // enable/disable time (avg) column (default: true)
76+
// iter: true, // enable/disable iter/s column (default: true)
77+
// rmoe: true, // enable/disable error margin column (default: true)
78+
// min_max: true, // enable/disable (min...max) column (default: true)
79+
// percentiles: true, // enable/disable percentile columns (default: true)
80+
}) as BenchmarkReport;
7881

82+
const benchmarks = results?.benchmarks as unknown as BenchmarkReport["benchmarks"][];
7983
const result = PrintMarkdownTable(variants, benchmarks);
8084
return result;
8185
}

benchmark/messagechannel.bench.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { bench, group, run } from "@poolifier/tatami-ng";
1+
import { bench, BenchmarkReport, group, run } from "@poolifier/tatami-ng";
22
import { format as bytes } from "@std/fmt/bytes";
33

44
import { getTransferable, getTransferables, hasTransferables } from "../src/mod.ts";
@@ -74,19 +74,23 @@ for (let index = 0; index <= Math.log2(MAX_SIZE); index ++) {
7474
});
7575
}
7676

77-
const [{ benchmarks }] = await run({
77+
const results = await run({
7878
units: true, // print units cheatsheet (default: false)
7979
silent: false, // enable/disable stdout output (default: false)
8080
json: false, // enable/disable json output (default: false)
8181
colors: true, // enable/disable colors (default: true)
8282
samples: 128, // minimum number of benchmark samples (default: 128)
8383
time: 1_000_000_000, // minimum benchmark time in nanoseconds (default: 1_000_000_000)
84+
throughput: true,
85+
latencyPercentiles: true,
86+
latencyMinMax: true
8487
// avg: true, // enable/disable time (avg) column (default: true)
8588
// iter: true, // enable/disable iter/s column (default: true)
8689
// rmoe: true, // enable/disable error margin column (default: true)
8790
// min_max: true, // enable/disable (min...max) column (default: true)
8891
// percentiles: true, // enable/disable percentile columns (default: true)
89-
});
92+
}) as BenchmarkReport;
9093

94+
const benchmarks = results?.benchmarks as unknown as BenchmarkReport["benchmarks"][];
9195
const result = PrintMarkdownTable(variants, benchmarks);
9296
WriteFile(result, `MessageChannel`, env_);

benchmark/structuredclone.bench.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { bench, group, run } from "@poolifier/tatami-ng";
1+
import { bench, BenchmarkReport, group, run } from "@poolifier/tatami-ng";
22
import { format as bytes } from "@std/fmt/bytes";
33

44
import { getTransferable, getTransferables, hasTransferables } from "../src/mod.ts";
@@ -60,19 +60,23 @@ for (let index = 0; index <= Math.log2(MAX_SIZE); index++) {
6060
});
6161
}
6262

63-
const [{ benchmarks }] = await run({
63+
const results = await run({
6464
units: true, // print units cheatsheet (default: false)
6565
silent: false, // enable/disable stdout output (default: false)
6666
json: false, // enable/disable json output (default: false)
6767
colors: true, // enable/disable colors (default: true)
6868
samples: 128, // minimum number of benchmark samples (default: 128)
6969
time: 1_000_000_000, // minimum benchmark time in nanoseconds (default: 1_000_000_000)
70+
throughput: true,
71+
latencyPercentiles: true,
72+
latencyMinMax: true
7073
// avg: true, // enable/disable time (avg) column (default: true)
7174
// iter: true, // enable/disable iter/s column (default: true)
7275
// rmoe: true, // enable/disable error margin column (default: true)
7376
// min_max: true, // enable/disable (min...max) column (default: true)
7477
// percentiles: true, // enable/disable percentile columns (default: true)
75-
});
78+
}) as BenchmarkReport;
7679

80+
const benchmarks = results?.benchmarks as unknown as BenchmarkReport["benchmarks"][];
7781
const result = PrintMarkdownTable(variants, benchmarks);
7882
WriteFile(result, `structuredClone`, env_);

benchmark/utils/_utils.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Report } from "@poolifier/tatami-ng";
1+
import type { BenchmarkReport, Report } from "@poolifier/tatami-ng";
22
import { MAX_SIZE, BITS_IN_BYTE } from "./_constants.ts";
33

44
import { markdownTable } from "markdown-table";
@@ -281,13 +281,13 @@ export function GenerateStub(size = MAX_SIZE, enable: { streams?: boolean, chann
281281
}
282282

283283
export const NumberFormatter = new Intl.NumberFormat();
284-
export function PrintMarkdownTable(variants: string[], benchmarks: Report['benchmarks']) {
284+
export function PrintMarkdownTable(variants: string[], benchmarks: BenchmarkReport['benchmarks'][]) {
285285
const head = ["", ...variants];
286-
const groupedBenchmarks = Object.entries<Report['benchmarks']>(
286+
const groupedBenchmarks = Object.entries<BenchmarkReport['benchmarks'][]>(
287287
// @ts-ignore `Object.groupBy(...)`
288288
Object.groupBy(
289289
benchmarks,
290-
(bench: Report['benchmarks'][number]) => bench.group
290+
(bench: BenchmarkReport['benchmarks']) => bench.group
291291
)
292292
);
293293

@@ -296,8 +296,8 @@ export function PrintMarkdownTable(variants: string[], benchmarks: Report['bench
296296
if (!bench) return 'null';
297297
if (bench.error) return 'null';
298298

299-
const opsPerSec = bench.stats?.iter ?? 0;
300-
const margin = bench.stats?.rmoe ?? 0;
299+
const opsPerSec = bench.stats?.samples ?? 0;
300+
const margin = bench.stats?.throughput?.rmoe ?? 0;
301301

302302
const opsPerSecStr = NumberFormatter.format(Math.round(opsPerSec * 100) / 100);
303303
const marginStr = NumberFormatter.format(Math.round(margin * 100) / 100);

benchmark/worker.bench.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { bench, group, run } from "@poolifier/tatami-ng";
1+
import { bench, BenchmarkReport, group, run } from "@poolifier/tatami-ng";
22
import { format as bytes } from "@std/fmt/bytes";
33

44
import { getTransferable, getTransferables, hasTransferables } from "../src/mod.ts";
@@ -75,19 +75,23 @@ for (let index = 0; index <= Math.log2(MAX_SIZE) / 5; index += 3) {
7575
});
7676
}
7777

78-
const [{ benchmarks }] = await run({
78+
const results = await run({
7979
units: true, // print units cheatsheet (default: false)
8080
silent: false, // enable/disable stdout output (default: false)
8181
json: false, // enable/disable json output (default: false)
8282
colors: true, // enable/disable colors (default: true)
8383
samples: 128, // minimum number of benchmark samples (default: 128)
8484
time: 1_000_000_000, // minimum benchmark time in nanoseconds (default: 1_000_000_000)
85+
throughput: true,
86+
latencyPercentiles: true,
87+
latencyMinMax: true
8588
// avg: true, // enable/disable time (avg) column (default: true)
8689
// iter: true, // enable/disable iter/s column (default: true)
8790
// rmoe: true, // enable/disable error margin column (default: true)
8891
// min_max: true, // enable/disable (min...max) column (default: true)
8992
// percentiles: true, // enable/disable percentile columns (default: true)
90-
});
93+
}) as BenchmarkReport;
9194

95+
const benchmarks = results?.benchmarks as unknown as BenchmarkReport["benchmarks"][];
9296
const result = PrintMarkdownTable(variants, benchmarks);
9397
WriteFile(result, `Worker`, env_);

mise.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[tools]
2+
bun = "latest"
3+
deno = "latest"
4+
node = "latest"
5+
pnpm = "latest"

package.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
"test:run": "vitest run tests",
4444
"build": "tsup",
4545
"playwright:init": "playwright install --with-deps",
46-
"browser:fixture": "vite build ./benchmark/fixtures --target \"esnext\" && vite preview ./benchmark/fixtures --port 3000",
47-
"browser:fixture:dev": "vite dev ./benchmark/fixtures --port 3000",
46+
"browser:fixture": "vite --config ./vite.config.ts build ./benchmark/fixtures && vite --config ./vite.config.ts preview ./benchmark/fixtures --port 3000",
47+
"browser:fixture:dev": "vite --config ./vite.config.ts dev ./benchmark/fixtures --port 3000",
4848
"benchmark:browser": "playwright test ./benchmark/browsers.spec.ts",
4949
"benchmark:browser:chrome": "rm -rf ./benchmark/results/chromium.md && playwright test --browser=chromium ./benchmark/browsers.spec.ts",
5050
"benchmark:browser:firefox": "rm -rf ./benchmark/results/firefox.md && playwright test --browser=firefox ./benchmark/browsers.spec.ts",
@@ -146,27 +146,27 @@
146146
"@commitlint/cli": "^19.8.1",
147147
"@commitlint/config-conventional": "^19.8.1",
148148
"@deno/shim-deno": "^0.19.2",
149-
"@playwright/test": "^1.52.0",
149+
"@playwright/test": "^1.54.2",
150150
"@poolifier/tatami-ng": "npm:@jsr/poolifier__tatami-ng@^0.8.16",
151151
"@semantic-release/changelog": "^6.0.3",
152152
"@semantic-release/git": "^10.0.1",
153153
"@std/fmt": "npm:@jsr/std__fmt@^1.0.8",
154-
"@swc/core": "^1.11.29",
155-
"@types/node": "^22.15.29",
156-
"@types/web": "^0.0.237",
157-
"bun": "^1.2.15",
154+
"@swc/core": "^1.13.3",
155+
"@types/node": "^24.2.1",
156+
"@types/web": "^0.0.261",
157+
"bun": "^1.2.20",
158158
"esbuild-plugin-umd-wrapper": "^3.0.0",
159159
"husky": "^9.1.7",
160160
"markdown-table": "^3.0.4",
161161
"micromark": "^4.0.2",
162162
"micromark-extension-gfm": "^3.0.0",
163-
"pnpm": "^10.11.0",
164-
"pretty-bytes": "^7.0.0",
165-
"semantic-release": "^24.2.5",
163+
"pnpm": "^10.14.0",
164+
"pretty-bytes": "^7.0.1",
165+
"semantic-release": "^24.2.7",
166166
"tsup": "^8.5.0",
167-
"tsx": "^4.19.4",
168-
"typescript": "^5.8.3",
169-
"vite": "^6.3.5",
170-
"vitest": "^3.1.4"
167+
"tsx": "^4.20.4",
168+
"typescript": "^5.9.2",
169+
"vite": "^7.1.2",
170+
"vitest": "^3.2.4"
171171
}
172172
}

0 commit comments

Comments
 (0)