Avoid occasional 'busy wait' for next render time in main loop. #18491
This commit is contained in:
committed by
Gustas Kažukauskas
parent
b6495113c4
commit
d08d03274b
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user