Skip to content

Commit a987a52

Browse files
authored
Merge pull request #1464 from rust-lang/runtime-define-benchmark
Use a macro for defining benchmarks
2 parents 151c91a + 2df61ca commit a987a52

File tree

4 files changed

+57
-34
lines changed

4 files changed

+57
-34
lines changed

collector/benchlib/src/benchmark.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,24 @@ fn run_benchmark(args: BenchmarkArgs, benchmarks: BenchmarkMap) -> anyhow::Resul
8989
Ok(())
9090
}
9191

92+
/// Adds a single benchmark to the benchmark suite.
93+
/// ```ignore
94+
/// use benchlib::define_benchmark;
95+
///
96+
/// define_benchmark!(suite, my_bench, {
97+
/// || do_something()
98+
/// });
99+
/// ```
100+
#[macro_export]
101+
macro_rules! define_benchmark {
102+
($suite:expr, $name:ident, $fun:expr) => {
103+
let func = move || $fun;
104+
$suite.register(stringify!($name), func);
105+
};
106+
}
107+
108+
pub use define_benchmark;
109+
92110
/// Tests if the name of the benchmark passes through the include and exclude filter flags.
93111
fn passes_filter(name: &str, exclude: Option<&str>, include: Option<&str>) -> bool {
94112
match (exclude, include) {
Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
1-
use benchlib::benchmark::{black_box, BenchmarkSuite};
2-
use snap::{read::FrameDecoder, write::FrameEncoder};
31
use std::io::{BufRead, BufReader, Write};
42

3+
use snap::{read::FrameDecoder, write::FrameEncoder};
4+
5+
use benchlib::benchmark::{benchmark_suite, black_box};
6+
use benchlib::define_benchmark;
7+
58
const BYTES: usize = 64 * 1024 * 1024;
69

710
fn main() {
8-
let mut suite = BenchmarkSuite::new();
9-
1011
// Inspired by https://github.com/rust-lang/rust/issues/102727
1112
// The pattern we want is a BufReader which wraps a Read impl where one Read::read call will
1213
// never fill the whole BufReader buffer.
13-
suite.register("bufreader-snappy", || {
14-
let data = vec![0u8; BYTES];
15-
move || {
16-
let mut compressed = Vec::new();
17-
FrameEncoder::new(&mut compressed)
18-
.write_all(&data[..])
19-
.unwrap();
20-
let mut reader = BufReader::with_capacity(BYTES, FrameDecoder::new(&compressed[..]));
14+
benchmark_suite(|suite| {
15+
define_benchmark!(suite, bufreader_snappy, {
16+
let data = vec![0u8; BYTES];
17+
move || {
18+
let mut compressed = Vec::new();
19+
FrameEncoder::new(&mut compressed)
20+
.write_all(&data[..])
21+
.unwrap();
22+
let mut reader =
23+
BufReader::with_capacity(BYTES, FrameDecoder::new(&compressed[..]));
2124

22-
while let Ok(buf) = reader.fill_buf() {
23-
if buf.is_empty() {
24-
break;
25+
while let Ok(buf) = reader.fill_buf() {
26+
if buf.is_empty() {
27+
break;
28+
}
29+
black_box(buf);
30+
let len = buf.len();
31+
reader.consume(len);
2532
}
26-
black_box(buf);
27-
let len = buf.len();
28-
reader.consume(len);
2933
}
30-
}
34+
});
3135
});
32-
33-
suite.run().unwrap();
3436
}
Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
use benchlib;
2-
use benchlib::benchmark::BenchmarkSuite;
2+
use benchlib::benchmark::benchmark_suite;
3+
use benchlib::define_benchmark;
34

45
fn main() {
5-
let mut suite = BenchmarkSuite::new();
6-
7-
/// Measures how long does it take to insert 10 thousand numbers into a `hashbrown` hashmap.
8-
suite.register("hashmap-insert-10k", || {
9-
let mut map =
10-
hashbrown::HashMap::with_capacity_and_hasher(10000, fxhash::FxBuildHasher::default());
11-
move || {
12-
for index in 0..10000 {
13-
map.insert(index, index);
6+
benchmark_suite(|suite| {
7+
// Measures how long does it take to insert 10 thousand numbers into a `hashbrown` hashmap.
8+
define_benchmark!(suite, hashmap_insert_10k, {
9+
let mut map = hashbrown::HashMap::with_capacity_and_hasher(
10+
10000,
11+
fxhash::FxBuildHasher::default(),
12+
);
13+
move || {
14+
for index in 0..10000 {
15+
map.insert(index, index);
16+
}
1417
}
15-
}
18+
});
1619
});
17-
suite.run().unwrap();
1820
}

collector/runtime-benchmarks/nbody/src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
//! Code taken from https://github.com/prestontw/rust-nbody
33
44
use benchlib::benchmark::benchmark_suite;
5+
use benchlib::define_benchmark;
56

67
mod nbody;
78

89
fn main() {
910
benchmark_suite(|suite| {
10-
suite.register("nbody-10k", || {
11+
define_benchmark!(suite, nbody_10k, {
1112
let mut nbody_10k = nbody::init(10000);
1213
|| {
1314
for _ in 0..10 {

0 commit comments

Comments
 (0)