2019-12-19 14:11:11 -08:00
|
|
|
use criterion::{criterion_group, criterion_main, Criterion};
|
2019-09-28 00:48:43 -07:00
|
|
|
use rand_core::{OsRng, RngCore};
|
2021-03-04 13:23:24 -08:00
|
|
|
use zcash_primitives::sapling::pedersen_hash::{pedersen_hash, Personalization};
|
2018-07-25 13:46:00 -07:00
|
|
|
|
2021-08-05 14:21:56 -07:00
|
|
|
#[cfg(unix)]
|
|
|
|
use pprof::criterion::{Output, PProfProfiler};
|
|
|
|
|
2019-12-19 14:11:11 -08:00
|
|
|
fn bench_pedersen_hash(c: &mut Criterion) {
|
2019-08-06 02:46:40 -07:00
|
|
|
let rng = &mut OsRng;
|
2019-08-15 09:39:55 -07:00
|
|
|
let bits = (0..510)
|
|
|
|
.map(|_| (rng.next_u32() % 2) != 0)
|
|
|
|
.collect::<Vec<_>>();
|
2018-07-25 13:46:00 -07:00
|
|
|
let personalization = Personalization::MerkleTree(31);
|
|
|
|
|
2021-08-05 14:40:46 -07:00
|
|
|
c.bench_function("pedersen-hash", |b| {
|
2020-07-01 13:26:54 -07:00
|
|
|
b.iter(|| pedersen_hash(personalization, bits.clone()))
|
2019-12-19 14:11:11 -08:00
|
|
|
});
|
2018-07-25 13:46:00 -07:00
|
|
|
}
|
2019-12-19 14:11:11 -08:00
|
|
|
|
2021-08-05 14:21:56 -07:00
|
|
|
#[cfg(unix)]
|
|
|
|
criterion_group! {
|
|
|
|
name = benches;
|
|
|
|
config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
|
|
|
|
targets = bench_pedersen_hash
|
|
|
|
}
|
2021-08-05 15:22:12 -07:00
|
|
|
#[cfg(not(unix))]
|
2019-12-19 14:11:11 -08:00
|
|
|
criterion_group!(benches, bench_pedersen_hash);
|
|
|
|
criterion_main!(benches);
|