vblankmanager: When calculating fps limiter sleep time, take the min of the rolling max frame time against target interval - redzone

We account for redzone later, and don't want to go over vblank time and preceed into previous vblank or whatever here.
This commit is contained in:
Joshua Ashton 2022-02-12 13:46:36 +00:00
parent 0862a2b896
commit 2cac416000

View file

@ -275,10 +275,12 @@ void fpslimitThreadRun( void )
int64_t sleepyTime = targetInterval;
if ( refresh % nTargetFPS == 0 )
{
sleepyTime -= rollingMaxFrameTime;
// Take the min of it to the target interval - the fps limiter redzone
// so that we don't go over the target interval - expected vblank time
sleepyTime -= std::min( rollingMaxFrameTime, targetInterval - g_uFPSLimiterRedZoneNS );
sleepyTime -= g_uFPSLimiterRedZoneNS;
sleepyTime -= g_uRollingMaxDrawTime.load();
sleepyTime -= g_uVblankDrawBufferRedZoneNS;
sleepyTime -= g_uFPSLimiterRedZoneNS;
vblank = g_lastVblank;
while ( vblank < t1 )