aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-12-07 21:10:18 +0800
committerYuqian Yang <crupest@crupest.life>2025-12-07 21:10:18 +0800
commitf16bfe4b1acf1718aeaff311ed23278834a8a17b (patch)
tree8d05798ed1c0ebca10e43d5dc9d966aa0bd24289 /include
parentb3b68c704926b71afc923f392b0cc91107717112 (diff)
downloadcru-f16bfe4b1acf1718aeaff311ed23278834a8a17b.tar.gz
cru-f16bfe4b1acf1718aeaff311ed23278834a8a17b.tar.bz2
cru-f16bfe4b1acf1718aeaff311ed23278834a8a17b.zip
Lower timer priority (including rendering) in SDL.
Diffstat (limited to 'include')
-rw-r--r--include/cru/base/Timer.h16
1 files changed, 10 insertions, 6 deletions
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<std::chrono::milliseconds>(
- 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;