use std::{sync::Mutex, time::Duration};
pub static PERF: Mutex<Vec<PerformanceStamp>> = Mutex::new(vec![]);
pub struct PerformanceStamp {
pub description: &'static str,
pub duration: Duration,
}
impl PerformanceStamp {
pub fn print_results() {
let perf = PERF.lock().unwrap();
for result in perf.iter() {
eprintln!("{} ran for {:?}", result.description, result.duration);
}
}
}
#[macro_export]
macro_rules! stamp {
($desc:expr, $time_var:ident) => {
#[cfg(feature = "performance_stamp")]
{
crate::perf_instrumentation::PERF.lock().unwrap().push(
crate::perf_instrumentation::PerformanceStamp {
description: $desc,
duration: $time_var.elapsed(),
},
);
$time_var = Instant::now();
}
};
}