1 use criterion::{black_box, criterion_group, criterion_main, Criterion};
2
3 mod shared;
4
bench(c: &mut Criterion)5 fn bench(c: &mut Criterion) {
6 let mut group = c.benchmark_group("empty_span");
7 shared::for_all_dispatches(&mut group, |b| {
8 b.iter(|| {
9 let span = tracing::span::Span::none();
10 black_box(&span);
11 })
12 });
13 group.bench_function("baseline_struct", |b| {
14 b.iter(|| {
15 let span = FakeEmptySpan::new();
16 black_box(&span);
17 })
18 });
19 }
20
21 struct FakeEmptySpan {
22 inner: Option<(usize, std::sync::Arc<()>)>,
23 meta: Option<&'static ()>,
24 }
25
26 impl FakeEmptySpan {
new() -> Self27 fn new() -> Self {
28 Self {
29 inner: None,
30 meta: None,
31 }
32 }
33 }
34
35 impl Drop for FakeEmptySpan {
drop(&mut self)36 fn drop(&mut self) {
37 black_box(&self.inner);
38 black_box(&self.meta);
39 }
40 }
41
42 criterion_group!(benches, bench);
43 criterion_main!(benches);
44