Load-time attribution: the minute is the renderers' entity-make streams
Measured (loadphase markers + queue blocker dump): renderer LoadMission 31ms, model loads 0.2s -- the teal->green minute is the LoadingMission ready-gate (IsPriorityEmpty counts timed events too) waiting out the THREE renderers' entity-make streams: every entity/subsystem creation posts message 3 to each Renderer receiver (classIDs 8/30/36 = video/audio/gauge), hundreds deep per queue, draining across the whole window (the audio renderer's share is why sound starts mid-load). Instrumentation kept: [loadphase] markers (renderer span + busy-pass counter) always on; GeneralEventQueue::DumpBlockers + the class-named DumpData fallback behind BT_LOAD_DIAG=1 (hundreds of lines per load). Optimizing the drain (batching/budget) is an open perf item -- deliberately untouched before the 8-player night. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
0ef5a3c4e1
commit
7b3e76db38
@@ -1377,9 +1377,17 @@ void
|
||||
static int s_busy_passes = 0;
|
||||
++s_busy_passes;
|
||||
if ((s_busy_passes % 5) == 1)
|
||||
{
|
||||
DEBUG_STREAM << "[loadphase] CheckLoad: event queue still busy"
|
||||
<< " (pass " << s_busy_passes << ") t=" << GetTickCount()
|
||||
<< std::endl << std::flush;
|
||||
// full queue dump is VERBOSE (hundreds of lines per load) --
|
||||
// finding of record: the blockers are the three renderers'
|
||||
// entity-make streams (message 3 for Renderer, classIDs
|
||||
// 8/30/36) -- re-enable to re-verify
|
||||
if (getenv("BT_LOAD_DIAG") != NULL)
|
||||
eventQueue->DumpBlockers(MinEventPriority);
|
||||
}
|
||||
}
|
||||
if (eventQueue->IsPriorityEmpty(MinEventPriority))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user