Prevent low vsync fps from slowing tick under old 20ms

This commit is contained in:
Kung-vr
2019-02-02 03:01:36 +09:00
parent e302d5b978
commit 95be1a4aab
2 changed files with 15 additions and 0 deletions
+11
View File
@@ -540,7 +540,18 @@ void OverlayController::OnTimeoutPumpEvents()
// wait for the next frame after executing our main event loop once. // wait for the next frame after executing our main event loop once.
m_lastFrame = m_currentFrame; m_lastFrame = m_currentFrame;
m_vsyncTooLateCounter = 0;
} }
else if ( m_vsyncTooLateCounter >= k_nonVsyncTickRate )
{
mainEventLoop();
// m_lastFrame = m_currentFrame + 1 skips the next vsync frame in case
// it was just about to trigger, to prevent double updates faster than
// 11ms.
m_lastFrame = m_currentFrame + 1;
m_vsyncTooLateCounter = 0;
}
m_vsyncTooLateCounter++;
} }
void OverlayController::mainEventLoop() void OverlayController::mainEventLoop()
+4
View File
@@ -58,6 +58,9 @@ constexpr int k_reviveSettingsUpdateCounter = 139;
constexpr int k_settingsTabSettingsUpdateCounter = 157; constexpr int k_settingsTabSettingsUpdateCounter = 157;
constexpr int k_steamVrSettingsUpdateCounter = 97; constexpr int k_steamVrSettingsUpdateCounter = 97;
constexpr int k_utilitiesSettingsUpdateCounter = 19; constexpr int k_utilitiesSettingsUpdateCounter = 19;
// k_nonVsyncTickRate determines number of ms we wait to force the next event
// loop tick when vsync is too late due to dropped frames.
constexpr int k_nonVsyncTickRate = 20;
class OverlayController : public QObject class OverlayController : public QObject
{ {
@@ -102,6 +105,7 @@ private:
uint64_t m_currentFrame = 0; uint64_t m_currentFrame = 0;
uint64_t m_lastFrame = 0; uint64_t m_lastFrame = 0;
int m_vsyncTooLateCounter = 0;
// OpenVR_Init must be declared before any other class that uses OpenVR // OpenVR_Init must be declared before any other class that uses OpenVR
// function calls since objects are initialized in order of declaration in // function calls since objects are initialized in order of declaration in