use crate::{
alloc::{AllocOpMap, AllocTally},
counter::{KnownCounterKind, MaxCountUInt},
time::FineDuration,
};
mod sample;
pub(crate) use sample::*;
pub(crate) struct Stats {
pub sample_count: u32,
pub iter_count: u64,
pub time: StatsSet<FineDuration>,
pub alloc_tallies: AllocOpMap<AllocTally<StatsSet<f64>>>,
pub counts: [Option<StatsSet<MaxCountUInt>>; KnownCounterKind::COUNT],
}
impl Stats {
pub fn get_counts(&self, counter_kind: KnownCounterKind) -> Option<&StatsSet<MaxCountUInt>> {
self.counts[counter_kind as usize].as_ref()
}
}
#[derive(Debug)]
pub(crate) struct StatsSet<T> {
pub fastest: T,
pub slowest: T,
pub median: T,
pub mean: T,
}
impl StatsSet<f64> {
pub fn is_zero(&self) -> bool {
self.fastest == 0.0 && self.slowest == 0.0 && self.median == 0.0 && self.mean == 0.0
}
}