1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#[cfg(feature = "profile")]
macro_rules! profile {
    ($message: expr; $($t:tt)*) => {{
        let now = std::time::Instant::now();
        #[cfg(feature = "tracing")]
        tracing::trace!("{}: Starting", $message);
        let result = {
            $($t)*
        };
        let elapsed = now.elapsed();
        #[cfg(feature = "tracing")]
        tracing::info!("{}: elapsed time: {:?}", $message, elapsed);
        result
    }}
}
#[cfg(not(feature = "profile"))]
macro_rules! profile {
    ($_: expr; $($t:tt)*) => {
        $($t)*
    }
}
pub(crate) use profile;

#[test]
pub fn test_profiling() {
    let time = std::time::Instant::now();
    profile!("Testing profiling"; {
        std::thread::sleep(std::time::Duration::from_secs(1));
    });
    let time = time.elapsed();
    assert!(time.as_secs() == 1);
}