From f16bfe4b1acf1718aeaff311ed23278834a8a17b Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sun, 7 Dec 2025 21:10:18 +0800 Subject: Lower timer priority (including rendering) in SDL. --- include/cru/base/Timer.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/cru/base/Timer.h b/include/cru/base/Timer.h index 5508bccf..52c8386d 100644 --- a/include/cru/base/Timer.h +++ b/include/cru/base/Timer.h @@ -30,19 +30,23 @@ class TimerRegistry : public Object { repeat(repeat), data(std::move(data)) {} + std::chrono::steady_clock::time_point NextTrigger() const { + return interval == std::chrono::milliseconds::zero() + ? last_check + : last_check - (last_check - created) % interval + interval; + } + std::chrono::milliseconds NextTimeout( std::chrono::steady_clock::time_point now) const { - return interval == std::chrono::milliseconds::zero() + auto next_trigger = NextTrigger(); + return now >= next_trigger ? std::chrono::milliseconds::zero() : std::chrono::duration_cast( - interval - (now - created) % interval); + next_trigger - now); } bool Update(std::chrono::steady_clock::time_point now) { - auto next_trigger = - interval == std::chrono::milliseconds::zero() - ? last_check - : last_check - (last_check - created) % interval + interval; + auto next_trigger = NextTrigger(); if (now >= next_trigger) { last_check = next_trigger; return true; -- cgit v1.2.3