Skip to content

Commit 5d291fd

Browse files
committed
Add benchmarks for timers (#113)
1 parent 174da0b commit 5d291fd

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ exclude = ["/.*"]
1818
name = "io"
1919
harness = false
2020

21+
[[bench]]
22+
name = "timer"
23+
harness = false
24+
2125
[dependencies]
2226
async-lock = "2.6"
2327
cfg-if = "1"
@@ -37,7 +41,7 @@ autocfg = "1"
3741
async-channel = "1"
3842
async-net = "1"
3943
blocking = "1"
40-
criterion = "0.4"
44+
criterion = { version = "0.4", default-features = false, features = ["cargo_bench_support"] }
4145
getrandom = "0.2.7"
4246
signal-hook = "0.3"
4347
tempfile = "3"

benches/timer.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//! Benchmarks for registering timers.
2+
3+
use async_io::Timer;
4+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
5+
use futures_lite::future;
6+
use std::time::Duration;
7+
8+
/// Create a new `Timer` and poll it once to register it into the timer wheel.
9+
fn make_timer() -> Timer {
10+
let mut timer = Timer::after(Duration::from_secs(1));
11+
future::block_on(future::poll_once(&mut timer));
12+
timer
13+
}
14+
15+
/// Benchmark the time it takes to register and deregister a timer.
16+
fn register_timer(c: &mut Criterion) {
17+
let mut group = c.benchmark_group("register_timer");
18+
for prev_timer_count in [0, 1_000_000] {
19+
// Add timers to the timer wheel.
20+
let mut timers = Vec::new();
21+
for _ in 0..prev_timer_count {
22+
timers.push(make_timer());
23+
}
24+
25+
// Benchmark registering a timer.
26+
group.bench_function(
27+
format!("register_timer.({} previous timers)", prev_timer_count),
28+
|b| {
29+
b.iter(|| {
30+
let timer = make_timer();
31+
black_box(timer);
32+
});
33+
},
34+
);
35+
}
36+
}
37+
38+
criterion_group!(benches, register_timer);
39+
criterion_main!(benches);

0 commit comments

Comments
 (0)