use age::{x25519, Decryptor, Encryptor};
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
#[cfg(unix)]
use pprof::criterion::{Output, PProfProfiler};
use std::io::Write;
fn bench(c: &mut Criterion) {
let recipients: Vec<_> = (0..10)
.map(|_| x25519::Identity::generate().to_public())
.collect();
let mut group = c.benchmark_group("header");
for count in 1..10 {
group.throughput(Throughput::Elements(count as u64));
group.bench_function(BenchmarkId::new("parse", count), |b| {
let mut encrypted = vec![];
let mut output =
Encryptor::with_recipients(recipients.iter().take(count).map(|r| r as _))
.unwrap()
.wrap_output(&mut encrypted)
.unwrap();
output.write_all(&[]).unwrap();
output.finish().unwrap();
b.iter(|| Decryptor::new_buffered(&encrypted[..]))
});
}
group.finish();
}
#[cfg(unix)]
criterion_group!(
name = benches;
config = Criterion::default()
.with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = bench
);
#[cfg(not(unix))]
criterion_group!(benches, bench);
criterion_main!(benches);