fix(perf #N6.1): gate gpu_us read on diag for symmetric toggle behavior
Code-quality review on Task 1 (commit a7c9800) flagged an asymmetric
diag gate: the read-before-overwrite block at the top of the dispatcher
was not gated on diag, but the frame-counter increment and BeginQuery
calls were. If a maintainer toggled ACDREAM_WB_DIAG from "1" to "" mid-
session, _gpuQueryFrameIndex would freeze (gated inside if(diag)) while
the read kept firing every frame at the same slot — producing duplicate
stale samples.
Add diag to the read block's outer condition so the read/issue/increment
trio is symmetric. One-line change; behavior under the normal usage
pattern (env var set at launch, never toggled) is unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a7c98004bb
commit
25cb147d97
1 changed files with 5 additions and 1 deletions
|
|
@ -772,7 +772,11 @@ public sealed unsafe class WbDrawDispatcher : IDisposable
|
|||
// §3 Q1/Q2 + §4 in
|
||||
// docs/superpowers/specs/2026-05-11-phase-n6-slice1-design.md.
|
||||
int gpuQuerySlot = _gpuQueryFrameIndex % GpuQueryRingDepth;
|
||||
if (_gpuQueriesInitialized && _gpuQueryFrameIndex >= GpuQueryRingDepth)
|
||||
// diag is part of the gate so the read/issue/increment trio stays
|
||||
// symmetric — without it, toggling ACDREAM_WB_DIAG mid-session would
|
||||
// freeze the frame counter (gated by diag below) while the read kept
|
||||
// re-reading the same slot, producing duplicate stale samples.
|
||||
if (diag && _gpuQueriesInitialized && _gpuQueryFrameIndex >= GpuQueryRingDepth)
|
||||
{
|
||||
_gl.GetQueryObject(_gpuQueryOpaque[gpuQuerySlot], QueryObjectParameterName.ResultAvailable, out int avail);
|
||||
if (avail != 0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue