Skip to content

Commit ca39531

Browse files
committed
feat(criterion): support explicit lifetime for BenchmarkGroup
1 parent 487fdee commit ca39531

File tree

2 files changed

+45
-6
lines changed

2 files changed

+45
-6
lines changed

crates/criterion_compat/benches/test_benches.rs

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use codspeed_criterion_compat::{criterion_group, criterion_main, Bencher, BenchmarkId, Criterion};
1+
use codspeed_criterion_compat::{
2+
criterion_group, criterion_main, Bencher, BenchmarkGroup, BenchmarkId, Criterion,
3+
};
4+
use criterion::measurement::WallTime;
25

36
fn bench(c: &mut Criterion) {
47
// Setup (construct data, allocate memory, etc)
@@ -31,6 +34,25 @@ fn bench_with_explicit_lifetime(c: &mut Criterion) {
3134
);
3235
}
3336

37+
#[cfg(codspeed)]
38+
fn bench_using_group_without_explicit_measurement(c: &mut Criterion) {
39+
let mut group = c.benchmark_group("group");
40+
fn using_group(g: &mut BenchmarkGroup) {
41+
g.bench_function("bench_without_explicit_measurement", |b| b.iter(|| 2 + 2));
42+
}
43+
using_group(&mut group);
44+
group.finish();
45+
}
46+
47+
fn bench_using_group_with_explicit_measurement(c: &mut Criterion) {
48+
let mut group = c.benchmark_group("group");
49+
fn using_group(g: &mut BenchmarkGroup<'_, WallTime>) {
50+
g.bench_function("bench_explicit_measurement", |b| b.iter(|| 2 + 2));
51+
}
52+
using_group(&mut group);
53+
group.finish();
54+
}
55+
3456
mod nested {
3557
use super::*;
3658
pub fn bench(c: &mut Criterion) {
@@ -48,5 +70,22 @@ mod nested {
4870
}
4971
}
5072

51-
criterion_group!(benches, bench, bench_with_explicit_lifetime, nested::bench);
73+
criterion_group!(
74+
benches,
75+
bench,
76+
bench_with_explicit_lifetime,
77+
nested::bench,
78+
bench_using_group_with_explicit_measurement,
79+
);
80+
81+
#[cfg(not(codspeed))]
5282
criterion_main!(benches);
83+
84+
#[cfg(codspeed)]
85+
criterion_group!(
86+
only_codspeed,
87+
bench_using_group_without_explicit_measurement
88+
);
89+
90+
#[cfg(codspeed)]
91+
criterion_main!(benches, only_codspeed);

crates/criterion_compat/src/compat/group.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ use crate::{Bencher, Criterion};
99

1010
/// Deprecated: using the default measurement will be removed in the next major version.
1111
/// Defaulting to WallTime differs from the original BenchmarkGroup implementation but avoids creating a breaking change
12-
pub struct BenchmarkGroup<M: Measurement = WallTime> {
12+
pub struct BenchmarkGroup<'a, M: Measurement = WallTime> {
1313
codspeed: Rc<RefCell<CodSpeed>>,
1414
current_file: String,
1515
macro_group: String,
1616
group_name: String,
17-
_marker: PhantomData<*const M>,
17+
_marker: PhantomData<&'a M>,
1818
}
1919

20-
impl<M: Measurement> BenchmarkGroup<M> {
20+
impl<'a, M: Measurement> BenchmarkGroup<'a, M> {
2121
pub fn new(criterion: &mut Criterion<M>, group_name: String) -> BenchmarkGroup<M> {
2222
BenchmarkGroup::<M> {
2323
codspeed: criterion
@@ -79,7 +79,7 @@ impl<M: Measurement> BenchmarkGroup<M> {
7979

8080
// Dummy methods
8181
#[allow(unused_variables)]
82-
impl<M: Measurement> BenchmarkGroup<M> {
82+
impl<'a, M: Measurement> BenchmarkGroup<'a, M> {
8383
pub fn sample_size(&mut self, n: usize) -> &mut Self {
8484
self
8585
}

0 commit comments

Comments
 (0)