Problem
The wasm-vs-competitor comparison (zstd-wasm/bench/bench.mjs, added in #348/PR #364) runs only locally as a pre-publish gate. The gh-pages perf dashboard tracks the Rust↔C-FFI matrix but not the wasm payloads, so there is no continuous tracking of wasm simd128/scalar speed + ratio vs the most popular npm competitor (@bokuweb/zstd-wasm). A wasm perf/ratio regression would only surface if someone re-runs the bench by hand.
Goal
A push-to-main bench shard that runs node zstd-wasm/bench/bench.mjs, emits the existing REPORT / REPORT_DICT lines, and feeds the dashboard aggregation — so wasm perf vs bokuweb is tracked over time like the native matrix. (PR-time stays clean: the whole bench pipeline is already push-only.)
Plan
- CI shard (
.github/workflows/ci.yml, bench pipeline, push-only): add a wasm "target"/shard whose run step builds the npm payloads (cd zstd-wasm/npm && npm ci && npm run build) then runs node ../bench/bench.mjs, capturing its stdout REPORT* lines as an artifact — instead of executing the prebuilt Rust bench binary the other shards use.
- Aggregation: extend
.github/scripts/aggregate-bench-levels.py + merge-benchmarks.py to ingest the wasm REPORT scenario=... engine={ours-simd128|ours-scalar|bokuweb} ... and REPORT_DICT ... lines into a dedicated wasm section.
- Dashboard: render the wasm comparison (simd128/scalar vs bokuweb: ratio + compress/decompress speed) in
.github/bench-dashboard/index.html.
Acceptance criteria
Estimate
1d (CI shard wiring + REPORT-parser extension for the wasm engine triplet + a dashboard section).
Follow-up from #348 (PR #364). The pre-publish measurement need is already covered locally by node zstd-wasm/bench/bench.mjs; this issue is purely about continuous tracking.
Problem
The wasm-vs-competitor comparison (
zstd-wasm/bench/bench.mjs, added in #348/PR #364) runs only locally as a pre-publish gate. The gh-pages perf dashboard tracks the Rust↔C-FFI matrix but not the wasm payloads, so there is no continuous tracking of wasmsimd128/scalar speed + ratio vs the most popular npm competitor (@bokuweb/zstd-wasm). A wasm perf/ratio regression would only surface if someone re-runs the bench by hand.Goal
A push-to-main bench shard that runs
node zstd-wasm/bench/bench.mjs, emits the existingREPORT/REPORT_DICTlines, and feeds the dashboard aggregation — so wasm perf vs bokuweb is tracked over time like the native matrix. (PR-time stays clean: the whole bench pipeline is already push-only.)Plan
.github/workflows/ci.yml, bench pipeline, push-only): add a wasm "target"/shard whose run step builds the npm payloads (cd zstd-wasm/npm && npm ci && npm run build) then runsnode ../bench/bench.mjs, capturing its stdoutREPORT*lines as an artifact — instead of executing the prebuilt Rust bench binary the other shards use..github/scripts/aggregate-bench-levels.py+merge-benchmarks.pyto ingest the wasmREPORT scenario=... engine={ours-simd128|ours-scalar|bokuweb} ...andREPORT_DICT ...lines into a dedicated wasm section..github/bench-dashboard/index.html.Acceptance criteria
REPORT*lines captured + aggregated.dev/benchdashboard shows wasm simd128/scalar vs bokuweb ratio + speed over time.Estimate
1d (CI shard wiring + REPORT-parser extension for the wasm engine triplet + a dashboard section).
Follow-up from #348 (PR #364). The pre-publish measurement need is already covered locally by
node zstd-wasm/bench/bench.mjs; this issue is purely about continuous tracking.