docs(tested): the recorder thread in the Market while moving, interleaved off and on #389
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!389
Loading…
Reference in a new issue
No description provided.
Delete branch "GrimVisage/Longshot:docs/tested-market-recorder-moving"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
The recorder thread's runs in #369 were standing still; the team asked how it does while moving and turning the camera. These runs answer that: in the Market it takes 3 to 4 ms a frame off the replay and evens out frame pacing, but fps stays level, because moving is bound by the game's own CPU work rather than the replay.
What changed
docs/tested/,2026-11-13-market-recorder-moving-grimvisage-*.md, one run each, in the format ofdocs/tested/README.md, all main5a8ae7e3withRX_VK_RECORDERoff andthread, Ryzen 5 5600X and RX 9070 XT on Fedora 45 (RADV 26.2.6), the Market moving in three measured segments, uncapped:run01torun04: the comparison, four runs by hand interleaved off, thread, thread, off;route-record: one more run by hand (off) whose controller inputs were recorded;route-replay-run01torun04: that recording replayed through a virtual pad, interleaved off, thread, thread, off; the route drifted from run to run (run 4 ended outside the Market), so they are recorded but not used for the comparison;route-sampled-offandroute-sampled-thread: the replay once a side with the all-thread sampler on, the source of the profile under Reviewer notes (their fps is lowered by the sampler).Flags and settings
None.
Measurements
A docs change: measured by its check (CONTRIBUTING.md, "Measurements":
docs, test output on main and with this PR).main:
0caf0618(the branch's base)this PR: docs/tested-market-recorder-moving @
7fbbb141Hardware: Ryzen 5 5600X, 31 GB, Fedora 45 (kernel 7.3.3), Python 3.15.2
Scene: none (game-free checks)
Method:
python -I -B tests/test_tested_configurations.py, andpython -I -B tests/run_all.pyon this PR with the failing checks run again on mainHow to reproduce: the two commands above from the repository root
0caf06187fbbb141tests/test_tested_configurations.pytests/run_all.pytest_menu_keys,test_module_ids,test_pad_layoutfailThe runs these files record are under Reviewer notes.
Testing
Tested: the files' format check (
tests/test_tested_configurations.py) and the whole game-free suite on Linux (Fedora 45); the three failures there also fail on main0caf0618on this PC. The runs themselves were made in the game on this PC (Ryzen 5 5600X, RX 9070 XT, RADV 26.2.6), as Reviewer notes describes; no popping, culling or other visual problems were seen while moving.Not tested: the website's catalogue built from these files (it reads
docs/tested/directly; not run here).Needs other testers: None
Screenshots
Nothing on screen.
Risk and rollback
Docs only: nothing the game, the builds or the checks run changes. Reverting the commit removes the files.
Reviewer notes
The runs, compared as the switch off against on (both main @
5a8ae7e3, the same build; main against a PR wasn't the comparison because the switch is already on main). Each run: a fresh copy of one child Market save, uncapped (HOS_FPS_MAX=240),HOS_PRESENT_TRACEon; from the gate, moving by hand on spoken cues: 60 s running around the fountain, 60 s running around it while turning the camera, 30 s standing while turning the camera, each measured; interleaved off, thread, thread, off after earlier warm runs. Frame times from the present trace; replay and GPU times are the medians of the log's status lines in each window. Medians of the two runs a side.Baseline: main @
5a8ae7e3,RX_VK_RECORDERunset5a8ae7e3, recorder off (run 1 / run 4)5a8ae7e3,RX_VK_RECORDER=thread(run 2 / run 3)Moving, the frame is 26 to 27 ms against 12 to 17 ms of replay, so the replay's saving does not reach the fps. The sampled pair (
route-sampled-*:HOS_PROFILE=5,HOS_SAMPLE_ALL,scripts/crit.py) over the same segments: no thread is saturated (Presentation 35 to 38%, BaseProcExecutor0 to 5 26 to 31% each);sead::MainThreadis blocked in 65% of instants, mostly in f_8007fe60, then a sleep under f_800998a0 and f_83acfb90, while the workers run f_805902c0 most (55 to 73% of those instants). Moving looks bound by the game's own job chain, not the renderer.A status line from each side, in the running + camera window:
Moving by hand varies the route: draws a frame ranged 1,766 to 2,274 running and 2,040 to 2,195 in the camera segments. Replaying a recorded controller route was tried for consistency (
route-*files) and drifted further (one replay ended outside the Market), so the four hand runs are the comparison; the replays agree in direction where they stayed in the Market.Issues
See #369
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.docs/tested/for each new measured run (format indocs/tested-configurations.md; no appended row or assembled view).🤖 Generated with Claude Code
WIP: docs(tested): the recorder thread in the Market while moving, interleaved off and onto docs(tested): the recorder thread in the Market while moving, interleaved off and onView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.