use std::time::Duration;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub struct ParserPerfStats {
pub access_unit_total: Duration,
pub substream_directories: Duration,
pub substream_segments: Duration,
pub substream_segment_blocks: Duration,
pub substream_segment_tail: Duration,
pub extra_data: Duration,
pub block_header_setup: Duration,
pub block_bypassed_lsb: Duration,
pub block_huffman_decode: Duration,
pub block_checks: Duration,
}
#[cfg(feature = "perf")]
#[derive(Clone, Copy)]
pub struct Timer(std::time::Instant);
#[cfg(not(feature = "perf"))]
#[derive(Clone, Copy)]
pub struct Timer;
impl Timer {
#[inline(always)]
pub fn start() -> Self {
#[cfg(feature = "perf")]
{
Timer(std::time::Instant::now())
}
#[cfg(not(feature = "perf"))]
{
Timer
}
}
#[inline(always)]
pub fn record(self, slot: &mut Duration) {
#[cfg(feature = "perf")]
{
*slot += self.0.elapsed();
}
#[cfg(not(feature = "perf"))]
{
let _ = slot;
}
}
}