use std::sync::atomic::{AtomicU64, Ordering};
#[derive(Clone, Debug, Default, serde::Serialize)]
pub struct Statistics {
pub native_graphs_prepared: u64,
pub copy_streams_created: u64,
pub allocations: u64,
pub imports: u64,
pub submissions: u64,
pub completions: u64,
pub copied_bytes: u64,
pub uploaded_bytes: u64,
pub downloaded_bytes: u64,
pub device_copied_bytes: u64,
pub cache_maintenance_bytes: u64,
pub live_bytes: u64,
pub peak_bytes: u64,
}
#[derive(Default)]
pub(super) struct Counters {
pub native_graphs_prepared: AtomicU64,
pub copy_streams_created: AtomicU64,
pub allocations: AtomicU64,
pub imports: AtomicU64,
pub submissions: AtomicU64,
pub completions: AtomicU64,
pub copied_bytes: AtomicU64,
pub lane_copy_bytes: [AtomicU64; 3],
pub cache_maintenance_bytes: AtomicU64,
pub live_bytes: AtomicU64,
pub peak_bytes: AtomicU64,
}
impl Counters {
pub fn snapshot(&self) -> Statistics {
Statistics {
native_graphs_prepared: self.native_graphs_prepared.load(Ordering::Relaxed),
copy_streams_created: self.copy_streams_created.load(Ordering::Relaxed),
allocations: self.allocations.load(Ordering::Relaxed),
imports: self.imports.load(Ordering::Relaxed),
submissions: self.submissions.load(Ordering::Relaxed),
completions: self.completions.load(Ordering::Relaxed),
copied_bytes: self.copied_bytes.load(Ordering::Relaxed),
uploaded_bytes: self.lane_copy_bytes[0].load(Ordering::Relaxed),
device_copied_bytes: self.lane_copy_bytes[1].load(Ordering::Relaxed),
downloaded_bytes: self.lane_copy_bytes[2].load(Ordering::Relaxed),
cache_maintenance_bytes: self.cache_maintenance_bytes.load(Ordering::Relaxed),
live_bytes: self.live_bytes.load(Ordering::Relaxed),
peak_bytes: self.peak_bytes.load(Ordering::Relaxed),
}
}
}