use time_crate as time; pub fn report_time Out>(name: &str, f: F) -> Out { let start = time::now(); println!("starting {}", name); let res = f(); println!("done {} - took: {}", name, (time::now() - start)); res } pub fn measure Out>(f: F) -> (Out, time::Duration) { let start = time::now(); let res = f(); (res, time::now() - start) } #[derive(Debug)] pub struct Timer { start: time::Tm } impl Default for Timer { fn default() -> Self { Self::new() } } impl Timer { pub fn new() -> Timer { Timer { start: time::now() } } pub fn restart(&mut self) { self.start = time::now(); } pub fn report_passed_ms(&self) { println!("{}ms", (time::now() - self.start).num_milliseconds()); } pub fn get_passed_ms(&self) -> i64 { (time::now() - self.start).num_milliseconds() } }