Avoid occasional 'busy wait' for next render time in main loop. #18491

This commit is contained in:
Vapre
2025-06-17 20:52:19 +02:00
committed by Gustas Kažukauskas
parent b6495113c4
commit d08d03274b

View File

@@ -863,8 +863,13 @@ namespace OpenRA
var haveSomeTimeUntilNextLogic = now < nextLogic; var haveSomeTimeUntilNextLogic = now < nextLogic;
var isTimeToRender = now >= nextRender; var isTimeToRender = now >= nextRender;
if (!Renderer.WindowIsSuspended && ((isTimeToRender && haveSomeTimeUntilNextLogic) || forceRender)) if (!Renderer.WindowIsSuspended)
{ {
if (isTimeToRender || forceRender)
{
if (haveSomeTimeUntilNextLogic || forceRender)
RenderTick();
nextRender = now + renderInterval; nextRender = now + renderInterval;
// Pick the minimum allowed FPS (the lower between 'minReplayFPS' // Pick the minimum allowed FPS (the lower between 'minReplayFPS'
@@ -875,12 +880,13 @@ namespace OpenRA
var maxRenderInterval = Math.Max(1000 / MinReplayFps, renderInterval); var maxRenderInterval = Math.Max(1000 / MinReplayFps, renderInterval);
forcedNextRender = now + maxRenderInterval; forcedNextRender = now + maxRenderInterval;
RenderTick();
renderBeforeNextTick = false; renderBeforeNextTick = false;
} }
}
else
{
// Simulate a render tick if it was time to render but we skip actually rendering // Simulate a render tick if it was time to render but we skip actually rendering
if (Renderer.WindowIsSuspended && isTimeToRender) if (isTimeToRender || forceRender)
{ {
// Make sure that nextUpdate is set to a proper minimum interval // Make sure that nextUpdate is set to a proper minimum interval
nextRender = now + renderInterval; nextRender = now + renderInterval;
@@ -891,6 +897,12 @@ namespace OpenRA
// Ensure that we still logic tick despite not rendering // Ensure that we still logic tick despite not rendering
renderBeforeNextTick = false; renderBeforeNextTick = false;
} }
else
{
// Avoid busy wait.
Thread.Sleep((int)(nextRender - now));
}
}
} }
else else
Thread.Sleep((int)(nextUpdate - now)); Thread.Sleep((int)(nextUpdate - now));