Add profiling flamegraphs with pprof
This commit is contained in:
@@ -1,21 +1,34 @@
|
||||
use criterion::{Criterion, criterion_group, criterion_main};
|
||||
use pprof::criterion::{Output, PProfProfiler};
|
||||
|
||||
const PPROF_SAMPLING_FREQ_HZ: i32 = 997;
|
||||
|
||||
macro_rules! bench_days {
|
||||
($($day_num:literal => $day_mod:ident),* $(,)?) => {
|
||||
$(
|
||||
use aoc::$day_mod;
|
||||
mod $day_mod {
|
||||
use super::*;
|
||||
use aoc::$day_mod;
|
||||
|
||||
fn $day_mod(c: &mut Criterion) {
|
||||
c.bench_function(concat!(stringify!($day_mod), " part1"), |b| {
|
||||
b.iter(|| $day_mod::part1($day_mod::INPUT))
|
||||
});
|
||||
c.bench_function(concat!(stringify!($day_mod), " part2"), |b| {
|
||||
b.iter(|| $day_mod::part2($day_mod::INPUT))
|
||||
});
|
||||
pub fn part1(c: &mut Criterion) {
|
||||
c.bench_function(concat!(stringify!($day_mod), " part1"), |b| {
|
||||
b.iter(|| $day_mod::part1($day_mod::INPUT))
|
||||
});
|
||||
}
|
||||
|
||||
pub fn part2(c: &mut Criterion) {
|
||||
c.bench_function(concat!(stringify!($day_mod), " part2"), |b| {
|
||||
b.iter(|| $day_mod::part2($day_mod::INPUT))
|
||||
});
|
||||
}
|
||||
}
|
||||
)*
|
||||
|
||||
criterion_group!(benches, $($day_mod),*);
|
||||
criterion_group! {
|
||||
name = benches;
|
||||
config = Criterion::default().with_profiler(PProfProfiler::new(PPROF_SAMPLING_FREQ_HZ, Output::Flamegraph(None)));
|
||||
targets = $($day_mod::part1, $day_mod::part2),*
|
||||
}
|
||||
criterion_main!(benches);
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user