Dot performance dashboard
Warm, in-process timing of @knowvah/dot-engine vs the native dot oracle over the dot test corpus. Peer to PARITY.md — PARITY tracks correctness, PERF tracks speed. A report, not a gate. The fidelity target is ≤3× native.
Regenerate: npm run build:js && node test/corpus/bench.mjs && node test/corpus/perf-dashboard.mjs.
Method
- Port: the shipped bundle (
dist/index.js) loaded once in a pool of resident, JIT-primed worker threads; purerenderSvg()is timed (best-of-N), so the measured region excludes all process/transpile/module-load startup — the warm steady state a long-lived consumer sees. Light graphs run at full pool; heavy graphs (native > 2s) are timed serially by default — measured cross-talk inflates a concurrent big render's single sample materially (≈66% on 2620). SetBENCH_HEAVY_POOL>1for a faster, noisier scan. - Native:
dot -Tsvgbest-of-3 (min). - Budget: target ≤3× native. Per-render cap 1351530ms (SIGKILL →
over-cap, i.e. a true synchronous hang). - Caveat: light graphs are timed under up-to-6-way load; for a precise single number re-run
BENCH_POOL=1 BENCH_IDS=<id> node test/corpus/bench.mjs.
Summary
- Rated inputs: 779 · within ≤3× native: 762 (97.8%)
- ok (≤3×): 761 · slow (>3×): 18 · over-cap (hang): 0 · errored: 0 · oracle-error: 9
- ratio (port/native): p50 0.01× · p90 0.23× · max 6.48×
Ratio distribution
| band | count |
|---|---|
| ≤1× (port ≥ native, warm) | 737 |
| 1–2× | 11 |
| 2–3× | 14 |
| 3–4× | 11 |
| 4–6× | 5 |
| 6–10× | 1 |
| >10× | 0 |
| over-cap (≥1351530ms, possible hang) | 0 |
Over budget — slower than 3× native (worst first)
| id | native ms | port ms (warm) | ratio |
|---|---|---|---|
2108 | 12849 | 83220 | 6.48× |
2471 | 3269 | 17929 | 5.48× |
2095 | 261 | 1155 | 4.42× |
graphs-b100 | 8646 | 37691 | 4.36× |
graphs-b104 | 8635 | 35254 | 4.08× |
graphs-b103 | 1210 | 4883 | 4.04× |
2095_1 | 22309 | 88075 | 3.95× |
linux.x86-root_circo | 245 | 943 | 3.85× |
nshare-root_twopi | 247 | 900 | 3.65× |
2646 | 97463 | 352989 | 3.62× |
2743 | 201 | 721 | 3.59× |
graphs-root | 214 | 757 | 3.54× |
nshare-root_circo | 247 | 809 | 3.28× |
linux.x86-root_twopi | 248 | 805 | 3.25× |
2371 | 73639 | 235360 | 3.2× |
graphs-b29 | 585 | 1852 | 3.17× |
2620 | 371 | 1122 | 3.02× |
Over-cap / possible hang
None — no input exceeded the per-render cap (no hangs).