Skip to content

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; pure renderSvg() 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). Set BENCH_HEAVY_POOL>1 for a faster, noisier scan.
  • Native: dot -Tsvg best-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

bandcount
≤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)

idnative msport ms (warm)ratio
210812849832206.48×
24713269179295.48×
209526111554.42×
graphs-b1008646376914.36×
graphs-b1048635352544.08×
graphs-b103121048834.04×
2095_122309880753.95×
linux.x86-root_circo2459433.85×
nshare-root_twopi2479003.65×
2646974633529893.62×
27432017213.59×
graphs-root2147573.54×
nshare-root_circo2478093.28×
linux.x86-root_twopi2488053.25×
2371736392353603.2×
graphs-b2958518523.17×
262037111223.02×

Over-cap / possible hang

None — no input exceeded the per-render cap (no hangs).