Core: Make pause/fast forward/save state/etc more responsive when running emulation at low speeds
This commit is contained in:
parent
3d079f66d7
commit
96e7edb1f5
2 changed files with 14 additions and 2 deletions
|
@ -157,7 +157,12 @@ void Console::ProcessEndOfFrame()
|
||||||
}
|
}
|
||||||
|
|
||||||
_frameLimiter->ProcessFrame();
|
_frameLimiter->ProcessFrame();
|
||||||
_frameLimiter->WaitForNextFrame();
|
while(_frameLimiter->WaitForNextFrame()) {
|
||||||
|
if(_stopFlag || _frameDelay != GetFrameDelay() || _paused || _pauseOnNextFrame || _lockCounter > 0) {
|
||||||
|
//Need to process another event, stop sleeping
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
double newFrameDelay = GetFrameDelay();
|
double newFrameDelay = GetFrameDelay();
|
||||||
if(newFrameDelay != _frameDelay) {
|
if(newFrameDelay != _frameDelay) {
|
||||||
|
|
|
@ -39,8 +39,15 @@ public:
|
||||||
_targetTime += _delay;
|
_targetTime += _delay;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaitForNextFrame()
|
bool WaitForNextFrame()
|
||||||
{
|
{
|
||||||
|
if(_targetTime - _clockTimer.GetElapsedMS() > 50) {
|
||||||
|
//When sleeping for a long time (e.g <= 25% speed), sleep in small chunks and check to see if we need to stop sleeping between each sleep call
|
||||||
|
_clockTimer.WaitUntil(_clockTimer.GetElapsedMS() + 40);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
_clockTimer.WaitUntil(_targetTime);
|
_clockTimer.WaitUntil(_targetTime);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
Loading…
Add table
Reference in a new issue