Frame convergence as the performance gate, not wall clock.
Harness::run() returns the number of frames needed before no repaint is
requested and animations settle, and errors past with_max_steps
(default 4). assert_eq!(harness.run(), 2) catches an accidental
request_repaint loop or a layout that never settles — the usual reason
an egui app pins a CPU core. It is deterministic and free.
Deliberately not a wall-clock frame-time assertion. This project has
already learned that timing assertions on shared runners are flaky; the
whole measure.sh apparatus exists because of it. Track Criterion over
run_ui and tessellate separately, alert on ratio rather than absolute,
and keep any absolute budget on a dedicated machine.
Source: TODO.md line 2986 — Interface › Testing the interface
Frame convergence as the performance gate, not wall clock.
Harness::run()returns the number of frames needed before no repaint isrequested and animations settle, and errors past
with_max_steps(default 4).
assert_eq!(harness.run(), 2)catches an accidentalrequest_repaintloop or a layout that never settles — the usual reasonan egui app pins a CPU core. It is deterministic and free.
Deliberately not a wall-clock frame-time assertion. This project has
already learned that timing assertions on shared runners are flaky; the
whole
measure.shapparatus exists because of it. Track Criterion overrun_uiandtessellateseparately, alert on ratio rather than absolute,and keep any absolute budget on a dedicated machine.
Source:
TODO.mdline 2986 — Interface › Testing the interface