handoff(forge): laptop setup checklist (power mode, MUX dGPU-only, CPU name, core placement) + main-thread rendering control run (--render-thread safe) with /mainthread reads

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018hSLRwirUk2NF4j1v2kH4Z
This commit is contained in:
ozanandClaude Opus 5.5 committed 2026-10-19 03:07:19 +01:00
1 parent 17d80b0004
commit e16736c518
1 file changed
+21
@@ -22,6 +22,14 @@ Nothing is published or pinned for this yet. This is a test build on Forge only.
## 2. In-game A/B (box otherwise idle, one engine, nothing else running)
Laptop setup first, and write the settings into the report (each one alone can move fps 8–15 %):
- Plugged in; Windows power mode **Best performance**; the maker's performance/turbo profile.
- **MUX switch on dGPU only** (Ultimate / Discrete mode in the maker's app; needs a reboot). In hybrid mode
every frame is copied through the AMD integrated GPU to the panel. If the laptop has no MUX, say so.
- Record the CPU name (`Get-CimInstance Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors`).
On a Ryzen AI 9 HX 370-class chip only 4 cores are full-speed; note in Process Explorer (Threads) which cores the
engine's busiest threads sit on.
The game pins `4.7.2@e64890fd3`; skip the pin for this test build:
```bash
@@ -61,6 +69,19 @@ ARIKI_API=http://127.0.0.1:4328 python tools/render_thread_profile.py --log "$LO
Eye check with `hzb on`: turn the camera fast past a hill and a house. Plants must not pop in a frame late or
vanish while visible.
Control, its own launch after the runs above: rendering on the main thread (`--render-thread safe`) instead of the
project's separate render thread. A frame should cost max(main, render) with the separate thread and main + render
without it; Windows reads ~22 ms against a ~11 ms `_draw` wall, which looks like main + render.
```bash
TINQS_ENGINE_SKIP_CHECK=1 GAME_ARGS="--gpu-profile --render-thread safe" GAME_RES=1600x900 bash tools/game.sh run
# same ready / host_game / settle as above, then the 4-state profile again with OUT=.game-cli/safe-windows-$(date +%Y%m%d-%H%M)
```
Plus three `/mainthread` reads with the separate thread (default launch) and three with `safe`, all with
replay + record off. Report `mainWorkMs`, `tailAndRenderSyncMs`, `verdict` p50/p95 for each. If `safe` costs about
the same frame time as `separate`, the separate thread is not overlapping anything on Windows.
Report per pose and state: frame ms, `_draw` wall, `end_frame`, render-CPU labels, fps p25, `/perf
gpucullCounters.parallelReplay` (lists / chunks), pixel diff vs the A/A floor, and the full `results.json`.