blob: f5a3a3b4a25457e59cccee7d27bcf9e635c98fff [file] [log] [blame]
// Copyright (C) 2023 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! Benchmark for ATrace tracing subscriber.
use atrace_rust_benchmark_common::{new_criterion, turn_tracing_off, turn_tracing_on};
use atrace_tracing_subscriber::AtraceSubscriber;
use criterion::Criterion;
use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt;
fn make_example_vec() -> Vec<i32> {
Vec::from([1, 2, 3, 4])
}
fn bench_with_subscriber<F>(c: &mut Criterion, name: &str, mut f: F)
where
F: FnMut(),
{
let subscriber = tracing_subscriber::registry().with(AtraceSubscriber::default());
tracing::subscriber::with_default(subscriber, || {
c.bench_function(name, |b| b.iter(&mut f));
});
}
fn bench_with_filtering_subscriber<F>(c: &mut Criterion, name: &str, mut f: F)
where
F: FnMut(),
{
let subscriber = tracing_subscriber::registry().with(AtraceSubscriber::default().with_filter());
tracing::subscriber::with_default(subscriber, || {
c.bench_function(name, |b| b.iter(&mut f));
});
}
fn bench_tracing_off_event(c: &mut Criterion) {
turn_tracing_off();
bench_with_subscriber(c, "tracing_off_event", || tracing::info!("bench info event"));
}
fn bench_filtered_event(c: &mut Criterion) {
turn_tracing_off();
bench_with_filtering_subscriber(c, "filtered_event", || tracing::info!("bench info event"));
}
fn bench_tracing_off_event_args(c: &mut Criterion) {
turn_tracing_off();
let v = make_example_vec();
bench_with_subscriber(c, "tracing_off_event_args", || {
tracing::info!(debug_arg1 = 123,
debug_arg2 = "argument",
debug_arg3 = ?v,
debug_arg4 = "last",
"bench info event")
});
}
fn bench_filtered_event_args(c: &mut Criterion) {
turn_tracing_off();
let v = make_example_vec();
bench_with_filtering_subscriber(c, "filtered_event_args", || {
tracing::info!(debug_arg1 = 123,
debug_arg2 = "argument",
debug_arg3 = ?v,
debug_arg4 = "last",
"bench info event")
});
}
fn bench_tracing_off_span(c: &mut Criterion) {
turn_tracing_off();
bench_with_subscriber(c, "tracing_off_span", || {
let _entered = tracing::info_span!("bench info span").entered();
});
}
fn bench_filtered_span(c: &mut Criterion) {
turn_tracing_off();
bench_with_filtering_subscriber(c, "filtered_span", || {
let _entered = tracing::info_span!("bench info span").entered();
});
}
fn bench_tracing_off_span_args(c: &mut Criterion) {
turn_tracing_off();
let v = make_example_vec();
bench_with_subscriber(c, "tracing_off_span_args", || {
let _entered = tracing::info_span!("bench info span", debug_arg1 = 123,
debug_arg2 = "argument",
debug_arg3 = ?v,
debug_arg4 = "last")
.entered();
});
}
fn bench_filtered_span_args(c: &mut Criterion) {
turn_tracing_off();
let v = make_example_vec();
bench_with_filtering_subscriber(c, "filtered_span_args", || {
let _entered = tracing::info_span!("bench info span", debug_arg1 = 123,
debug_arg2 = "argument",
debug_arg3 = ?v,
debug_arg4 = "last")
.entered();
});
}
fn bench_tracing_on_event(c: &mut Criterion) {
turn_tracing_on();
bench_with_subscriber(c, "tracing_on_event", || tracing::info!("bench info event"));
turn_tracing_off();
}
fn bench_tracing_on_event_args(c: &mut Criterion) {
turn_tracing_on();
let v = make_example_vec();
bench_with_subscriber(c, "tracing_on_event_args", || {
tracing::info!(debug_arg1 = 123,
debug_arg2 = "argument",
debug_arg3 = ?v,
debug_arg4 = "last",
"bench info event")
});
turn_tracing_off();
}
fn bench_tracing_on_span(c: &mut Criterion) {
turn_tracing_on();
bench_with_subscriber(c, "tracing_on_span", || {
let _entered = tracing::info_span!("bench info span").entered();
});
turn_tracing_off();
}
fn bench_tracing_on_span_args(c: &mut Criterion) {
turn_tracing_on();
let v = make_example_vec();
bench_with_subscriber(c, "tracing_on_span_args", || {
let _entered = tracing::info_span!("bench info span", debug_arg1 = 123,
debug_arg2 = "argument",
debug_arg3 = ?v,
debug_arg4 = "last")
.entered();
});
turn_tracing_off();
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut criterion = new_criterion();
bench_tracing_off_event(&mut criterion);
bench_filtered_event(&mut criterion);
bench_tracing_off_event_args(&mut criterion);
bench_filtered_event_args(&mut criterion);
bench_tracing_off_span(&mut criterion);
bench_filtered_span(&mut criterion);
bench_tracing_off_span_args(&mut criterion);
bench_filtered_span_args(&mut criterion);
bench_tracing_on_event(&mut criterion);
bench_tracing_on_event_args(&mut criterion);
bench_tracing_on_span(&mut criterion);
bench_tracing_on_span_args(&mut criterion);
Ok(())
}