blob: 1494863392e7b6c1caa42dc8579d58ccba4fee72 [file] [log] [blame] [edit]
use std::fs::File;
use std::io::{self, BufReader, Read};
use criterion::*;
use inferno::flamegraph::{self, Options};
fn flamegraph_benchmark(c: &mut Criterion, id: &str, infile: &str, mut opt: Options<'static>) {
let mut f = File::open(infile).expect("file not found");
let mut bytes = Vec::new();
f.read_to_end(&mut bytes).expect("Could not read file");
let mut group = c.benchmark_group(id);
group
.bench_with_input("flamegraph", &bytes, move |b, data| {
b.iter(|| {
let reader = BufReader::new(data.as_slice());
let _folder = flamegraph::from_reader(&mut opt, reader, io::sink());
})
})
.throughput(Throughput::Bytes(bytes.len() as u64));
group.finish();
}
macro_rules! flamegraph_benchmarks {
($($name:ident : ($infile:expr, $opt:expr)),*) => {
$(
fn $name(c: &mut Criterion) {
let id = stringify!($name);
flamegraph_benchmark(c, id, $infile, $opt);
}
)*
criterion_group!(benches, $($name),*);
criterion_main!(benches);
}
}
flamegraph_benchmarks! {
flamegraph: ("tests/data/collapse-perf/results/example-perf-stacks-collapsed.txt",
{ let mut opt = Options::default(); opt.reverse_stack_order = true; opt })
}