batpak_bench_support/
lib.rs1use 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}