use std::sync::atomic::{AtomicU64, Ordering};
pub(crate) static VIEW_RENDER_COUNT: AtomicU64 = AtomicU64::new(0);
pub(crate) static VIEW_RENDER_NS: AtomicU64 = AtomicU64::new(0);
pub(crate) static COMPUTE_LAYOUT_NS: AtomicU64 = AtomicU64::new(0);
pub(crate) static PAINT_NS: AtomicU64 = AtomicU64::new(0);
pub(crate) static PRESENT_NS: AtomicU64 = AtomicU64::new(0);
pub fn view_render_count() -> u64 {
VIEW_RENDER_COUNT.load(Ordering::Relaxed)
}
pub fn view_render_ns() -> u64 {
VIEW_RENDER_NS.load(Ordering::Relaxed)
}
pub fn compute_layout_ns() -> u64 {
COMPUTE_LAYOUT_NS.load(Ordering::Relaxed)
}
pub fn paint_ns() -> u64 {
PAINT_NS.load(Ordering::Relaxed)
}
pub fn present_ns() -> u64 {
PRESENT_NS.load(Ordering::Relaxed)
}
pub fn reset_counters() {
VIEW_RENDER_COUNT.store(0, Ordering::Relaxed);
VIEW_RENDER_NS.store(0, Ordering::Relaxed);
COMPUTE_LAYOUT_NS.store(0, Ordering::Relaxed);
PAINT_NS.store(0, Ordering::Relaxed);
PRESENT_NS.store(0, Ordering::Relaxed);
}
#[inline]
pub(crate) fn record_view_render(d: std::time::Duration) {
VIEW_RENDER_COUNT.fetch_add(1, Ordering::Relaxed);
VIEW_RENDER_NS.fetch_add(d.as_nanos() as u64, Ordering::Relaxed);
}
#[inline]
pub(crate) fn record_layout(d: std::time::Duration) {
COMPUTE_LAYOUT_NS.fetch_add(d.as_nanos() as u64, Ordering::Relaxed);
}
#[inline]
pub(crate) fn record_paint(d: std::time::Duration) {
PAINT_NS.fetch_add(d.as_nanos() as u64, Ordering::Relaxed);
}
#[inline]
pub(crate) fn record_present(d: std::time::Duration) {
PRESENT_NS.fetch_add(d.as_nanos() as u64, Ordering::Relaxed);
}