You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Mythic Masters: open-world frame budget (95th under 16.7 ms, no hitch, a party of six), hill climb to 8/10, rounds 4+ (from #3701) #3705
Score: 3/10 (target 8, on the owner's scale: agent judges halve their number, per the 2026-11-05 reset)
The owner's brief (2026-11-05): Mythic Masters' open world must be performant, especially once friends walk it together (#3663). The world is a heightfield continent with three ground patches rebuilt as you walk, instanced plants, a sky dome and weather, flocks and wild food (src/world/, docs/WORLD-EXPANSION.md).
From #3664, #3686 and #3701 (rounds 1 to 3, PR #3685): the recipe is cd apps/mythic-masters && bun scripts/walk-budget.ts (walkBudget() for a script), and test/budget.test.ts holds it with MM_BUDGET=1. The walk holds fights off (world.peace); round 1's first tables measured a fight arena (see #3686). Patch rebuilds, the far forest and the grass are laid over frames, and a wild one's beast compiles its shaders before it shows. Last table: p95 16.8 ms at both sizes (a 60 Hz frame plus jitter); no frame over 50 ms, the worst 34 ms (main: 15 and 19 frames over 50 ms); draw calls 100-138 desktop, 67-100 phone; 4.31 M triangles; phone heap 117 -> 148 MB; load 1.1 to 1.6 s, 6.4 MB. The test holds no frame over 50 ms.
Next: the party-of-six row (draw calls and heap against the party of one), which caps points 1 and 2. Gizmo (office/gizmo-2fa8) plans to add party and quality options to walkBudget() once #3685 merges; the low quality tier and plant culling are in #3682 and #3689. Then the phone heap creeping up across the walk (117 -> 148 MB). Multiplayer itself is #3663.
Goalpost: 8/10 from the owner
Scored on numbers, not taste, so each round prints the same table from the same recipe (bun run probe mythic-masters --js with the mythicMasters handle; a fixed walk of 90 seconds across a region border at a fixed hour, with a party of one and of six shown):
Frame time. 95th percentile under 16.7 ms on this Mac's headless Chrome through the whole walk, and no single frame over 50 ms (the patch hitch gone: builds split over frames or moved to a worker).
Draw calls and memory. Draw calls per frame and JS heap printed and flat across the walk; a party of six adds at most 12 draw calls and 60 MB.
Load. Time to first walkable frame under 3 s on a cold cache locally, and the bytes it took, printed.
Phones. The same walk at a phone viewport with the quality knob (@rustybuns/util/quality) on low stays under 16.7 ms at the 95th; no feature only works at high.
A budget that holds. The numbers live in one test (test/budget.test.ts) that fails when a round regresses them, so the next climb can't spend them.
The loop
Each round is one PR against main that says "Part of #N" with the before/after table in the body. A fresh judge scores the five points, halves it, and the comment starts Score: x/10 (target 8) and ends Next: ...; then open "rounds N+ (from #N)", close this one with "Moved up to #new". Keep effect out of the per-frame code. At the target, a MANUAL RUN: for the owner's own walk on their phone.
Score: 3.3/10 (target 8). Round 4, PR #3685 (head 15d1748). A fresh judge scored 6.5/10 and that is halved.
The phone heap that seemed to creep (117 -> 148 MB) moved both ways run to run: it was garbage waiting for a collection. The walk now reads the heap through CDP after a forced collection, before and after the walk, and keeps the sampled peak as its own column. Main and this branch both go about 13.7 -> 18 MB, the second region coming in. test/budget.test.ts holds growth to 10 MB.
BEFORE (main, same recipe, quiet machine)
view
p95
max
frames > 50 ms
draw calls
programs
heap after GC
peak
load
desktop
16.7
83
15
100-134
52 -> 52
13.8 -> 18.0 MB
124 MB
1.32 s, 6.4 MB
phone
16.8
100
14
67-100
40 -> 41
13.6 -> 17.7 MB
159 MB
1.12 s, 6.4 MB
NOW
view
p95
max
frames > 50 ms
draw calls
triangles
programs
heap after GC
peak
load
desktop
16.7
33.3
0
99-134
4.31 M
52 -> 52
13.7 -> 18.1 MB
146 MB
1.29 s, 6.4 MB
phone
16.7
33.4
0
66-100
4.31 M
40 -> 41 (off the frame)
13.4 -> 17.4 MB
137 MB
1.12 s, 6.4 MB
Judge, per point: frame time 1.5/2 (party of one meets it; no party-of-six walk), draw calls and memory 1/2 (no party-of-six row), load 2/2, phones 1/2 (no low tier yet), budget test 1/2 (GPU-only, so CI skips it; p95 limit 17 for vsync jitter; no party limits).
Next: the party-of-six walk as a row in the recipe and in budget.test.ts (frame time, and draw calls and heap against the +12 / +60 MB limits). Gizmo plans party and quality options on walkBudget() once #3685 merges; the low tier is in #3682 and #3689.
Activity
Mythic Masters: frame budget round 4, the heap read after a collection (
QuinnsCode commentedon Nov 5, 2026
Score: 3.3/10 (target 8). Round 4, PR #3685 (head 15d1748). A fresh judge scored 6.5/10 and that is halved.
The phone heap that seemed to creep (117 -> 148 MB) moved both ways run to run: it was garbage waiting for a collection. The walk now reads the heap through CDP after a forced collection, before and after the walk, and keeps the sampled peak as its own column. Main and this branch both go about 13.7 -> 18 MB, the second region coming in.
test/budget.test.tsholds growth to 10 MB.BEFORE (main, same recipe, quiet machine)
NOW
Judge, per point: frame time 1.5/2 (party of one meets it; no party-of-six walk), draw calls and memory 1/2 (no party-of-six row), load 2/2, phones 1/2 (no low tier yet), budget test 1/2 (GPU-only, so CI skips it; p95 limit 17 for vsync jitter; no party limits).
Next: the party-of-six walk as a row in the recipe and in
budget.test.ts(frame time, and draw calls and heap against the +12 / +60 MB limits). Gizmo planspartyandqualityoptions onwalkBudget()once #3685 merges; the low tier is in #3682 and #3689.QuinnsCode commentedon Nov 5, 2026
Moved up to #3709
Mythic Masters: the world's frame budget, rounds 1 to 4 (#3664, #3686, …