pub struct Benchmark { /* private fields */ }
Expand description
Structure representing a benchmark (or group of benchmarks) which takes no parameters.
Implementations§
Source§impl Benchmark
impl Benchmark
Sourcepub fn sample_size(self, n: usize) -> Self
pub fn sample_size(self, n: usize) -> Self
Changes the size of the sample for this benchmark
A bigger sample should yield more accurate results if paired with a sufficiently large measurement time.
Sample size must be at least 2.
§Panics
Panics if set to zero or one.
Sourcepub fn warm_up_time(self, dur: Duration) -> Self
pub fn warm_up_time(self, dur: Duration) -> Self
Sourcepub fn measurement_time(self, dur: Duration) -> Self
pub fn measurement_time(self, dur: Duration) -> Self
Changes the target measurement time for this benchmark. Criterion will attempt to spent approximately this amount of time measuring the benchmark. With a longer time, the measurement will become more resilient to transitory peak loads caused by external programs.
§Panics
Panics if the input duration in zero
Sourcepub fn nresamples(self, n: usize) -> Self
pub fn nresamples(self, n: usize) -> Self
Sourcepub fn noise_threshold(self, threshold: f64) -> Self
pub fn noise_threshold(self, threshold: f64) -> Self
Changes the noise threshold for this benchmark
This threshold is used to decide if an increase of X%
in the execution time is considered
significant or should be flagged as noise
Note: A value of 0.02
is equivalent to 2%
§Panics
Panics is the threshold is set to a negative value
Sourcepub fn confidence_level(self, cl: f64) -> Self
pub fn confidence_level(self, cl: f64) -> Self
Changes the confidence level for this benchmark
The confidence level is used to calculate the confidence intervals of the estimated statistics
§Panics
Panics if the confidence level is set to a value outside the (0, 1)
range
Sourcepub fn significance_level(self, sl: f64) -> Self
pub fn significance_level(self, sl: f64) -> Self
Changes the significance level for this benchmark
The significance level is used for hypothesis testing
§Panics
Panics if the significance level is set to a value outside the (0, 1)
range
Sourcepub fn plot_config(self, new_config: PlotConfiguration) -> Self
pub fn plot_config(self, new_config: PlotConfiguration) -> Self
Changes the plot configuration for this benchmark.
Sourcepub fn new<S, F>(id: S, f: F) -> Benchmark
pub fn new<S, F>(id: S, f: F) -> Benchmark
Create a new benchmark group and adds the given function to it.
§Example
fn bench(c: &mut Criterion) {
// One-time setup goes here
c.bench(
"my_group",
Benchmark::new("my_function", |b| b.iter(|| {
// Code to benchmark goes here
})),
);
}
criterion_group!(benches, bench);
criterion_main!(benches);
Sourcepub fn new_external<S>(id: S, program: Command) -> Benchmark
👎Deprecated since 0.2.6: External program benchmarks were rarely used and are awkward to maintain, so they are scheduled for deletion in 0.3.0
pub fn new_external<S>(id: S, program: Command) -> Benchmark
Create a new benchmark group and add the given program to it.
The external program must:
- Read the number of iterations from stdin
- Execute the routine to benchmark that many times
- Print the elapsed time (in nanoseconds) to stdout
// Example of an external program that implements this protocol
fn main() {
let stdin = io::stdin();
let ref mut stdin = stdin.lock();
// For each line in stdin
for line in stdin.lines() {
// Parse line as the number of iterations
let iters: u64 = line.unwrap().trim().parse().unwrap();
// Setup
// Benchmark
let start = Instant::now();
// Execute the routine "iters" times
for _ in 0..iters {
// Code to benchmark goes here
}
let elapsed = start.elapsed();
// Teardown
// Report elapsed time in nanoseconds to stdout
println!("{}", elapsed.to_nanos());
}
}
Sourcepub fn with_function<S, F>(self, id: S, f: F) -> Benchmark
pub fn with_function<S, F>(self, id: S, f: F) -> Benchmark
Add a function to the benchmark group.
§Example:
Benchmark::new("return 10", |b| b.iter(|| 10))
.with_function("return 20", |b| b.iter(|| 20));
Sourcepub fn with_program<S>(self, id: S, program: Command) -> Benchmark
👎Deprecated since 0.2.6: External program benchmarks were rarely used and are awkward to maintain, so they are scheduled for deletion in 0.3.0
pub fn with_program<S>(self, id: S, program: Command) -> Benchmark
Add an external program to the benchmark group.
§Example:
Benchmark::new("internal", |b| b.iter(|| 10))
.with_program("external", Command::new("my_external_benchmark"));
Sourcepub fn throughput(self, throughput: Throughput) -> Benchmark
pub fn throughput(self, throughput: Throughput) -> Benchmark
Set the input size for this benchmark group. Used for reporting the throughput.
Benchmark::new("strlen", |b| b.iter(|| "foo".len()))
.throughput(Throughput::Bytes(3));