]>
Commit | Line | Data |
---|---|---|
f035d41b XL |
1 | use criterion::{black_box, criterion_group, criterion_main, Criterion}; |
2 | use tracing::Level; | |
3 | ||
5e7ed085 FG |
4 | struct FakeEmptySpan { |
5 | inner: Option<(usize, std::sync::Arc<()>)>, | |
6 | meta: Option<&'static ()>, | |
7 | } | |
8 | ||
9 | impl FakeEmptySpan { | |
10 | fn new() -> Self { | |
11 | Self { | |
12 | inner: None, | |
13 | meta: None, | |
14 | } | |
15 | } | |
16 | } | |
17 | ||
18 | impl Drop for FakeEmptySpan { | |
19 | fn drop(&mut self) { | |
20 | black_box(&self.inner); | |
21 | black_box(&self.meta); | |
22 | } | |
23 | } | |
24 | ||
f035d41b XL |
25 | fn bench_no_subscriber(c: &mut Criterion) { |
26 | use std::sync::atomic::{AtomicUsize, Ordering}; | |
27 | ||
28 | let mut group = c.benchmark_group("no_subscriber"); | |
29 | ||
30 | group.bench_function("span", |b| { | |
31 | b.iter(|| { | |
5e7ed085 FG |
32 | let span = tracing::span!(Level::TRACE, "span"); |
33 | black_box(&span); | |
34 | }) | |
35 | }); | |
36 | group.bench_function("span_enter", |b| { | |
37 | b.iter(|| { | |
38 | let span = tracing::span!(Level::TRACE, "span"); | |
39 | let _e = span.enter(); | |
40 | }) | |
41 | }); | |
42 | group.bench_function("empty_span", |b| { | |
43 | b.iter(|| { | |
44 | let span = tracing::span::Span::none(); | |
45 | black_box(&span); | |
46 | }); | |
47 | }); | |
48 | group.bench_function("empty_struct", |b| { | |
49 | b.iter(|| { | |
50 | let span = FakeEmptySpan::new(); | |
51 | black_box(&span); | |
f035d41b XL |
52 | }) |
53 | }); | |
54 | group.bench_function("event", |b| { | |
55 | b.iter(|| { | |
56 | tracing::event!(Level::TRACE, "hello"); | |
57 | }) | |
58 | }); | |
59 | group.bench_function("relaxed_load", |b| { | |
60 | let foo = AtomicUsize::new(1); | |
61 | b.iter(|| black_box(foo.load(Ordering::Relaxed))); | |
62 | }); | |
63 | group.bench_function("acquire_load", |b| { | |
64 | let foo = AtomicUsize::new(1); | |
65 | b.iter(|| black_box(foo.load(Ordering::Acquire))) | |
66 | }); | |
67 | group.bench_function("log", |b| { | |
68 | b.iter(|| { | |
69 | log::log!(log::Level::Info, "log"); | |
70 | }) | |
71 | }); | |
72 | group.finish(); | |
73 | } | |
74 | ||
75 | fn bench_fields(c: &mut Criterion) { | |
76 | let mut group = c.benchmark_group("no_subscriber_field"); | |
77 | group.bench_function("span", |b| { | |
78 | b.iter(|| { | |
79 | black_box(tracing::span!( | |
80 | Level::TRACE, | |
81 | "span", | |
82 | foo = tracing::field::display(format!("bar {:?}", 2)) | |
83 | )); | |
84 | }) | |
85 | }); | |
86 | group.bench_function("event", |b| { | |
87 | b.iter(|| { | |
88 | tracing::event!( | |
89 | Level::TRACE, | |
90 | foo = tracing::field::display(format!("bar {:?}", 2)) | |
91 | ); | |
92 | }) | |
93 | }); | |
94 | group.bench_function("log", |b| { | |
95 | b.iter(|| log::log!(log::Level::Trace, "{}", format!("bar {:?}", 2))) | |
96 | }); | |
97 | group.finish(); | |
98 | } | |
99 | ||
100 | criterion_group!(benches, bench_no_subscriber, bench_fields); | |
101 | criterion_main!(benches); |