benchmarking/
measure_result.rs

1use std::time::Duration;
2
3/// The result of measurement.
4#[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    /// Determine how long does an iteration take on average.
29    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    /// Determine how many iterations can be executed within one second.
41    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    /// Get how many times the measurements has been executed.
47    pub fn times(&self) -> u128 {
48        self.times
49    }
50
51    #[inline]
52    /// Get how long has all measurements elapsed.
53    pub fn total_elapsed(&self) -> Duration {
54        self.total_elapsed
55    }
56}