From 47b90603e24785a2c3781c786b79caa609d30a88 Mon Sep 17 00:00:00 2001 From: 4yn Date: Thu, 24 Feb 2022 10:35:35 +0800 Subject: [PATCH] fix time overflow --- src-slider_io/src/shared/utils.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src-slider_io/src/shared/utils.rs b/src-slider_io/src/shared/utils.rs index 3985e9a..fcab81e 100644 --- a/src-slider_io/src/shared/utils.rs +++ b/src-slider_io/src/shared/utils.rs @@ -43,6 +43,7 @@ impl Error for ShimError { pub struct LoopTimer { cap: usize, cur: usize, + init: usize, buf: Vec, freq: Arc, } @@ -52,16 +53,22 @@ impl LoopTimer { Self { cap: 100, cur: 0, - buf: vec![Instant::now() - Duration::from_secs(10_000); 100], + init: 0, + buf: vec![Instant::now(); 100], freq: Arc::new(AtomicF64::new(0.0)), } } + pub fn tick(&mut self) { let last = self.buf[self.cur]; let now = Instant::now(); + if self.init < 100 { + self.init += 1; + } + self.buf[self.cur] = now; - let delta = (now - last) / 100 + Duration::from_micros(1); + let delta = (now - last) / (self.init as u32) + Duration::from_micros(1); let freq = Duration::from_millis(1000) .div_duration_f64(delta) .clamp(0.0, 9999.0); @@ -75,7 +82,8 @@ impl LoopTimer { #[allow(dead_code)] pub fn reset(&mut self) { - self.buf = vec![Instant::now() - Duration::from_secs(10); 100]; + self.init = 0; + self.buf = vec![Instant::now(); 100]; self.cur = 0; }