Render thread (panorama, nice 0, load ~27 on 16 cores):
- Per-run UI panel slots reused across eyes, one per-frame panel data texture, and cached
struct bytes for shader uniforms and draw matrices: renderRaythreeFrame 4.16 -> 2.27 ms.
- The worker skips publishing scenes whose fingerprint (overlaySceneFingerprint) matches the
last one sent, with a 1 s keepalive. Anchored items now keep bit-identical local matrices
while nothing moves: built from the local transform chain, or held through rounding noise
where uikit derives matrixWorld from layout. Decode on the render thread 1.78 -> 0.04
ms/frame when idle; render thread busy 6.4 -> 4.2 ms/frame.
Diagnostics: a frame timeline probe with schedstat in overlayRenderOwner, CPU profiling with an
interval, dropLateFrames, renderThreadNice, split presenter finish/wait/publish, a native
WaitFrameSync phase probe and a compositor frame-timing probe. asyncFrameWait,
projectionPacing and deferDecode are projection experiments that did not help.
Also includes the other agent's pending overlay scene buffer, wire and ovrdriver lab work.
Agent: Claude Code 2.1.296; model claude-opus-5-5; thread 941be8c7-aca1-4664-b284-7cc0eed69e21