From d5d799cbb6c931a53f211b257682f9e66b6c3d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20S=C3=B8holm?= Date: Wed, 2 Apr 2025 18:59:50 +0200 Subject: [PATCH] Fix issues in log_diagnostics example (#18652) # Objective Adopts / builds on top of #18435. The `log_diagnostics` example has bit-rotted and accumulated multiple issues: - It didn't explain the ordering constraint on DefaultPlugins, as noted by the original PR - Apparently `AssetCountDiagnosticsPlugin` no longer exists (?!). I couldn't figure out when or why it was removed, maybe it got missed in Assets v2? - The comments didn't explain what kind of info you get by the various plugins, making you do work to figure it out - ~As far as I can tell `RenderDiagnosticsPlugin` currently doesn't register any diagnostics in the traditional sense, but is only focused on rendering spans? At least it doesn't print anything extra when added for me, so having it here is misleading.~ It didn't print anything because there was nothing to render in this example ## Solution - Make all plugins be commented in to prevent further bit-rot - Remove reference to the missing plugin - Add extra comments describing the diagnostics in more detail - Add something to render so we get render diagnostics ## Testing Run the example, see relevant diagnostics printed out --- examples/diagnostics/log_diagnostics.rs | 62 +++++++++++++++++++------ 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/examples/diagnostics/log_diagnostics.rs b/examples/diagnostics/log_diagnostics.rs index 287258f7d3..fd9be8c04e 100644 --- a/examples/diagnostics/log_diagnostics.rs +++ b/examples/diagnostics/log_diagnostics.rs @@ -8,22 +8,56 @@ use bevy::{ fn main() { App::new() .add_plugins(( + // The diagnostics plugins need to be added after DefaultPlugins as they use e.g. the time plugin for timestamps. DefaultPlugins, - // Adds frame time diagnostics - FrameTimeDiagnosticsPlugin::default(), - // Adds a system that prints diagnostics to the console + // Adds a system that prints diagnostics to the console. + // The other diagnostics plugins can still be used without this if you want to use them in an ingame overlay for example. LogDiagnosticsPlugin::default(), - // Any plugin can register diagnostics. Uncomment this to add an entity count diagnostics: - // bevy::diagnostic::EntityCountDiagnosticsPlugin::default(), - - // Uncomment this to add an asset count diagnostics: - // bevy::asset::diagnostic::AssetCountDiagnosticsPlugin::::default(), - - // Uncomment this to add system info diagnostics: - // bevy::diagnostic::SystemInformationDiagnosticsPlugin::default() - - // Uncomment this to add rendering diagnostics: - // bevy::render::diagnostic::RenderDiagnosticsPlugin::default(), + // Adds frame time, FPS and frame count diagnostics. + FrameTimeDiagnosticsPlugin::default(), + // Adds an entity count diagnostic. + bevy::diagnostic::EntityCountDiagnosticsPlugin, + // Adds cpu and memory usage diagnostics for systems and the entire game process. + bevy::diagnostic::SystemInformationDiagnosticsPlugin, + // Forwards various diagnostics from the render app to the main app. + // These are pretty verbose but can be useful to pinpoint performance issues. + bevy_render::diagnostic::RenderDiagnosticsPlugin, )) + // No rendering diagnostics are emitted unless something is drawn to the screen, + // so we spawn a small scene. + .add_systems(Startup, setup) .run(); } + +/// set up a simple 3D scene +fn setup( + mut commands: Commands, + mut meshes: ResMut>, + mut materials: ResMut>, +) { + // circular base + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(Color::WHITE)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); + // cube + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), + )); + // light + commands.spawn(( + PointLight { + shadows_enabled: true, + ..default() + }, + Transform::from_xyz(4.0, 8.0, 4.0), + )); + // camera + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); +}