Sebastian Thielrefactor24a4d6b7 months agoHistory
76 lines · 1.8 KB · Rust
RawDownload
#[cfg(feature = "cache-efficiency-debug")]mod impl_ {    /// A helper to collect useful information about cache efficiency.    pub struct Debug {        owner: String,        hits: usize,        puts: usize,        misses: usize,    }     impl Debug {        /// Create a new instance        #[inline]        pub fn new(owner: String) -> Self {            Debug {                owner,                hits: 0,                puts: 0,                misses: 0,            }        }        /// Count cache insertions        #[inline]        pub fn put(&mut self) {            self.puts += 1;        }        /// Count hits        #[inline]        pub fn hit(&mut self) {            self.hits += 1;        }        /// Count misses        #[inline]        pub fn miss(&mut self) {            self.misses += 1;        }    }     impl Drop for Debug {        fn drop(&mut self) {            let hits = self.hits;            let misses = self.misses;            let ratio = hits as f32 / misses as f32;            eprintln!(                "{}[{:0x}]: {} / {} (hits/misses) = {:.02}%, puts = {}",                self.owner,                std::ptr::from_ref(self) as usize,                hits,                misses,                ratio * 100.0,                self.puts            );        }    }}#[cfg(not(feature = "cache-efficiency-debug"))]mod impl_ {    /// The disabled, zero size do-nothing equivalent    pub struct Debug;     impl Debug {        /// Create a new instance        #[inline]        pub fn new(_owner: String) -> Self {            Debug        }        /// noop        pub fn put(&mut self) {}        /// noop        pub fn hit(&mut self) {}        /// noop        pub fn miss(&mut self) {}    }} pub use impl_::Debug;