mirror of
https://github.com/Noratrieb/haesli.git
synced 2026-01-17 05:05:03 +01:00
benchmark and improve method parsing
This commit is contained in:
parent
186f744715
commit
45196c722c
10 changed files with 593 additions and 210 deletions
39
amqp_transport/benches/parser.rs
Normal file
39
amqp_transport/benches/parser.rs
Normal 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);
|
||||
Loading…
Add table
Add a link
Reference in a new issue