use criterion::{black_box, criterion_group, criterion_main, Criterion}; use tracing::Level; fn bench_no_subscriber(c: &mut Criterion) { use std::sync::atomic::{AtomicUsize, Ordering}; let mut group = c.benchmark_group("no_subscriber"); group.bench_function("span", |b| { b.iter(|| { black_box(tracing::span!(Level::TRACE, "span")); }) }); group.bench_function("event", |b| { b.iter(|| { tracing::event!(Level::TRACE, "hello"); }) }); group.bench_function("relaxed_load", |b| { let foo = AtomicUsize::new(1); b.iter(|| black_box(foo.load(Ordering::Relaxed))); }); group.bench_function("acquire_load", |b| { let foo = AtomicUsize::new(1); b.iter(|| black_box(foo.load(Ordering::Acquire))) }); group.bench_function("log", |b| { b.iter(|| { log::log!(log::Level::Info, "log"); }) }); group.finish(); } fn bench_fields(c: &mut Criterion) { let mut group = c.benchmark_group("no_subscriber_field"); group.bench_function("span", |b| { b.iter(|| { black_box(tracing::span!( Level::TRACE, "span", foo = tracing::field::display(format!("bar {:?}", 2)) )); }) }); group.bench_function("event", |b| { b.iter(|| { tracing::event!( Level::TRACE, foo = tracing::field::display(format!("bar {:?}", 2)) ); }) }); group.bench_function("log", |b| { b.iter(|| log::log!(log::Level::Trace, "{}", format!("bar {:?}", 2))) }); group.finish(); } criterion_group!(benches, bench_no_subscriber, bench_fields); criterion_main!(benches);