From a517c9f862d1a9ab13f2973da81dab85ed84abe4 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Sat, 8 Mar 2025 01:14:41 -0600 Subject: [PATCH] CoreTiming: Move VISkip calculation into a separate function. --- Source/Core/Core/CoreTiming.cpp | 15 +++++++++++---- Source/Core/Core/CoreTiming.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/CoreTiming.cpp b/Source/Core/Core/CoreTiming.cpp index b0c8f809d1..6d1ab99262 100644 --- a/Source/Core/Core/CoreTiming.cpp +++ b/Source/Core/Core/CoreTiming.cpp @@ -436,10 +436,7 @@ void CoreTimingManager::Throttle(const s64 target_cycle) target_time += adjustment; } - // Skip the VI interrupt if the CPU is lagging by a certain amount. - // It doesn't matter what amount of lag we skip VI at, as long as it's constant. - const TimePoint vi_target = time - std::min(m_max_fallback, m_max_variance) / 2; - m_throttle_disable_vi_int = target_time < vi_target; + UpdateVISkip(time, target_time); SleepUntil(target_time); } @@ -469,6 +466,16 @@ void CoreTimingManager::ResetThrottle(s64 cycle) m_throttle_reference_time = Clock::now(); } +void CoreTimingManager::UpdateVISkip(TimePoint current_time, TimePoint target_time) +{ + const DT vi_fallback = std::min(m_max_variance, m_max_fallback); + + // Skip the VI interrupt if the CPU is lagging by a certain amount. + // It doesn't matter what amount of lag we skip VI at, as long as it's constant. + const TimePoint vi_target = current_time - vi_fallback / 2; + m_throttle_disable_vi_int = target_time < vi_target; +} + bool CoreTimingManager::GetVISkip() const { return m_throttle_disable_vi_int && g_ActiveConfig.bVISkip && !Core::WantsDeterminism(); diff --git a/Source/Core/Core/CoreTiming.h b/Source/Core/Core/CoreTiming.h index 9de1282e04..8ed1fbcb89 100644 --- a/Source/Core/Core/CoreTiming.h +++ b/Source/Core/Core/CoreTiming.h @@ -215,6 +215,7 @@ private: void UpdateSpeedLimit(s64 cycle, double new_speed); void ResetThrottle(s64 cycle); TimePoint CalculateTargetHostTimeInternal(s64 target_cycle); + void UpdateVISkip(TimePoint current_time, TimePoint target_time); int DowncountToCycles(int downcount) const; int CyclesToDowncount(int cycles) const;