use std::time::{Duration, Instant};
pub struct Stopwatch {
start_time: Option<Instant>,
elapsed: Duration,
}
impl Stopwatch {
pub fn new() -> Self {
Stopwatch {
start_time: None,
elapsed: Duration::default(),
}
}
pub fn start(&mut self) {
self.start_time = Some(Instant::now());
}
pub fn stop(&mut self) {
if let Some(start) = self.start_time {
self.elapsed += start.elapsed();
self.start_time = None;
}
}
pub fn reset(&mut self) {
self.start_time = None;
self.elapsed = Duration::default();
}
pub fn elapsed(&self) -> Duration {
let mut total = self.elapsed;
if let Some(start) = self.start_time {
total += start.elapsed();
}
total
}
pub fn elapsed_seconds(&self) -> f64 {
self.elapsed().as_secs_f64()
}
pub fn elapsed_millis(&self) -> f64 {
self.elapsed().as_millis() as f64
}
}