use criterion::{black_box, criterion_group, criterion_main, Criterion};
use mindfry::stability::{
ExhaustionLevel, ExhaustionMonitor, RecoveryAnalyzer, RecoveryState, ShutdownMarker,
WarmupTracker,
};
fn bench_recovery_analyzer_new(c: &mut Criterion) {
let marker = Some(ShutdownMarker::graceful());
c.bench_function("recovery_analyzer_new", |b| {
b.iter(|| black_box(RecoveryAnalyzer::new(marker.clone())))
});
}
fn bench_recovery_analyzer_analyze(c: &mut Criterion) {
let marker = Some(ShutdownMarker::graceful());
let analyzer = RecoveryAnalyzer::new(marker);
c.bench_function("recovery_analyzer_analyze", |b| {
b.iter(|| black_box(analyzer.analyze()))
});
}
fn bench_recovery_state_intensity(c: &mut Criterion) {
c.bench_function("recovery_state_intensity", |b| {
b.iter(|| {
black_box(RecoveryState::Normal.intensity());
black_box(RecoveryState::Shock.intensity());
black_box(RecoveryState::Coma.intensity());
})
});
}
fn bench_warmup_tracker_new(c: &mut Criterion) {
c.bench_function("warmup_tracker_new", |b| {
b.iter(|| black_box(WarmupTracker::new()))
});
}
fn bench_warmup_tracker_is_ready(c: &mut Criterion) {
let tracker = WarmupTracker::new();
c.bench_function("warmup_tracker_is_ready", |b| {
b.iter(|| black_box(tracker.is_ready()))
});
}
fn bench_warmup_tracker_state(c: &mut Criterion) {
let tracker = WarmupTracker::new();
c.bench_function("warmup_tracker_state", |b| {
b.iter(|| black_box(tracker.state()))
});
}
fn bench_warmup_tracker_clone(c: &mut Criterion) {
let tracker = WarmupTracker::new();
c.bench_function("warmup_tracker_clone", |b| {
b.iter(|| black_box(tracker.clone()))
});
}
fn bench_exhaustion_level_from_energy(c: &mut Criterion) {
c.bench_function("exhaustion_level_from_energy", |b| {
b.iter(|| {
black_box(ExhaustionLevel::from_energy(0.9));
black_box(ExhaustionLevel::from_energy(0.5));
black_box(ExhaustionLevel::from_energy(0.1));
})
});
}
fn bench_exhaustion_allows_writes(c: &mut Criterion) {
c.bench_function("exhaustion_allows_writes", |b| {
b.iter(|| {
black_box(ExhaustionLevel::Normal.allows_writes());
black_box(ExhaustionLevel::Elevated.allows_writes());
black_box(ExhaustionLevel::Exhausted.allows_writes());
black_box(ExhaustionLevel::Emergency.allows_writes());
})
});
}
fn bench_exhaustion_monitor_default(c: &mut Criterion) {
c.bench_function("exhaustion_monitor_new", |b| {
b.iter(|| black_box(ExhaustionMonitor::default()))
});
}
criterion_group!(
benches,
bench_recovery_analyzer_new,
bench_recovery_analyzer_analyze,
bench_recovery_state_intensity,
bench_warmup_tracker_new,
bench_warmup_tracker_is_ready,
bench_warmup_tracker_state,
bench_warmup_tracker_clone,
bench_exhaustion_level_from_energy,
bench_exhaustion_allows_writes,
bench_exhaustion_monitor_default,
);
criterion_main!(benches);