From bfa5ef7990f7213a4877d400c5f3f86a4483ba10 Mon Sep 17 00:00:00 2001 From: Alexander Wilms Date: Tue, 26 Sep 2023 17:28:44 +0200 Subject: [PATCH] Don't sleep in FramerateManager::framerateDelay() if VSync is enabled --- client/gui/FramerateManager.cpp | 16 +++++++++++----- client/gui/FramerateManager.h | 2 ++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/client/gui/FramerateManager.cpp b/client/gui/FramerateManager.cpp index 59aa653e7..0e81ea8c8 100644 --- a/client/gui/FramerateManager.cpp +++ b/client/gui/FramerateManager.cpp @@ -11,22 +11,28 @@ #include "StdInc.h" #include "FramerateManager.h" +#include "../../lib/CConfigHandler.h" + FramerateManager::FramerateManager(int targetFrameRate) : targetFrameTime(Duration(boost::chrono::seconds(1)) / targetFrameRate) , lastFrameIndex(0) , lastFrameTimes({}) - , lastTimePoint (Clock::now()) + , lastTimePoint(Clock::now()) + , vsyncEnabled(settings["video"]["vsync"].Bool()) { boost::range::fill(lastFrameTimes, targetFrameTime); } void FramerateManager::framerateDelay() { - Duration timeSpentBusy = Clock::now() - lastTimePoint; + if(!vsyncEnabled) + { + Duration timeSpentBusy = Clock::now() - lastTimePoint; - // FPS is higher than it should be, then wait some time - if(timeSpentBusy < targetFrameTime) - boost::this_thread::sleep_for(targetFrameTime - timeSpentBusy); + // FPS is higher than it should be, then wait some time + if(timeSpentBusy < targetFrameTime) + boost::this_thread::sleep_for(targetFrameTime - timeSpentBusy); + } // compute actual timeElapsed taking into account actual sleep interval // limit it to 100 ms to avoid breaking animation in case of huge lag (e.g. triggered breakpoint) diff --git a/client/gui/FramerateManager.h b/client/gui/FramerateManager.h index 818e55f94..d653bd667 100644 --- a/client/gui/FramerateManager.h +++ b/client/gui/FramerateManager.h @@ -25,6 +25,8 @@ class FramerateManager /// index of last measured frome in lastFrameTimes array ui32 lastFrameIndex; + bool vsyncEnabled; + public: FramerateManager(int targetFramerate);