diff options
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; + } +} |
