doc_sync_layered/
doc_sync_layered.rs1use latency_trace::{summary_stats, LatencyTrace};
7use std::{thread, time::Duration};
8use tracing::{info, instrument, level_filters::LevelFilter, trace, trace_span};
9use tracing_subscriber::{fmt::format::FmtSpan, prelude::*, Registry};
10
11#[instrument(level = "info")]
12fn f() {
13 trace!("in f");
14 for _ in 0..10 {
15 trace_span!("loop_body").in_scope(|| {
16 info!("in loop body");
17 thread::sleep(Duration::from_micros(1200));
19
20 g();
21 });
22 }
23}
24
25#[instrument(level = "info")]
26fn g() {
27 trace!("in g");
28 thread::sleep(Duration::from_micros(800));
30}
31
32fn main() {
33 let lt = LatencyTrace::default();
35
36 let ltl = lt.clone().with_filter(LevelFilter::INFO);
40
41 let tfmt = tracing_subscriber::fmt::layer()
44 .with_span_events(FmtSpan::FULL)
45 .with_filter(LevelFilter::TRACE);
46
47 let layered = Registry::default().with(ltl).with(tfmt);
49 layered.init();
50
51 let latencies = lt.measure_latencies(f);
53
54 println!("\nLatency stats below are in microseconds");
55 for (span_group, stats) in latencies.map_values(summary_stats) {
56 println!(" * {:?}, {:?}", span_group, stats);
57 }
58
59 println!("\nDebug print of `latencies.map_values(summary_stats)`:");
61 println!("{:?}", latencies.map_values(summary_stats));
62}