mirror of
https://github.com/vladtrc/iw4L
synced 2026-10-26 10:19:50 -04:00
c72783395d
A 47.78 ms frame reported a 36.35 ms `Load` inside an `Update` its own row implied was 11.87 ms, and 364 frames summed their root spans to more than their own wall. Three mistakes stacked: a span was credited to whichever frame was open when it *closed*, its parent was whichever span had opened most recently anywhere in the process, and the remainder was a sum of overlapping intervals clamped at zero. Now a span is charged by intersection with the frame's wall, and what it ran before the frame opened is `carried_in_ns` rather than nothing. Nesting comes from a thread-local stack, so the render thread no longer adopts the main thread's spans, and a close out of order is counted. `unclassified` is wall minus the union of the root intervals, which cannot go negative and counts two threads inside one nanosecond once. The report prints how many frames still hold a span longer than its parent. `present_hud_surfaces` and `present_hud_stage_max` measured wall *between* systems, which `.chain()` leaves the executor free to fill. They are renamed `*_schedule_interval`, tabled apart, and given a number that is the HUD's: `hud_tess_body`, taken inside the tess flush bodies, with `hud_tess_jobs` beside it. The screenshot flag now stays up through the readback, the encode and the write instead of only while the request queues. An image decode gains an identity — the resolved IWD candidate list plus the recipe bits that change the payload — so two plans that would prepare the same bytes share one decode through a registry of weak handles, and a claim the merge drops is reported as the same variant twice or as another game's different image under the same name. Merge precedence and the final content are untouched. The load job row splits budget wait from decode, renames `join_wait_ms` to what it measures, and carries `produced_bytes`; the budget wait is bounded so it cannot outlive a join order that stops guaranteeing progress. The manifest walks the nested artifact cache instead of reading zero files from its top directory, and prints the viewport the passes were sized by beside the surface. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>