[Minor Feature] The Crucible — headless wall-clock microbenchmark for cross-version A/B #354
Labels
No labels
Alpha Release Requirement
Bugfix
Demo Target
Documentation
Major Feature
Minor Feature
priority:tier1-active
priority:tier2-foundation
priority:tier3-future
priority:tier4-deferred
Refactoring & Cleanup
system:animation
system:documentation
system:grid
system:input
system:performance
system:procgen
system:python-binding
system:rendering
system:ui-hierarchy
Tiny Feature
workflow:blocked
workflow:needs-benchmark
workflow:needs-documentation
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
john/McRogueFace#354
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Motivation
The Gauntlet (#353) answers "how much load until the frame budget breaks?" — it needs a display, varies run-to-run with desktop noise, and its load-ramp does not cleanly isolate the CPU-bound engine paths that the #329/#332/#348 perf sprint actually changed (allocation, cell writes, TCOD sync, turn manager, pathfinding, FOV).
The Crucible (
tests/benchmarks/crucible.py) answers the complementary question: "How many milliseconds of CPU does the engine spend on a FIXED, comically-extreme-but-tractable amount of work?"Design
time.perf_counter(fastest of N reps). No ramp, no display, no rendering.RLIMIT_ASbackstop anyway.frame_timedependency.unsupportedinstead of crashing the run. Emits JSON (MCRF_CRUCIBLE_OUT); diff a prior build's JSON withMCRF_CRUCIBLE_BASELINE.Benches:
grid_alloc,grid_fill,layer_fill,layer_edit_buffer(#335),step_swarm,fov_storm,path_queries,entity_churn.First result — current master vs the 0.2.8 release artifact
Safe replacement for the windowed-Gauntlet A/B that crashed the desktop (#353). Both binaries, headless, same script:
The big wins (
grid_alloc,entity_churn,layer_fill) track the #332 SoA plane rewrite + #329 entity indexing; FOV/path/step are modest (not the sprint's targets). Peak RSS also down (~103 MB vs ~119 MB).Caveat
The JSON
commitfield reflects the script's repo HEAD, not the binary under test (the script can only read its own.git);version(mcrfpy.__version__) is the authoritative binary identifier. Could stamp binary provenance more explicitly later.