use std::sync::atomic::{AtomicU64, Ordering};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct CacheStats {
pub hits: u64,
pub misses: u64,
pub inserts: u64,
pub capacity_evictions: u64,
pub invalidations: u64,
pub single_flight_joins: u64,
pub single_flight_errors: u64,
}
#[derive(Default)]
pub(crate) struct CacheCounters {
pub(crate) hits: AtomicU64,
pub(crate) misses: AtomicU64,
pub(crate) inserts: AtomicU64,
pub(crate) capacity_evictions: AtomicU64,
pub(crate) invalidations: AtomicU64,
pub(crate) single_flight_joins: AtomicU64,
pub(crate) single_flight_errors: AtomicU64,
}
impl CacheCounters {
pub(crate) fn snapshot(&self) -> CacheStats {
CacheStats {
hits: self.hits.load(Ordering::Relaxed),
misses: self.misses.load(Ordering::Relaxed),
inserts: self.inserts.load(Ordering::Relaxed),
capacity_evictions: self.capacity_evictions.load(Ordering::Relaxed),
invalidations: self.invalidations.load(Ordering::Relaxed),
single_flight_joins: self.single_flight_joins.load(Ordering::Relaxed),
single_flight_errors: self.single_flight_errors.load(Ordering::Relaxed),
}
}
pub(crate) fn reset(&self) {
self.hits.store(0, Ordering::Relaxed);
self.misses.store(0, Ordering::Relaxed);
self.inserts.store(0, Ordering::Relaxed);
self.capacity_evictions.store(0, Ordering::Relaxed);
self.invalidations.store(0, Ordering::Relaxed);
self.single_flight_joins.store(0, Ordering::Relaxed);
self.single_flight_errors.store(0, Ordering::Relaxed);
}
}