1 // Copyright (C) 2023 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 //! Benchmark for ATrace tracing subscriber.
16
17 use atrace_rust_benchmark_common::{new_criterion, turn_tracing_off, turn_tracing_on};
18 use atrace_tracing_subscriber::AtraceSubscriber;
19 use criterion::Criterion;
20 use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt;
21
make_example_vec() -> Vec<i32>22 fn make_example_vec() -> Vec<i32> {
23 Vec::from([1, 2, 3, 4])
24 }
25
bench_with_subscriber<F>(c: &mut Criterion, name: &str, mut f: F) where F: FnMut(),26 fn bench_with_subscriber<F>(c: &mut Criterion, name: &str, mut f: F)
27 where
28 F: FnMut(),
29 {
30 let subscriber = tracing_subscriber::registry().with(AtraceSubscriber::default());
31 tracing::subscriber::with_default(subscriber, || {
32 c.bench_function(name, |b| b.iter(&mut f));
33 });
34 }
35
bench_with_filtering_subscriber<F>(c: &mut Criterion, name: &str, mut f: F) where F: FnMut(),36 fn bench_with_filtering_subscriber<F>(c: &mut Criterion, name: &str, mut f: F)
37 where
38 F: FnMut(),
39 {
40 let subscriber = tracing_subscriber::registry().with(AtraceSubscriber::default().with_filter());
41 tracing::subscriber::with_default(subscriber, || {
42 c.bench_function(name, |b| b.iter(&mut f));
43 });
44 }
45
bench_tracing_off_event(c: &mut Criterion)46 fn bench_tracing_off_event(c: &mut Criterion) {
47 turn_tracing_off();
48 bench_with_subscriber(c, "tracing_off_event", || tracing::info!("bench info event"));
49 }
50
bench_filtered_event(c: &mut Criterion)51 fn bench_filtered_event(c: &mut Criterion) {
52 turn_tracing_off();
53 bench_with_filtering_subscriber(c, "filtered_event", || tracing::info!("bench info event"));
54 }
55
bench_tracing_off_event_args(c: &mut Criterion)56 fn bench_tracing_off_event_args(c: &mut Criterion) {
57 turn_tracing_off();
58 let v = make_example_vec();
59 bench_with_subscriber(c, "tracing_off_event_args", || {
60 tracing::info!(debug_arg1 = 123,
61 debug_arg2 = "argument",
62 debug_arg3 = ?v,
63 debug_arg4 = "last",
64 "bench info event")
65 });
66 }
67
bench_filtered_event_args(c: &mut Criterion)68 fn bench_filtered_event_args(c: &mut Criterion) {
69 turn_tracing_off();
70 let v = make_example_vec();
71 bench_with_filtering_subscriber(c, "filtered_event_args", || {
72 tracing::info!(debug_arg1 = 123,
73 debug_arg2 = "argument",
74 debug_arg3 = ?v,
75 debug_arg4 = "last",
76 "bench info event")
77 });
78 }
79
bench_tracing_off_span(c: &mut Criterion)80 fn bench_tracing_off_span(c: &mut Criterion) {
81 turn_tracing_off();
82 bench_with_subscriber(c, "tracing_off_span", || {
83 let _entered = tracing::info_span!("bench info span").entered();
84 });
85 }
86
bench_filtered_span(c: &mut Criterion)87 fn bench_filtered_span(c: &mut Criterion) {
88 turn_tracing_off();
89 bench_with_filtering_subscriber(c, "filtered_span", || {
90 let _entered = tracing::info_span!("bench info span").entered();
91 });
92 }
93
bench_tracing_off_span_args(c: &mut Criterion)94 fn bench_tracing_off_span_args(c: &mut Criterion) {
95 turn_tracing_off();
96 let v = make_example_vec();
97 bench_with_subscriber(c, "tracing_off_span_args", || {
98 let _entered = tracing::info_span!("bench info span", debug_arg1 = 123,
99 debug_arg2 = "argument",
100 debug_arg3 = ?v,
101 debug_arg4 = "last")
102 .entered();
103 });
104 }
105
bench_filtered_span_args(c: &mut Criterion)106 fn bench_filtered_span_args(c: &mut Criterion) {
107 turn_tracing_off();
108 let v = make_example_vec();
109 bench_with_filtering_subscriber(c, "filtered_span_args", || {
110 let _entered = tracing::info_span!("bench info span", debug_arg1 = 123,
111 debug_arg2 = "argument",
112 debug_arg3 = ?v,
113 debug_arg4 = "last")
114 .entered();
115 });
116 }
117
bench_tracing_on_event(c: &mut Criterion)118 fn bench_tracing_on_event(c: &mut Criterion) {
119 turn_tracing_on();
120 bench_with_subscriber(c, "tracing_on_event", || tracing::info!("bench info event"));
121 turn_tracing_off();
122 }
123
bench_tracing_on_event_args(c: &mut Criterion)124 fn bench_tracing_on_event_args(c: &mut Criterion) {
125 turn_tracing_on();
126 let v = make_example_vec();
127 bench_with_subscriber(c, "tracing_on_event_args", || {
128 tracing::info!(debug_arg1 = 123,
129 debug_arg2 = "argument",
130 debug_arg3 = ?v,
131 debug_arg4 = "last",
132 "bench info event")
133 });
134 turn_tracing_off();
135 }
136
bench_tracing_on_span(c: &mut Criterion)137 fn bench_tracing_on_span(c: &mut Criterion) {
138 turn_tracing_on();
139 bench_with_subscriber(c, "tracing_on_span", || {
140 let _entered = tracing::info_span!("bench info span").entered();
141 });
142 turn_tracing_off();
143 }
144
bench_tracing_on_span_args(c: &mut Criterion)145 fn bench_tracing_on_span_args(c: &mut Criterion) {
146 turn_tracing_on();
147 let v = make_example_vec();
148 bench_with_subscriber(c, "tracing_on_span_args", || {
149 let _entered = tracing::info_span!("bench info span", debug_arg1 = 123,
150 debug_arg2 = "argument",
151 debug_arg3 = ?v,
152 debug_arg4 = "last")
153 .entered();
154 });
155 turn_tracing_off();
156 }
157
main() -> Result<(), Box<dyn std::error::Error>>158 fn main() -> Result<(), Box<dyn std::error::Error>> {
159 let mut criterion = new_criterion();
160
161 bench_tracing_off_event(&mut criterion);
162 bench_filtered_event(&mut criterion);
163 bench_tracing_off_event_args(&mut criterion);
164 bench_filtered_event_args(&mut criterion);
165 bench_tracing_off_span(&mut criterion);
166 bench_filtered_span(&mut criterion);
167 bench_tracing_off_span_args(&mut criterion);
168 bench_filtered_span_args(&mut criterion);
169
170 bench_tracing_on_event(&mut criterion);
171 bench_tracing_on_event_args(&mut criterion);
172 bench_tracing_on_span(&mut criterion);
173 bench_tracing_on_span_args(&mut criterion);
174
175 Ok(())
176 }
177