blots_core/
stats.rs

1use std::fmt::Display;
2
3#[derive(Debug, Clone)]
4pub struct FunctionCallStats {
5    pub name: String,
6    pub start: std::time::Instant,
7    pub end: std::time::Instant,
8    pub start_var_env: Option<std::time::Instant>,
9    pub end_var_env: Option<std::time::Instant>,
10}
11
12impl Display for FunctionCallStats {
13    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14        if self.start_var_env.is_some() && self.end_var_env.is_some() {
15            write!(
16                f,
17                "FunctionCallStats {{ name: {}, duration: {}ms, var_env_duration: {}ms }}",
18                self.name,
19                (self.end - self.start).as_secs_f64() * 1_000.0,
20                (self.end_var_env.unwrap() - self.start_var_env.unwrap()).as_secs_f64() * 1_000.0
21            )
22        } else {
23            write!(
24                f,
25                "FunctionCallStats {{ name: {}, duration: {}ms, var_env_duration: None (built-in) }}",
26                self.name,
27                (self.end - self.start).as_secs_f64() * 1_000.0
28            )
29        }
30    }
31}