leoBench replays scripted input through the real application, paced by
compositor frame callbacks like the main loop, and reports per scenario
input latency, frame wall/CPU time, the process/draw split, GPU time of
the canvas pass and the window frame, every profiled stage (dabs,
stamping, compositing, mips, uploads, stabilizer, history) and counters.
The brush and eraser matrix covers brush sizes, zoom levels, every
painting preset, texture/spacing/softness, stabilizer amounts, the
eraser at several sizes and zoom, and eraser mode. Inputs are a
deterministic fast pen scribble plus any recordings made with
LEO_RECORD_INPUT, which leoApp now honours.
Each scenario is repeated (default 5) so every key metric has a sample
per side. Comparisons report medians with spread, the Mann-Whitney U
p-value, a Benjamini-Hochberg q over the run, a faster/slower/noise
verdict and per-group geometric-mean ratios, in report.md and
results.tsv. tools/leo-bench.sh builds Release, runs headless, keeps
history per revision and compares with the previous one; leoBenchSmoke
runs a short case under ctest.