use criterion::{black_box, criterion_group, criterion_main, Criterion}; mod shared; fn bench(c: &mut Criterion) { let mut group = c.benchmark_group("empty_span"); shared::for_all_dispatches(&mut group, |b| { b.iter(|| { let span = tracing::span::Span::none(); black_box(&span); }) }); group.bench_function("baseline_struct", |b| { b.iter(|| { let span = FakeEmptySpan::new(); black_box(&span); }) }); } struct FakeEmptySpan { inner: Option<(usize, std::sync::Arc<()>)>, meta: Option<&'static ()>, } impl FakeEmptySpan { fn new() -> Self { Self { inner: None, meta: None, } } } impl Drop for FakeEmptySpan { fn drop(&mut self) { black_box(&self.inner); black_box(&self.meta); } } criterion_group!(benches, bench); criterion_main!(benches);