benchmarking/
measure_result.rs1use std::time::Duration;
2
3#[derive(Debug, Clone)]
5pub struct MeasureResult {
6 pub(crate) times: u128,
7 pub(crate) total_elapsed: Duration,
8}
9
10unsafe impl Sync for MeasureResult {}
11
12impl MeasureResult {
13 #[inline]
14 pub(crate) fn new(elapsed: Duration) -> MeasureResult {
15 MeasureResult {
16 times: 1, total_elapsed: elapsed
17 }
18 }
19
20 #[inline]
21 pub(crate) fn empty() -> MeasureResult {
22 MeasureResult {
23 times: 0, total_elapsed: Duration::from_secs(0)
24 }
25 }
26
27 #[inline]
28 pub fn elapsed(&self) -> Duration {
30 let nano_secs = self.total_elapsed.as_nanos() / self.times;
31
32 let secs = (nano_secs / 1_000_000_000) as u64;
33
34 let nano_secs = (nano_secs % 1_000_000_000) as u32;
35
36 Duration::new(secs, nano_secs)
37 }
38
39 #[inline]
40 pub fn speed(&self) -> f64 {
42 (self.times as f64 / self.total_elapsed.as_nanos() as f64) * 1_000_000_000.0
43 }
44
45 #[inline]
46 pub fn times(&self) -> u128 {
48 self.times
49 }
50
51 #[inline]
52 pub fn total_elapsed(&self) -> Duration {
54 self.total_elapsed
55 }
56}