perf_count/
lib.rs

1pub mod error;
2pub mod event;
3
4pub use crate::error::PerfCounterBuilderError;
5use crate::event::Event;
6use cfg_if::cfg_if;
7pub use error::PerfCounterError;
8
9cfg_if! {
10    if #[cfg(target_os="macos")] {
11        mod mac_perf;
12        pub type PerfCounter = mac_perf::MacCounter;
13        pub type PerfCounterBuilder = mac_perf::MacCounterBuilder;
14    } else if #[cfg(target_os="linux")] {
15        mod linux_perf;
16        pub type PerfCounter = linux_perf::LinuxCounter;
17        pub type PerfCounterBuilder = linux_perf::LinuxCounterBuilder;
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn test_cycle_counter() {
27        let builder = PerfCounterBuilder::new();
28        let x = builder.set_target_event(Event::CPUCycles).unwrap();
29        let mut counter = x.build().unwrap();
30        counter.start().expect("Couldn't start counter");
31        counter.stop().expect("Couldn't stop counter");
32        let result = counter.read().expect("Couldn't read counter");
33        assert_ne!(result, 0, "Cycle count shouldn't be zero");
34    }
35
36    #[test]
37    fn test_unimplemented_counter() {
38        let builder = PerfCounterBuilder::new();
39        let x = builder.set_target_event(Event::CacheReferences).unwrap();
40        let mut counter = x.build().unwrap();
41        counter.start().expect("Couldn't start counter");
42        counter.stop().expect("Couldn't stop counter");
43        let result = counter.read().expect("Couldn't read counter");
44        assert_ne!(result, 0, "Cycle count shouldn't be zero");
45    }
46}