use std::sync::OnceLock;
use std::time::Instant;
pub trait MonotonicTimer: std::fmt::Debug + Send + Sync {
fn monotonic_now_ms(&self) -> u64;
}
#[derive(Debug, Default)]
pub struct StdMonotonicTimer {
origin: OnceLock<Instant>,
}
impl MonotonicTimer for StdMonotonicTimer {
fn monotonic_now_ms(&self) -> u64 {
#[allow(clippy::disallowed_methods)]
let now = Instant::now();
let origin = self.origin.get_or_init(|| now);
u64::try_from(now.saturating_duration_since(*origin).as_millis()).unwrap_or(u64::MAX)
}
}