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}