eframe/
stopwatch.rs
1#![allow(dead_code)] use web_time::Instant;
4
5pub struct Stopwatch {
6 total_time_ns: u128,
7
8 start: Option<Instant>,
10}
11
12impl Stopwatch {
13 pub fn new() -> Self {
14 Self {
15 total_time_ns: 0,
16 start: None,
17 }
18 }
19
20 pub fn start(&mut self) {
21 assert!(self.start.is_none());
22 self.start = Some(Instant::now());
23 }
24
25 pub fn pause(&mut self) {
26 let start = self.start.take().unwrap();
27 let duration = start.elapsed();
28 self.total_time_ns += duration.as_nanos();
29 }
30
31 pub fn resume(&mut self) {
32 assert!(self.start.is_none());
33 self.start = Some(Instant::now());
34 }
35
36 pub fn total_time_ns(&self) -> u128 {
37 if let Some(start) = self.start {
38 let duration = start.elapsed();
40 self.total_time_ns + duration.as_nanos()
41 } else {
42 self.total_time_ns
44 }
45 }
46
47 pub fn total_time_sec(&self) -> f32 {
48 self.total_time_ns() as f32 * 1e-9
49 }
50}