salva3d/counters/
timer.rs1use std::fmt::{Display, Error, Formatter};
2
3#[derive(Copy, Clone, Debug, Default)]
5pub struct Timer {
6 enabled: bool,
7 time: f64,
8 start: Option<f64>,
9}
10
11impl Timer {
12 pub fn new() -> Self {
14 Timer {
15 enabled: false,
16 time: 0.0,
17 start: None,
18 }
19 }
20
21 pub fn enable(&mut self) {
23 self.enabled = true;
24 }
25
26 pub fn disable(&mut self) {
28 self.enabled = false;
29 }
30
31 pub fn reset(&mut self) {
33 self.time = 0.0
34 }
35
36 pub fn start(&mut self) {
38 if self.enabled {
39 self.time = 0.0;
40 self.start = Some(instant::now());
41 }
42 }
43
44 pub fn pause(&mut self) {
46 if self.enabled {
47 if let Some(start) = self.start {
48 self.time += instant::now() - start;
49 }
50 self.start = None;
51 }
52 }
53
54 pub fn resume(&mut self) {
56 if self.enabled {
57 self.start = Some(instant::now());
58 }
59 }
60
61 pub fn time(&self) -> f64 {
63 self.time
64 }
65}
66
67impl Display for Timer {
68 fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
69 write!(f, "{}s", self.time)
70 }
71}