rlmesh-runtime 0.1.0-rc.1

Internal RLMesh crate (unstable Rust API): runtime driver for evaluation sessions.
Documentation
use std::time::Duration;

#[derive(Debug, Clone, Default)]
pub(crate) struct PhaseTiming {
    pub(crate) count: u64,
    pub(crate) total: Duration,
    pub(crate) min: Option<Duration>,
    pub(crate) max: Duration,
}

impl PhaseTiming {
    pub(crate) fn record(&mut self, duration: Duration) {
        self.count += 1;
        self.total += duration;
        self.min = Some(match self.min {
            Some(min) => min.min(duration),
            None => duration,
        });
        self.max = self.max.max(duration);
    }

    pub(crate) fn avg_ms(&self) -> f64 {
        if self.count == 0 {
            0.0
        } else {
            self.total.as_secs_f64() * 1000.0 / self.count as f64
        }
    }

    pub(crate) fn total_ms(&self) -> f64 {
        self.total.as_secs_f64() * 1000.0
    }

    pub(crate) fn min_ms(&self) -> f64 {
        self.min
            .map(|duration| duration.as_secs_f64() * 1000.0)
            .unwrap_or(0.0)
    }

    pub(crate) fn max_ms(&self) -> f64 {
        self.max.as_secs_f64() * 1000.0
    }
}