mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-08 20:30:10 +00:00
102 lines
2.6 KiB
Rust
102 lines
2.6 KiB
Rust
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
|
use tracing::Level;
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
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(|| {
|
|
let span = tracing::span!(Level::TRACE, "span");
|
|
black_box(&span);
|
|
})
|
|
});
|
|
group.bench_function("span_enter", |b| {
|
|
b.iter(|| {
|
|
let span = tracing::span!(Level::TRACE, "span");
|
|
let _e = span.enter();
|
|
})
|
|
});
|
|
group.bench_function("empty_span", |b| {
|
|
b.iter(|| {
|
|
let span = tracing::span::Span::none();
|
|
black_box(&span);
|
|
});
|
|
});
|
|
group.bench_function("empty_struct", |b| {
|
|
b.iter(|| {
|
|
let span = FakeEmptySpan::new();
|
|
black_box(&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);
|