diff options
| author | Léo Lam <leo@leolam.fr> | 2021-05-07 15:08:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-07 15:08:01 +0200 |
| commit | 049b92b7ef51b8aaa0f3a9370c3e8bccd44d185b (patch) | |
| tree | 9dc2e0675884a2134c68603f78e1a3efead62d96 /Source/Core/VideoCommon/FPSCounter.cpp | |
| parent | 8547de25930aa2f7e4658a4c10fece3fc86047cd (diff) | |
| parent | 818672b5856ed0ba36af27343f4dbf31544bc1a4 (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.cpp | 32 |
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; + } +} |
