Skip to main content

batpak_bench_support/
lib.rs

1use criterion::measurement::WallTime;
2use criterion::{BenchmarkGroup, SamplingMode, Throughput};
3use std::time::Duration;
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
6pub enum BenchProfile {
7    Quick,
8    QuickWarm,
9    Heavy,
10    Massive,
11}
12
13pub fn apply_profile(group: &mut BenchmarkGroup<'_, WallTime>, profile: BenchProfile) {
14    group.noise_threshold(0.03);
15    group.significance_level(0.05);
16    match profile {
17        BenchProfile::Quick => {
18            group.sample_size(50);
19            group.warm_up_time(Duration::from_secs(2));
20            group.measurement_time(Duration::from_secs(8));
21            group.sampling_mode(SamplingMode::Auto);
22        }
23        BenchProfile::QuickWarm => {
24            group.sample_size(30);
25            group.warm_up_time(Duration::from_secs(2));
26            group.measurement_time(Duration::from_secs(12));
27            group.sampling_mode(SamplingMode::Auto);
28        }
29        BenchProfile::Heavy => {
30            group.sample_size(10);
31            group.warm_up_time(Duration::from_secs(3));
32            group.measurement_time(Duration::from_secs(30));
33            group.sampling_mode(SamplingMode::Flat);
34        }
35        BenchProfile::Massive => {
36            group.sample_size(10);
37            group.warm_up_time(Duration::from_secs(3));
38            group.measurement_time(Duration::from_secs(120));
39            group.sampling_mode(SamplingMode::Flat);
40        }
41    }
42}
43
44pub fn profile_for_event_count(count: u64) -> BenchProfile {
45    match count {
46        0..=1_000 => BenchProfile::Quick,
47        1_001..=10_000 => BenchProfile::Heavy,
48        _ => BenchProfile::Massive,
49    }
50}
51
52pub fn throughput_elements(group: &mut BenchmarkGroup<'_, WallTime>, elements: u64) {
53    group.throughput(Throughput::Elements(elements));
54}