perf(render): bound animation and alpha scratch residency

Complete Slice D3 by replacing the unbounded animation dictionary with a concurrent byte/count LRU and by putting the three retail alpha scratch owners behind one typed aggregate budget. Preserve immediate growth and draw order while reclaiming one-frame density spikes after sustained under-use. Close stale bounds-cache issue evidence without inventing a cache.
This commit is contained in:
Erik 2026-07-24 16:34:28 +02:00
parent 3e18fc2730
commit f2644d42c2
18 changed files with 857 additions and 34 deletions

View file

@ -1,6 +1,6 @@
# Modern Runtime Slice D — Typed Asset Handles and Unified Residency
**Status:** active — D1 and D2 complete
**Status:** active — D1 through D3 complete
**Program:** `docs/plans/2026-07-24-modern-runtime-architecture.md`
**Baseline:** Slice C closeout commit `a564c4b7`
**Behavior contract:** no visual-quality or retail-behavior change
@ -227,6 +227,19 @@ residence.
- Bring deferred-alpha retained scratch behind a bounded capacity owner.
- Close stale #243 after proving no current bounds cache exists.
**Complete 2026-07-24.** `RetailAnimationLoader` now uses a concurrent
in-flight load gate feeding a byte-and-count bounded LRU. Cache eviction drops
only the cache reference, so active sequencers retain valid immutable
animations; duplicate DID requests coalesce while unrelated reads remain
parallel. The shared retail alpha path now partitions its 16 MiB startup budget
between the queue, object dispatcher, and particle renderer. Each physical
owner grows immediately when a frame requires it, reports exact retained
backing capacity, and shrinks only after repeated severe under-use. This bounds
one-frame density spikes without changing draw order, particle content, or
visible quality. Issue #240 is closed. Issue #243 is closed as a stale audit
finding: no `_boundsCache`, bounds memo, or cited insertion site exists in the
current source, so no replacement cache was invented.
### D4 — Diagnostics and forced pressure
- Publish aggregate and per-domain budgets/occupancy/fragmentation through the