docs(render): close unified residency slice
This commit is contained in:
parent
1853a57c12
commit
66690805c5
8 changed files with 192 additions and 5 deletions
|
|
@ -44,9 +44,10 @@ What does NOT go here:
|
||||||
smooth and physics, collision, and wire state remain correct.
|
smooth and physics, collision, and wire state remain correct.
|
||||||
- **Build hygiene:** `#228` records 17 clean-Release test-project warnings;
|
- **Build hygiene:** `#228` records 17 clean-Release test-project warnings;
|
||||||
production compilation and all tests pass.
|
production compilation and all tests pass.
|
||||||
- **Performance side track:** prepared-content Slices A–C are complete;
|
- **Performance side track:** prepared-content Slices A–C and unified-residency
|
||||||
`#244` is closed and Slice D unified residency/accounting is next. Evidence:
|
Slice D are complete. Slice E cost-budgeted streaming/retirement is next.
|
||||||
[`research/2026-07-24-slice-c-prepared-asset-cutover-report.md`](research/2026-07-24-slice-c-prepared-asset-cutover-report.md).
|
Evidence:
|
||||||
|
[`research/2026-07-24-slice-d-unified-residency-report.md`](research/2026-07-24-slice-d-unified-residency-report.md).
|
||||||
|
|
||||||
The [documentation map](README.md) defines how this tactical ledger relates to
|
The [documentation map](README.md) defines how this tactical ledger relates to
|
||||||
the milestone, roadmap, architecture, divergence register, research, and
|
the milestone, roadmap, architecture, divergence register, research, and
|
||||||
|
|
|
||||||
|
|
@ -512,6 +512,19 @@ the waiting attachment graph transitively, so A→B→C recovers B before C in t
|
||||||
same parent-first pass. Recovery is edge-triggered by object/appearance/pose
|
same parent-first pass. Recovery is edge-triggered by object/appearance/pose
|
||||||
publication; permanent missing DAT or holding parts are never polled per frame.
|
publication; permanent missing DAT or holding parts are never polled per frame.
|
||||||
|
|
||||||
|
Runtime content residence has one typed policy and diagnostic ledger without
|
||||||
|
centralizing physical storage. `ResidencyManager` owns generation-safe logical
|
||||||
|
asset identity, owner tokens, leases, immutable budgets, and aggregate
|
||||||
|
accounting. Specialized render/content owners continue to own their mesh
|
||||||
|
ranges, texture arrays, staging payloads, decoded animations/audio, and
|
||||||
|
retained shared-alpha scratch. The manager never sees a GL name: policy runs as
|
||||||
|
a single writer during update/resource maintenance, while logical eviction and
|
||||||
|
fence-delayed physical release remain render-thread owner operations. Prepared
|
||||||
|
package address space is reported separately from committed CPU bytes, and
|
||||||
|
allocator capacity is not double-counted as live GPU content. Slice D's
|
||||||
|
pressure and connected evidence is
|
||||||
|
`docs/research/2026-07-24-slice-d-unified-residency-report.md`.
|
||||||
|
|
||||||
The remaining aggregation is primarily `_playerController`'s player-specific
|
The remaining aggregation is primarily `_playerController`'s player-specific
|
||||||
movement plus the separate `WorldEntity`/animation/physics component types.
|
movement plus the separate `WorldEntity`/animation/physics component types.
|
||||||
Those should become ONE class:
|
Those should become ONE class:
|
||||||
|
|
|
||||||
|
|
@ -230,6 +230,20 @@ no longer reference them. This lifetime machinery is acdream-owned integration
|
||||||
around the extracted WB mesh pipeline; it does not add a second DAT decoder or a
|
around the extracted WB mesh pipeline; it does not add a second DAT decoder or a
|
||||||
reduced-distance rendering path.
|
reduced-distance rendering path.
|
||||||
|
|
||||||
|
**Unified residency policy seam (2026-07-24).** The extracted WB caches remain
|
||||||
|
the physical owners of mesh, arena, atlas, and texture resources.
|
||||||
|
`AcDream.App.Rendering.Residency.ResidencyManager` adds an acdream-owned typed
|
||||||
|
policy/diagnostic layer over them: generation-safe asset handles, independent
|
||||||
|
owner tokens and leases, immutable startup budgets, aggregate accounting, and
|
||||||
|
bounded trim requests. It never stores or deletes a GL name. Existing owners
|
||||||
|
perform logical eviction and fence-delayed physical release on the render
|
||||||
|
thread. The same ledger observes the prepared-package mapping, prepared/staged
|
||||||
|
CPU mesh data, decoded animation/audio data, and retained shared-alpha scratch
|
||||||
|
without double-counting the package's clean memory-mapped pages as committed
|
||||||
|
heap. Deterministic pressure tests exceed every configured ceiling and prove
|
||||||
|
zero-charge teardown. Connected evidence:
|
||||||
|
`docs/research/2026-07-24-slice-d-unified-residency-report.md`.
|
||||||
|
|
||||||
**Workflow:** Before re-implementing any AC-specific rendering or dat-handling
|
**Workflow:** Before re-implementing any AC-specific rendering or dat-handling
|
||||||
algorithm, **check this inventory first**. If we already extracted it (🟢
|
algorithm, **check this inventory first**. If we already extracted it (🟢
|
||||||
sections), it's in `src/AcDream.App/Rendering/Wb/` — use our copy. If WB has
|
sections), it's in `src/AcDream.App/Rendering/Wb/` — use our copy. If WB has
|
||||||
|
|
|
||||||
|
|
@ -1598,6 +1598,15 @@ port in any phase — no separate listing here.
|
||||||
> process allocation fell 41.8–61.9%, GC pause time fell 48.4–54.1%, and
|
> process allocation fell 41.8–61.9%, GC pause time fell 48.4–54.1%, and
|
||||||
> invalid typed-Setup exceptions fell to zero. [Cutover
|
> invalid typed-Setup exceptions fell to zero. [Cutover
|
||||||
> report](../research/2026-07-24-slice-c-prepared-asset-cutover-report.md).
|
> report](../research/2026-07-24-slice-c-prepared-asset-cutover-report.md).
|
||||||
|
> **Slice D completed 2026-07-24:** typed asset/owner generations, leases,
|
||||||
|
> immutable budget profiles, exact aggregate diagnostics, bounded
|
||||||
|
> animation/audio/alpha-scratch owners, and forced-pressure coverage now sit
|
||||||
|
> above the existing specialized physical caches. Capped/uncapped nine-stop
|
||||||
|
> and dense-Arwic physical routes passed; third-visit cache residence was
|
||||||
|
> non-growing and no checkpoint retained staged or retiring bytes. [Residency
|
||||||
|
> report](../research/2026-07-24-slice-d-unified-residency-report.md). Slice E
|
||||||
|
> cost-budgeted streaming/retirement is active. F/G and J retain their explicit
|
||||||
|
> approval gates.
|
||||||
|
|
||||||
**Spec:** `docs/superpowers/specs/2026-07-05-modern-pipeline-design.md` (the
|
**Spec:** `docs/superpowers/specs/2026-07-05-modern-pipeline-design.md` (the
|
||||||
umbrella design — read it first). **Goal:** smoothness first (no frame over
|
umbrella design — read it first). **Goal:** smoothness first (no frame over
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,14 @@ transactions. This is deliberately using the extracted interaction owners and
|
||||||
canonical shared main-panel host before quest/emote/character-creation bodies
|
canonical shared main-panel host before quest/emote/character-creation bodies
|
||||||
broaden the feature surface.
|
broaden the feature surface.
|
||||||
|
|
||||||
|
The separately authorized modern-runtime performance program has completed
|
||||||
|
Slices A–D: corrected measurement, prepared-package bake/dedup, package-only
|
||||||
|
production streaming, and typed unified residency. Its physical capped,
|
||||||
|
uncapped, and dense connected gates pass without a visual-quality change.
|
||||||
|
Slice E cost-budgets portal publication and retirement next. Slices F/G remain
|
||||||
|
behind their explicit ECS approval gate, and Slice J remains behind its
|
||||||
|
gameplay-owner approval gate.
|
||||||
|
|
||||||
Slice 1's 18-cell favorite-spell overflow bar is user-accepted. Slice 2's
|
Slice 1's 18-cell favorite-spell overflow bar is user-accepted. Slice 2's
|
||||||
status hand selected-object availability and existing
|
status hand selected-object availability and existing
|
||||||
Use/AutoWield/use-on-target command routing passed their connected gate.
|
Use/AutoWield/use-on-target command routing passed their connected gate.
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
**Date:** 2026-07-24
|
**Date:** 2026-07-24
|
||||||
|
|
||||||
**Status:** Slices A–C complete. Slice D is next and not yet started.
|
**Status:** Slices A–D complete. Slice E is active.
|
||||||
|
|
||||||
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
|
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
|
||||||
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
|
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
|
||||||
|
|
@ -687,6 +687,16 @@ Release suite, and the user's visual gate passed. Process allocation fell
|
||||||
**Gate:** same-location third-visit residence plateaus; no stale-generation
|
**Gate:** same-location third-visit residence plateaus; no stale-generation
|
||||||
release; no missing textures; no resource growth after repeated portal loops.
|
release; no missing textures; no resource growth after repeated portal loops.
|
||||||
|
|
||||||
|
**Completed 2026-07-24:** typed asset/owner generations, leases, immutable
|
||||||
|
budget profiles, specialized-owner adapters, exact aggregate accounting,
|
||||||
|
bounded animation/audio/alpha-scratch policies, forced-pressure coverage, and
|
||||||
|
fence-aware retirement diagnostics are live. The capped/uncapped physical
|
||||||
|
nine-stop routes and dense Arwic passed with graceful shutdown. The third Caul
|
||||||
|
checkpoint reduced cache-attributed CPU/GPU residence from the second visit,
|
||||||
|
animations plateaued at 55 entries, scratch stayed below budget, and no
|
||||||
|
checkpoint retained staged or retiring bytes. Evidence:
|
||||||
|
[`../research/2026-07-24-slice-d-unified-residency-report.md`](../research/2026-07-24-slice-d-unified-residency-report.md).
|
||||||
|
|
||||||
**Amendment (2026-07-24 review).** Two corrections to this slice's scope:
|
**Amendment (2026-07-24 review).** Two corrections to this slice's scope:
|
||||||
|
|
||||||
- **Do not rebuild what exists.** Fence-gated, budgeted eviction already
|
- **Do not rebuild what exists.** Fence-gated, budgeted eviction already
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Modern Runtime Slice D — Typed Asset Handles and Unified Residency
|
# Modern Runtime Slice D — Typed Asset Handles and Unified Residency
|
||||||
|
|
||||||
**Status:** active — D1 through D4 complete
|
**Status:** complete — D1 through D5 passed 2026-07-24
|
||||||
**Program:** `docs/plans/2026-07-24-modern-runtime-architecture.md`
|
**Program:** `docs/plans/2026-07-24-modern-runtime-architecture.md`
|
||||||
**Baseline:** Slice C closeout commit `a564c4b7`
|
**Baseline:** Slice C closeout commit `a564c4b7`
|
||||||
**Behavior contract:** no visual-quality or retail-behavior change
|
**Behavior contract:** no visual-quality or retail-behavior change
|
||||||
|
|
@ -271,6 +271,17 @@ LRU pressure, and alpha-scratch convergence. Release build and the complete
|
||||||
- Preserve fixed-camera screenshots and obtain the user's visual gate if the
|
- Preserve fixed-camera screenshots and obtain the user's visual gate if the
|
||||||
connected route changes any visible frame.
|
connected route changes any visible frame.
|
||||||
|
|
||||||
|
**Complete 2026-07-24.** The exact D4 source/binary commit `1853a57c` passed
|
||||||
|
the capped and uncapped physical-local nine-stop routes and pinned dense Arwic,
|
||||||
|
with zero failures and graceful transport shutdown in all three processes.
|
||||||
|
Cache-attributed residence was non-monotonic: the third Caul checkpoint fell
|
||||||
|
from the second visit's 50.3/355.0 MiB committed-CPU/physical-GPU residence to
|
||||||
|
38.5/335.1 MiB. Parsed animations stopped at 55 entries, alpha scratch stayed
|
||||||
|
below 16 MiB, and staged/retiring bytes were zero at every checkpoint. The
|
||||||
|
harness's fixed-camera captures passed without a visible-frame change. Exact
|
||||||
|
methodology and measurements:
|
||||||
|
[`../research/2026-07-24-slice-d-unified-residency-report.md`](../research/2026-07-24-slice-d-unified-residency-report.md).
|
||||||
|
|
||||||
## 9. Acceptance
|
## 9. Acceptance
|
||||||
|
|
||||||
Slice D closes only when:
|
Slice D closes only when:
|
||||||
|
|
@ -285,3 +296,5 @@ Slice D closes only when:
|
||||||
6. The architecture, roadmap, issues, inventory, and durable memory agree with
|
6. The architecture, roadmap, issues, inventory, and durable memory agree with
|
||||||
the implementation.
|
the implementation.
|
||||||
7. Connected screenshots retain Slice C's visual output.
|
7. Connected screenshots retain Slice C's visual output.
|
||||||
|
|
||||||
|
All seven conditions passed 2026-07-24.
|
||||||
|
|
|
||||||
119
docs/research/2026-07-24-slice-d-unified-residency-report.md
Normal file
119
docs/research/2026-07-24-slice-d-unified-residency-report.md
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
# Modern Runtime Slice D — Unified Residency Report
|
||||||
|
|
||||||
|
**Date:** 2026-07-24
|
||||||
|
**Exact source/binary:** `1853a57c12ee16f8d1d2c41cca60851a4bd89de6`
|
||||||
|
**Configuration:** Release, physical local AMD display, 2560 × 1440
|
||||||
|
**Result:** PASS
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
Slice D did not replace the renderer's specialized physical caches or alter
|
||||||
|
visual quality. It placed their limits and exact occupancy behind one typed
|
||||||
|
policy/diagnostic ledger, added generation-safe logical identity and leases,
|
||||||
|
bounded the previously unbounded animation and retained-alpha-scratch owners,
|
||||||
|
and made decoded audio part of the same accounting model.
|
||||||
|
|
||||||
|
The final gate exercised the exact D4 binary through:
|
||||||
|
|
||||||
|
- capped Caul → Sawato → Rynthid → Aerlinthe → Sawato → Holtburg → Caul →
|
||||||
|
Sawato → Caul;
|
||||||
|
- the same nine-stop route uncapped;
|
||||||
|
- pinned dense Arwic uncapped;
|
||||||
|
- fixed-camera screenshots at every canonical checkpoint;
|
||||||
|
- graceful character logoff and transport disconnect.
|
||||||
|
|
||||||
|
Raw JSON, CSV, PNG, trace, and frame-history artifacts remain in the ignored
|
||||||
|
local `logs/` tree:
|
||||||
|
|
||||||
|
- `connected-r6-soak-20260724-164203.*`
|
||||||
|
- `connected-r6-soak-20260724-165143.*`
|
||||||
|
- `connected-dense-town-20260724-170034.*`
|
||||||
|
|
||||||
|
## Connected results
|
||||||
|
|
||||||
|
| Route | Result | Elapsed | Failures | Warnings | Graceful |
|
||||||
|
|---|---:|---:|---:|---:|---:|
|
||||||
|
| Capped nine-stop | PASS | 514.308 s | 0 | 9 | yes |
|
||||||
|
| Uncapped nine-stop | PASS | 508.793 s | 0 | 11 | yes |
|
||||||
|
| Dense Arwic uncapped | PASS | 67.570 s | 0 | 1 | yes |
|
||||||
|
|
||||||
|
Warnings were expected authoritative population changes, known VFX
|
||||||
|
diagnostics, and empty world-edge landblocks. No warning represented a
|
||||||
|
residency, reveal-readiness, rendering, or shutdown failure.
|
||||||
|
|
||||||
|
### Frame cost
|
||||||
|
|
||||||
|
The values below are turn-window p95 CPU/GPU milliseconds. Lower means more
|
||||||
|
frame time remains for other work.
|
||||||
|
|
||||||
|
| Destination | Capped CPU / GPU | Uncapped CPU / GPU |
|
||||||
|
|---|---:|---:|
|
||||||
|
| Caul first | 8.0 / 3.6 | 7.5 / 3.2 |
|
||||||
|
| Sawato first | 4.6 / 1.7 | 2.1 / 1.3 |
|
||||||
|
| Rynthid | 4.6 / 1.8 | 2.4 / 1.5 |
|
||||||
|
| Aerlinthe | 4.6 / 2.2 | 2.1 / 1.4 |
|
||||||
|
| Sawato revisit | 4.6 / 1.8 | 1.6 / 0.9 |
|
||||||
|
| Holtburg | 4.7 / 2.1 | 3.7 / 2.1 |
|
||||||
|
| Caul return | 5.4 / 3.1 | 6.0 / 3.2 |
|
||||||
|
| Sawato plateau | 4.6 / 1.3 | 1.7 / 1.0 |
|
||||||
|
| Caul plateau | 8.4 / 3.4 | 7.0 / 3.3 |
|
||||||
|
|
||||||
|
Pinned dense Arwic, with 15,530 entities and 111 animations, measured
|
||||||
|
5.4 ms CPU p95 and 3.0 ms GPU p95 while turning. These measurements confirm
|
||||||
|
that the connected route is normally CPU-limited rather than GPU-limited.
|
||||||
|
They are evidence for the explicit Slice F/G approval decision, not permission
|
||||||
|
to begin that deferred ECS work.
|
||||||
|
|
||||||
|
## Residency plateau
|
||||||
|
|
||||||
|
The capped run's aggregate ledger is summarized below. CPU excludes the
|
||||||
|
prepared package's clean memory-mapped address space; GPU is cache-attributed
|
||||||
|
physical residence, not every framebuffer/shader/UI allocation tracked by the
|
||||||
|
independent process-wide GPU tracker.
|
||||||
|
|
||||||
|
| Checkpoint | Committed CPU | Physical GPU | Animations | Alpha scratch | Retiring |
|
||||||
|
|---|---:|---:|---:|---:|---:|
|
||||||
|
| Caul first | 36.8 MiB | 185.1 MiB | 26 | 8.10 MiB | 0 |
|
||||||
|
| Sawato first | 39.4 MiB | 247.1 MiB | 33 | 1.87 MiB | 0 |
|
||||||
|
| Rynthid | 23.3 MiB | 277.2 MiB | 39 | 2.62 MiB | 0 |
|
||||||
|
| Aerlinthe | 39.6 MiB | 277.3 MiB | 43 | 3.97 MiB | 0 |
|
||||||
|
| Sawato revisit | 30.3 MiB | 277.3 MiB | 43 | 3.97 MiB | 0 |
|
||||||
|
| Holtburg | 39.4 MiB | 347.0 MiB | 50 | 4.70 MiB | 0 |
|
||||||
|
| Caul return | 50.3 MiB | 355.0 MiB | 51 | 8.54 MiB | 0 |
|
||||||
|
| Sawato plateau | 36.1 MiB | 363.0 MiB | 55 | 2.28 MiB | 0 |
|
||||||
|
| Caul plateau | 38.5 MiB | 335.1 MiB | 55 | 8.53 MiB | 0 |
|
||||||
|
|
||||||
|
The third Caul visit used less cache-attributed CPU and GPU residence than the
|
||||||
|
second. Parsed-animation residence stopped at 55 entries, retained alpha
|
||||||
|
scratch remained below its 16 MiB aggregate budget, staged and retiring bytes
|
||||||
|
were zero at every canonical checkpoint, and all reported owners stayed within
|
||||||
|
their configured limits.
|
||||||
|
|
||||||
|
Process working set and private bytes are intentionally not substituted for
|
||||||
|
these ownership facts. The 27.53 GiB prepared package is memory mapped; Windows
|
||||||
|
counts touched clean file-backed pages in working set even though they are
|
||||||
|
discardable and are not committed cache ownership. The uncapped run ended at
|
||||||
|
1,776.5 MiB working set and 1,543.8 MiB private bytes after warming all nine
|
||||||
|
destinations. Slice E still owns the remaining portal publication/retirement
|
||||||
|
allocation and frame-transaction work.
|
||||||
|
|
||||||
|
## Automated gates
|
||||||
|
|
||||||
|
- Typed transition, cancellation, failure, owner-reuse, and stale-generation
|
||||||
|
conformance tests pass.
|
||||||
|
- Every bounded domain has deterministic forced-pressure coverage.
|
||||||
|
- Physical cache tests prove eviction and fence-delayed release.
|
||||||
|
- All-domain teardown converges to zero reported charge.
|
||||||
|
- Release build passes.
|
||||||
|
- Complete Release suite passes: 8,111 tests, 5 intentional skips.
|
||||||
|
- Connected fixed-camera screenshots passed the existing harness comparisons;
|
||||||
|
Slice D introduced no visible-frame change requiring a new subjective gate.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Slice D's policy and acceptance gates are complete. Runtime cache memory is now
|
||||||
|
finite, attributable, generation-safe, and pressure-tested without reducing
|
||||||
|
view distance, particle distance, texture quality, or retail presentation.
|
||||||
|
Slice E is the next approved step: spread portal publication and retirement
|
||||||
|
over explicit per-frame cost budgets while keeping retired objects immediately
|
||||||
|
inactive and destination reveal correctness exact.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue