use std::thread::sleep; use std::time::Duration; use tracing::{span, Level}; use tracing_flame::FlameLayer; use tracing_subscriber::{prelude::*, registry::Registry}; #[test] fn capture_supported() { { let tmp_dir = tempfile::Builder::new() .prefix("tracing-flamegraph-test-") .tempdir() .expect("failed to create tempdir"); let (flame_layer, _guard) = FlameLayer::with_file(tmp_dir.path().join("tracing.folded")).unwrap(); let subscriber = Registry::default().with(flame_layer); tracing::subscriber::set_global_default(subscriber).expect("Could not set global default"); { let span = span!(Level::ERROR, "outer"); let _guard = span.enter(); sleep(Duration::from_millis(10)); { let span = span!(Level::ERROR, "Inner"); let _guard = span.enter(); sleep(Duration::from_millis(50)); { let span = span!(Level::ERROR, "Innermost"); let _guard = span.enter(); sleep(Duration::from_millis(50)); } } sleep(Duration::from_millis(5)); } sleep(Duration::from_millis(500)); tmp_dir.close().expect("failed to delete tempdir"); } }