benchmark and improve method parsing

This commit is contained in:
nora 2022-02-20 16:24:11 +01:00
parent 186f744715
commit 45196c722c
10 changed files with 593 additions and 210 deletions

View file

@ -0,0 +1,39 @@
use amqp_transport::methods;
use amqp_transport::methods::{Method, RandomMethod};
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use rand::SeedableRng;
fn random_method_from_seed(seed: u128) -> Method {
let mut rng = rand::rngs::StdRng::from_seed(
[seed.to_be_bytes(), seed.to_be_bytes()]
.concat()
.try_into()
.unwrap(),
);
Method::random(&mut rng)
}
fn serialize_method(method: Method) -> Vec<u8> {
let mut writer = Vec::new();
methods::write::write_method(method, &mut writer).unwrap();
writer
}
fn parse_method(c: &mut Criterion) {
let methods = (0..10000)
.map(random_method_from_seed)
.map(serialize_method)
.collect::<Vec<_>>();
c.bench_function("parse random methods", |b| {
b.iter(|| {
for data in &methods {
let result = methods::parse_method(black_box(data)).unwrap();
black_box(result);
}
})
});
}
criterion_group!(benches, parse_method);
criterion_main!(benches);