pub struct CriterionCycleCounter;
Expand description
Custom cycle accurate measurement class for criterion
pub fn criterion_benchmark(c: &mut Criterion<CriterionCycleCounter>) {
c.bench_function("cycle_10K", |b| b.iter(|| const_cycle_loop(black_box(10_000))));
}
fn core_cycle_measurement() -> Criterion<CriterionCycleCounter> {
Criterion::default().with_measurement(CriterionCycleCounter)
}
criterion_group! {
name = benches;
config = core_cycle_measurement();
targets = criterion_benchmark
}
Trait Implementations§
Source§impl Measurement for CriterionCycleCounter
impl Measurement for CriterionCycleCounter
Source§type Intermediate = CycleInstant
type Intermediate = CycleInstant
This type represents an intermediate value for the measurements. It will be produced by the
start function and passed to the end function. An example might be the wall-clock time as
of the
start
call.Source§type Value = u64
type Value = u64
This type is the measured value. An example might be the elapsed wall-clock time between the
start
and end
calls.Source§fn start(&self) -> Self::Intermediate
fn start(&self) -> Self::Intermediate
Criterion.rs will call this before iterating the benchmark.
Source§fn end(&self, i: Self::Intermediate) -> Self::Value
fn end(&self, i: Self::Intermediate) -> Self::Value
Criterion.rs will call this after iterating the benchmark to get the measured value.
Source§fn add(&self, v1: &Self::Value, v2: &Self::Value) -> Self::Value
fn add(&self, v1: &Self::Value, v2: &Self::Value) -> Self::Value
Combine two values. Criterion.rs sometimes needs to perform measurements in multiple batches
of iterations, so the value from one batch must be added to the sum of the previous batches.
Source§fn zero(&self) -> Self::Value
fn zero(&self) -> Self::Value
Return a “zero” value for the Value type which can be added to another value.
Source§fn to_f64(&self, val: &Self::Value) -> f64
fn to_f64(&self, val: &Self::Value) -> f64
Converts the measured value to f64 so that it can be used in statistical analysis.
Source§fn formatter(&self) -> &dyn ValueFormatter
fn formatter(&self) -> &dyn ValueFormatter
Return a trait-object reference to the value formatter for this measurement.
Source§impl ValueFormatter for CriterionCycleCounter
impl ValueFormatter for CriterionCycleCounter
Source§fn format_value(&self, value: f64) -> String
fn format_value(&self, value: f64) -> String
Format the value (with appropriate unit) and return it as a string.
Source§fn format_throughput(&self, throughput: &Throughput, value: f64) -> String
fn format_throughput(&self, throughput: &Throughput, value: f64) -> String
Format the value as a throughput measurement. The value represents the measurement value;
the implementor will have to calculate bytes per second, iterations per cycle, etc.
Source§fn scale_values(&self, _typical_value: f64, _values: &mut [f64]) -> &'static str
fn scale_values(&self, _typical_value: f64, _values: &mut [f64]) -> &'static str
Scale the given values to some appropriate unit and return the unit string. Read more
Source§fn scale_throughputs(
&self,
_typical_value: f64,
throughput: &Throughput,
_values: &mut [f64],
) -> &'static str
fn scale_throughputs( &self, _typical_value: f64, throughput: &Throughput, _values: &mut [f64], ) -> &'static str
Convert the given measured values into throughput numbers based on the given throughput
value, scale them to some appropriate unit, and return the unit string. Read more
Auto Trait Implementations§
impl Freeze for CriterionCycleCounter
impl RefUnwindSafe for CriterionCycleCounter
impl Send for CriterionCycleCounter
impl Sync for CriterionCycleCounter
impl Unpin for CriterionCycleCounter
impl UnwindSafe for CriterionCycleCounter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more