From c12ee81822d553b61d846286d123cf8a28556c48 Mon Sep 17 00:00:00 2001 From: Jakob Hellermann Date: Fri, 8 Apr 2022 22:50:23 +0000 Subject: [PATCH] bevy_app: add tracing event with `tracy.frame_mark` (#4320) Currently `tracy` interprets the entire trace as one frame because the marker for frames isn't being recorded. ~~When an event with `tracy.trace_marker=true` is recorded, `tracing-tracy` will mark the frame as finished: ~~ ~~Unfortunately this leads to~~ ```rs INFO bevy_app:frame: bevy_app::app: finished frame tracy.frame_mark=true ``` ~~being printed every frame (we can't use DEBUG because bevy_log sets `max_release_level_info`.~~ Instead of emitting an event that gets logged every frame, we can depend on tracy-client itself and call `finish_continuous_frame!();` --- crates/bevy_internal/Cargo.toml | 2 +- crates/bevy_log/src/lib.rs | 5 +++++ crates/bevy_render/Cargo.toml | 1 + crates/bevy_render/src/renderer/mod.rs | 7 +++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/crates/bevy_internal/Cargo.toml b/crates/bevy_internal/Cargo.toml index b658e020481c9..c2a560fec1371 100644 --- a/crates/bevy_internal/Cargo.toml +++ b/crates/bevy_internal/Cargo.toml @@ -12,7 +12,7 @@ categories = ["game-engines", "graphics", "gui", "rendering"] [features] trace = [ "bevy_app/trace", "bevy_ecs/trace", "bevy_log/trace", "bevy_render/trace", "bevy_core_pipeline/trace" ] trace_chrome = [ "bevy_log/tracing-chrome" ] -trace_tracy = [ "bevy_log/tracing-tracy" ] +trace_tracy = ["bevy_render/tracing-tracy", "bevy_log/tracing-tracy" ] wgpu_trace = ["bevy_render/wgpu_trace"] debug_asset_server = ["bevy_asset/debug_asset_server"] diff --git a/crates/bevy_log/src/lib.rs b/crates/bevy_log/src/lib.rs index a6c6294af2c98..0dd24a477d07b 100644 --- a/crates/bevy_log/src/lib.rs +++ b/crates/bevy_log/src/lib.rs @@ -159,6 +159,11 @@ impl Plugin for LogPlugin { let tracy_layer = tracing_tracy::TracyLayer::new(); let fmt_layer = tracing_subscriber::fmt::Layer::default(); + #[cfg(feature = "tracing-tracy")] + let fmt_layer = fmt_layer.with_filter( + tracing_subscriber::filter::Targets::new().with_target("tracy", Level::ERROR), + ); + let subscriber = subscriber.with(fmt_layer); #[cfg(feature = "tracing-chrome")] diff --git a/crates/bevy_render/Cargo.toml b/crates/bevy_render/Cargo.toml index 14ba909fb3c5b..bfd441b781473 100644 --- a/crates/bevy_render/Cargo.toml +++ b/crates/bevy_render/Cargo.toml @@ -21,6 +21,7 @@ zlib = ["flate2"] zstd = ["ruzstd"] trace = [] +tracing-tracy = [] wgpu_trace = ["wgpu/trace"] ci_limits = [] webgl = ["wgpu/webgl"] diff --git a/crates/bevy_render/src/renderer/mod.rs b/crates/bevy_render/src/renderer/mod.rs index 9589ed6e83ac4..8faa558be7eab 100644 --- a/crates/bevy_render/src/renderer/mod.rs +++ b/crates/bevy_render/src/renderer/mod.rs @@ -63,6 +63,13 @@ pub fn render_system(world: &mut World) { if let Some(surface_texture) = texture_view.take_surface_texture() { surface_texture.present(); } + + #[cfg(feature = "tracing-tracy")] + bevy_utils::tracing::event!( + bevy_utils::tracing::Level::INFO, + message = "finished frame", + tracy.frame_mark = true + ); } } }