1 use std::thread::sleep; 2 use std::time::Duration; 3 use tracing::{span, Level}; 4 use tracing_flame::FlameLayer; 5 use tracing_subscriber::{prelude::*, registry::Registry}; 6 7 #[test] capture_supported()8fn capture_supported() { 9 { 10 let tmp_dir = tempfile::Builder::new() 11 .prefix("tracing-flamegraph-test-") 12 .tempdir() 13 .expect("failed to create tempdir"); 14 let (flame_layer, _guard) = 15 FlameLayer::with_file(tmp_dir.path().join("tracing.folded")).unwrap(); 16 17 let subscriber = Registry::default().with(flame_layer); 18 19 tracing::subscriber::set_global_default(subscriber).expect("Could not set global default"); 20 21 { 22 let span = span!(Level::ERROR, "outer"); 23 let _guard = span.enter(); 24 sleep(Duration::from_millis(10)); 25 26 { 27 let span = span!(Level::ERROR, "Inner"); 28 let _guard = span.enter(); 29 sleep(Duration::from_millis(50)); 30 31 { 32 let span = span!(Level::ERROR, "Innermost"); 33 let _guard = span.enter(); 34 sleep(Duration::from_millis(50)); 35 } 36 } 37 38 sleep(Duration::from_millis(5)); 39 } 40 41 sleep(Duration::from_millis(500)); 42 43 tmp_dir.close().expect("failed to delete tempdir"); 44 } 45 } 46