Skip to content

Commit d3001b0

Browse files
joaoantoniocardosoRaulTrombin
authored andcommitted
benches: Add bench_parser
1 parent e165ea1 commit d3001b0

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

benches/bench_parser.rs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
mod helper;
2+
3+
use bluerobotics_ping::{message::ProtocolMessage, Messages};
4+
use criterion::{
5+
black_box, criterion_group, criterion_main, AxisScale, BatchSize, BenchmarkId, Criterion,
6+
PlotConfiguration, Throughput,
7+
};
8+
use helper::protocol_message_from_messages;
9+
use rand::{rngs::StdRng, SeedableRng};
10+
11+
fn benchmark_protocol_message_to_messages(c: &mut Criterion) {
12+
let seed = 42;
13+
let mut rng: StdRng = SeedableRng::seed_from_u64(seed);
14+
15+
let mut group = c.benchmark_group("protocol_message_to_messages");
16+
group
17+
.measurement_time(std::time::Duration::from_secs(10))
18+
.significance_level(0.01)
19+
.sample_size(1000)
20+
.plot_config(PlotConfiguration::default().summary_scale(AxisScale::Logarithmic));
21+
22+
for messages_count in &vec![1, 100, 10000] {
23+
group.throughput(Throughput::Elements(*messages_count));
24+
25+
let protocol_messages = helper::create_random_messages(&mut rng, *messages_count as usize)
26+
.iter()
27+
.map(protocol_message_from_messages)
28+
.collect::<Vec<ProtocolMessage>>();
29+
30+
group.bench_function(BenchmarkId::new("sync", messages_count), |b| {
31+
b.to_async(&helper::rt()).iter_batched(
32+
|| protocol_messages.clone(),
33+
|protocol_messages| async move {
34+
for protocol_message in &protocol_messages {
35+
let _message = black_box(Messages::try_from(protocol_message).unwrap());
36+
}
37+
},
38+
BatchSize::SmallInput,
39+
)
40+
});
41+
}
42+
43+
group.finish();
44+
}
45+
46+
fn benchmark_messages_to_protocol_message(c: &mut Criterion) {
47+
let seed = 42;
48+
let mut rng: StdRng = SeedableRng::seed_from_u64(seed);
49+
50+
let mut group = c.benchmark_group("messages_to_protocol_message");
51+
group
52+
.measurement_time(std::time::Duration::from_secs(10))
53+
.significance_level(0.01)
54+
.sample_size(1000)
55+
.plot_config(PlotConfiguration::default().summary_scale(AxisScale::Logarithmic));
56+
57+
for messages_count in &vec![1, 100, 10000] {
58+
group.throughput(Throughput::Elements(*messages_count));
59+
60+
let messages = helper::create_random_messages(&mut rng, *messages_count as usize);
61+
62+
group.bench_function(BenchmarkId::new("sync", messages_count), |b| {
63+
b.to_async(&helper::rt()).iter_batched(
64+
|| messages.clone(),
65+
|messages| async move {
66+
for message in &messages {
67+
let _protocol_message = black_box(protocol_message_from_messages(message));
68+
}
69+
},
70+
BatchSize::SmallInput,
71+
)
72+
});
73+
}
74+
75+
group.finish();
76+
}
77+
78+
criterion_group!(
79+
benches,
80+
benchmark_protocol_message_to_messages,
81+
benchmark_messages_to_protocol_message
82+
);
83+
criterion_main!(benches);

0 commit comments

Comments
 (0)