Repository navigation
Conversation
|
Does a title show |
|
Windows test (MinGW GCC 15.2, Release, Windows 10, RTX 4080 SUPER). Built on main
Not tested: no game run. The batch was built once, not per PR; nothing failed, so no bisect was needed. AI-assisted (Claude Code). |
9d3c952 to
fa6dfd0
Compare
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
|
|
Thanks for the work on this. Closing for now: PPSA99666 makes no buffer-pool evictions and its frame times are the same, so no title reaches the scan this removes, and the 8-key case gets slower. You are welcome to reopen it with a title whose profile shows |
What
Replace the retained-key scan in
BufferPool::evictOldestwith intrusive older/newer links in the existing deque slots. Byte budgets, slot limits, newest matching-slot reuse, and destruction outside the mutex retain their behavior. Partial insertion failure removes a newly created empty bucket before destroying the incoming allocation. Three files changed; no dependencies or hardware-specific branch. One additional pointer-width per retained slot.Title validation — 2026-10-13
No in-title benefit established; the review's hotspot requirement remains open. DOOM Shareware PS5 v1.1.1 (
PPSA99666) runs and exits successfully on this host, but its scripted E1M1 scene reports zero evictions in all three buffer-pool tiers. This title does not establish thatevictOldestis a hot path. The comparison below is a real-title validation result, not evidence of a speedup attributable to this change.Main
77b9f7270c25518d26052671311f43497328fdc7and CPU-only4a03bd7794e5540380cd5ed86bd372d7ae65b88f; Windows 11 build 26200, Ryzen 5 5600, RTX 3060 Ti 8 GiB, NVIDIA 617.14, GCC 15.2 UCRT Release. Same 1920×1080 output and 1100×619 window. The title's official frame-indexed play plan selects a new game, moves, turns and fires; its PNG capture line is omitted. Warm-up and restart before capture, onlyAPS5_TRACE_FRAMES=120:240, host log not redirected. No compilation, CTest or separate GPU benchmark during capture; no forced clocks.Twelve traces are retained: three initial main runs, three initial CPU runs, then three alternating main/CPU pairs to check GPU-busy variation between the initial groups. Every trace has 240 presents,
dirty=false,trace_dropped=false, and only the capture switch in its APS5 environment. Medians of per-capture values in the final paired series:DOOM is capped around 35 Hz. The initial main group had higher GPU-busy values; this difference did not persist in the consecutive pairs and is not attributed to the CPU patch. Separate diagnostic warm-ups with
APS5_PROFILE_DRAW=1showed 0 small/large/device evictions at 10 s and 20 s in both versions; that switch was absent from all traces.Traces, pairing manifest, play plan, digests and test results: download evidence.
First pair's unmodified summary lines (all captures are in the archive):
{"commit":"77b9f7270c25","dirty":false,"env":{"APS5_TRACE_FRAMES":"120:240"},"gpu":"NVIDIA GeForce RTX 3060 Ti","driver":"NVIDIA 617.14","os":"Windows 10.0.26200","resolution":"1920x1080","window":{"spec":"frames 120:240","first_present":120,"ms":6828.645},"presents":240,"frame_ms":{"p50":28.570,"p90":28.663,"p99":28.906,"max":28.989},"gpu_busy_ms_per_present":4.507,"worker_busy_pct":{"queue worker 0x0":0.614},"top_phases_ms_per_frame":{"Driver.Present":6.537,"Driver.Present.render_fence_wait":5.257,"Vulkan.Retire":5.256,"Vulkan.Retire.wait":5.251,"Driver.Present.present_display_buffer":1.077,"Vulkan.Present":1.074,"Vulkan.Present.pixel_upload":0.968,"Driver.Packet":0.173},"trace_dropped":false,"trace":"aps5-trace-77b9f7270c25-11460.json.gz"} {"commit":"4a03bd7794e5","dirty":false,"env":{"APS5_TRACE_FRAMES":"120:240"},"gpu":"NVIDIA GeForce RTX 3060 Ti","driver":"NVIDIA 617.14","os":"Windows 10.0.26200","resolution":"1920x1080","window":{"spec":"frames 120:240","first_present":120,"ms":6828.621},"presents":240,"frame_ms":{"p50":28.570,"p90":28.660,"p99":28.834,"max":28.868},"gpu_busy_ms_per_present":4.447,"worker_busy_pct":{"queue worker 0x0":0.602},"top_phases_ms_per_frame":{"Driver.Present":6.474,"Driver.Present.render_fence_wait":5.006,"Vulkan.Retire":5.005,"Vulkan.Retire.wait":5.001,"Driver.Present.present_display_buffer":1.272,"Vulkan.Present":1.269,"Vulkan.Present.pixel_upload":1.163,"Driver.Packet":0.170},"trace_dropped":false,"trace":"aps5-trace-4a03bd7794e5-4080.json.gz"}Tested
Final branch
fa6dfd040ec0529c400e84112dcef015f783f5cfis rebased on fixed main5d50886ee4045dc2a081d8d93bf8e667f6d82325. Its full build and 1069-case CTest run passed: 1067 passed, 2 expected skips, 0 failures. No tests or assertions were removed or relaxed. The additional upstream cases passed. Title measurements above were recorded at their explicitly listed earlier revisions; BufferPool and trace-protocol files were unchanged across the rebase. The archive includes both full test result sets.77b9, full build includinglibs,BUILD_TESTING=ON,ANYPS5_ENABLE_SPIRV_TOOLS=ON; 1059 registered CTest cases ran: 1057 passed, 2 expected skips, 0 failures, 309.57 s.ANYPS5_REQUIRE_VULKAN=1,ANYPS5_GPU=NVIDIA GeForce RTX 3060 Ti, supported native Windows VideoOut test driver. Skips: unavailableVK_EXT_shader_stencil_exportand intentionally missing-ICD VideoOut fixture. Author's skip audit passed.guest_ioctl_getsidin 935e7d6; its replacementguest_parent_processpassed.conventions_function_bodiestook 62.965 s at the captured base and 60.5743 s on the final branch (it was already slow in the earlier baseline); no timeout or assertion was relaxed. Linux/macOS and maintainer-triggered upstream CI were not run.The earlier mocked microbenchmark remains supplemental: 8 keys regressed from 1.491 to 1.599 µs/burst; 512 keys improved from 381.569 to 107.805 µs. Vulkan destruction/free were mocked, so those results do not establish a real-title benefit.
Related work
No duplicate ordering-index implementation was found. #4472 changes VRAM-budget handling in
Put; #1201 and #290 also touch nearby pooling/accounting code. These are separate changes; rebase if overlapping work lands first.Checklist