Diagnostics / Custom Diagnostic

Back to examples View in GitHub

Support Warning

WebGPU is currently only supported on Chrome starting with version 113, and only on desktop. If they don't work on your configuration, you can check the WebGL2 examples here.
Support for WebGPU in Bevy hasn't been released yet, this example has been compiled using the main branch.

//! This example illustrates how to create a custom diagnostic.

use bevy::{
    diagnostic::{Diagnostic, DiagnosticId, Diagnostics, LogDiagnosticsPlugin},
    prelude::*,
};

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        // The "print diagnostics" plugin is optional.
        // It just visualizes our diagnostics in the console.
        .add_plugin(LogDiagnosticsPlugin::default())
        .add_systems(Startup, setup_diagnostic_system)
        .add_systems(Update, my_system)
        .run();
}

// All diagnostics should have a unique DiagnosticId.
// For each new diagnostic, generate a new random number.
pub const SYSTEM_ITERATION_COUNT: DiagnosticId =
    DiagnosticId::from_u128(337040787172757619024841343456040760896);

fn setup_diagnostic_system(mut diagnostics: ResMut<Diagnostics>) {
    // Diagnostics must be initialized before measurements can be added.
    // In general it's a good idea to set them up in a "startup system".
    diagnostics.add(Diagnostic::new(
        SYSTEM_ITERATION_COUNT,
        "system_iteration_count",
        10,
    ));
}

fn my_system(mut diagnostics: ResMut<Diagnostics>) {
    // Add a measurement of 10.0 for our diagnostic each time this system runs.
    diagnostics.add_measurement(SYSTEM_ITERATION_COUNT, || 10.0);
}