The Gauntlet: interactive on-screen stress benchmark with baseline recording #340

Closed
opened 2026-07-03 00:07:28 +00:00 by john · 0 comments
Owner

An interactive, on-screen benchmark app that stress-tests the engine and baselines performance, designed 2026-07-02 (spec: tests/benchmarks/gauntlet/DESIGN.md, committed with the implementation).

Shape

Six themed trials, each ramping load geometrically on one subsystem until the 16.67 ms frame budget breaks (p95 over a 2 s hold window); max sustained load = the trial's score:

  1. ENTITY SWARM — SEEK-behavior entities + grid.step() (entity step/render)
  2. ANIMATION STORM — self-sustaining concurrent animations (animation manager)
  3. GRID TITAN — big grid, rolling ColorLayer writes, orbiting camera (grid render + chunk invalidation)
  4. PATHFINDER RUSH — Dijkstra/A* queries per tick on a maze (pathfinding)
  5. UI AVALANCHE — deep nested Frame/Caption trees + z-order churn (UI hierarchy/draw calls)
  6. SIGHTLINE SIEGE — many entities recomputing FOV with perspective writeback (#316)

Live HUD on every trial: frame-time sparkline with budget hairline, FPS readout, p95, draw calls, load level. Menu + results screens; results diff against a stored baseline (tests/benchmarks/baseline/gauntlet/baseline.json, schema v1 with version/commit/platform) with per-trial deltas and a geometric-mean GAUNTLET SCORE + letter grades.

Modes: interactive (gauntlet_main.py) and unattended baseline run (run_gauntlet.py).

Uses the existing mcrfpy.get_metrics() surface; complements the Phase 5.2 scripted benchmarks (tests/benchmarks/) — this is the watchable, whole-engine composite, those are the per-subsystem microbenches.

Related: #255 (perf tracking), #329 (entity indexing — Entity Swarm will feel this), #117, #124.

An interactive, on-screen benchmark app that stress-tests the engine and baselines performance, designed 2026-07-02 (spec: `tests/benchmarks/gauntlet/DESIGN.md`, committed with the implementation). ## Shape Six themed trials, each ramping load geometrically on one subsystem until the 16.67 ms frame budget breaks (p95 over a 2 s hold window); max sustained load = the trial's score: 1. **ENTITY SWARM** — SEEK-behavior entities + `grid.step()` (entity step/render) 2. **ANIMATION STORM** — self-sustaining concurrent animations (animation manager) 3. **GRID TITAN** — big grid, rolling ColorLayer writes, orbiting camera (grid render + chunk invalidation) 4. **PATHFINDER RUSH** — Dijkstra/A* queries per tick on a maze (pathfinding) 5. **UI AVALANCHE** — deep nested Frame/Caption trees + z-order churn (UI hierarchy/draw calls) 6. **SIGHTLINE SIEGE** — many entities recomputing FOV with perspective writeback (#316) Live HUD on every trial: frame-time sparkline with budget hairline, FPS readout, p95, draw calls, load level. Menu + results screens; results diff against a stored baseline (`tests/benchmarks/baseline/gauntlet/baseline.json`, schema v1 with version/commit/platform) with per-trial deltas and a geometric-mean GAUNTLET SCORE + letter grades. Modes: interactive (`gauntlet_main.py`) and unattended baseline run (`run_gauntlet.py`). Uses the existing `mcrfpy.get_metrics()` surface; complements the Phase 5.2 scripted benchmarks (`tests/benchmarks/`) — this is the *watchable*, whole-engine composite, those are the per-subsystem microbenches. Related: #255 (perf tracking), #329 (entity indexing — Entity Swarm will feel this), #117, #124.
john closed this issue 2026-07-03 03:45:58 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
john/McRogueFace#340
No description provided.