#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum MeasurementError {
RetryExhausted,
SyscallFailed,
NonFinite,
}
impl std::fmt::Display for MeasurementError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::RetryExhausted => write!(
f,
"PMU counter seqlock retry limit exceeded - system under extreme load"
),
Self::SyscallFailed => write!(f, "perf_event syscall failed"),
Self::NonFinite => write!(f, "measurement produced non-finite value (NaN/Inf)"),
}
}
}
impl std::error::Error for MeasurementError {}
pub type MeasurementResult = Result<u64, MeasurementError>;