summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/FPSCounter.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-05-07 15:08:01 +0200
committerGitHub <noreply@github.com>2021-05-07 15:08:01 +0200
commit049b92b7ef51b8aaa0f3a9370c3e8bccd44d185b (patch)
tree9dc2e0675884a2134c68603f78e1a3efead62d96 /Source/Core/VideoCommon/FPSCounter.cpp
parent8547de25930aa2f7e4658a4c10fece3fc86047cd (diff)
parent818672b5856ed0ba36af27343f4dbf31544bc1a4 (diff)
Merge pull request #9417 from Filoppi/input-1
Fix FPS counter and Game Window speed % breaking on pause/unpause
Diffstat (limited to 'Source/Core/VideoCommon/FPSCounter.cpp')
-rw-r--r--Source/Core/VideoCommon/FPSCounter.cpp32
1 files changed, 30 insertions, 2 deletions
diff --git a/Source/Core/VideoCommon/FPSCounter.cpp b/Source/Core/VideoCommon/FPSCounter.cpp
index 24d49548df..b7c452ec4e 100644
--- a/Source/Core/VideoCommon/FPSCounter.cpp
+++ b/Source/Core/VideoCommon/FPSCounter.cpp
@@ -8,6 +8,7 @@
#include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
#include "Common/Timer.h"
+#include "Core/Core.h"
#include "VideoCommon/FPSCounter.h"
#include "VideoCommon/VideoConfig.h"
@@ -16,6 +17,18 @@ static constexpr u64 FPS_REFRESH_INTERVAL = 250000;
FPSCounter::FPSCounter()
{
m_last_time = Common::Timer::GetTimeUs();
+
+ m_on_state_changed_handle = Core::AddOnStateChangedCallback([this](Core::State state) {
+ if (state == Core::State::Paused)
+ SetPaused(true);
+ else if (state == Core::State::Running)
+ SetPaused(false);
+ });
+}
+
+FPSCounter::~FPSCounter()
+{
+ Core::RemoveOnStateChangedCallback(&m_on_state_changed_handle);
}
void FPSCounter::LogRenderTimeToFile(u64 val)
@@ -31,8 +44,9 @@ void FPSCounter::LogRenderTimeToFile(u64 val)
void FPSCounter::Update()
{
- u64 time = Common::Timer::GetTimeUs();
- u64 diff = time - m_last_time;
+ const u64 time = Common::Timer::GetTimeUs();
+ const u64 diff = time - m_last_time;
+ m_time_diff_secs = static_cast<double>(diff / 1000000.0);
if (g_ActiveConfig.bLogRenderTimeToFile)
LogRenderTimeToFile(diff);
@@ -47,3 +61,17 @@ void FPSCounter::Update()
m_time_since_update = 0;
}
}
+
+void FPSCounter::SetPaused(bool paused)
+{
+ if (paused)
+ {
+ m_last_time_pause = Common::Timer::GetTimeUs();
+ }
+ else
+ {
+ const u64 time = Common::Timer::GetTimeUs();
+ const u64 diff = time - m_last_time_pause;
+ m_last_time += diff;
+ }
+}