Skip to content

Commit

Permalink
frame time diagnostic plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
cart committed May 4, 2020
1 parent 75f1362 commit ea16f6f
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 48 deletions.
36 changes: 0 additions & 36 deletions crates/bevy_diagnostic/src/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,6 @@ use bevy_core::time::Time;
use legion::prelude::*;
use std::time::Duration;

pub const FPS: DiagnosticId = DiagnosticId::from_u128(288146834822086093791974408528866909483);
pub const FRAME_TIME: DiagnosticId =
DiagnosticId::from_u128(54021991829115352065418785002088010276);

pub fn setup_frame_time_diagnostic_system(mut diagnostics: ResourceMut<Diagnostics>) {
diagnostics.add(Diagnostic::new(FRAME_TIME, "frame_time", 10));
diagnostics.add(Diagnostic::new(FPS, "fps", 10));
}

pub fn frame_time_diagnostic_system(
mut diagnostics: ResourceMut<Diagnostics>,
time: Resource<Time>,
) {
if time.delta_seconds_f64 == 0.0 {
return;
}

diagnostics.add_measurement(FRAME_TIME, time.delta_seconds_f64);
if let Some(fps) = diagnostics
.get(FRAME_TIME)
.and_then(|frame_time_diagnostic| {
frame_time_diagnostic
.average()
.and_then(|frame_time_average| {
if frame_time_average > 0.0 {
Some(1.0 / frame_time_average)
} else {
None
}
})
})
{
diagnostics.add_measurement(FPS, fps);
}
}

pub struct PrintDiagnosticsState {
elapsed: f64,
wait_seconds: f64,
Expand Down
49 changes: 49 additions & 0 deletions crates/bevy_diagnostic/src/frame_time_diagnostics_plugin.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
use crate::{Diagnostic, DiagnosticId, Diagnostics};
use bevy_app::AppPlugin;
use bevy_core::time::Time;
use legion::prelude::{IntoSystem, Resource, ResourceMut};

#[derive(Default)]
pub struct FrameTimeDiagnosticsPlugin;

impl AppPlugin for FrameTimeDiagnosticsPlugin {
fn build(&self, app: &mut bevy_app::AppBuilder) {
app.add_startup_system(Self::setup_system.system())
.add_system(Self::diagnostic_system.system());
}
}

impl FrameTimeDiagnosticsPlugin {
pub const FPS: DiagnosticId = DiagnosticId::from_u128(288146834822086093791974408528866909483);
pub const FRAME_TIME: DiagnosticId =
DiagnosticId::from_u128(54021991829115352065418785002088010276);

pub fn setup_system(mut diagnostics: ResourceMut<Diagnostics>) {
diagnostics.add(Diagnostic::new(Self::FRAME_TIME, "frame_time", 10));
diagnostics.add(Diagnostic::new(Self::FPS, "fps", 10));
}

pub fn diagnostic_system(mut diagnostics: ResourceMut<Diagnostics>, time: Resource<Time>) {
if time.delta_seconds_f64 == 0.0 {
return;
}

diagnostics.add_measurement(Self::FRAME_TIME, time.delta_seconds_f64);
if let Some(fps) = diagnostics
.get(Self::FRAME_TIME)
.and_then(|frame_time_diagnostic| {
frame_time_diagnostic
.average()
.and_then(|frame_time_average| {
if frame_time_average > 0.0 {
Some(1.0 / frame_time_average)
} else {
None
}
})
})
{
diagnostics.add_measurement(Self::FPS, fps);
}
}
}
14 changes: 3 additions & 11 deletions crates/bevy_diagnostic/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
mod diagnostic;
pub mod diagnostics;
mod frame_time_diagnostics_plugin;
pub use diagnostic::*;
pub use frame_time_diagnostics_plugin::FrameTimeDiagnosticsPlugin;

use bevy_app::{AppBuilder, AppPlugin};
use diagnostics::{
frame_time_diagnostic_system, print_diagnostics_system, setup_frame_time_diagnostic_system,
PrintDiagnosticsState,
};
use diagnostics::{print_diagnostics_system, PrintDiagnosticsState};
use legion::prelude::IntoSystem;
use std::time::Duration;

Expand All @@ -17,7 +16,6 @@ pub struct PrintDiagnostics {

pub struct DiagnosticsPlugin {
pub print_diagnostics: Option<PrintDiagnostics>,
pub add_defaults: bool,
}

impl Default for DiagnosticsPlugin {
Expand All @@ -27,19 +25,13 @@ impl Default for DiagnosticsPlugin {
wait_duration: Duration::from_secs_f64(1.0),
filter: None,
}),
add_defaults: true,
}
}
}

impl AppPlugin for DiagnosticsPlugin {
fn build(&self, app: &mut AppBuilder) {
app.init_resource::<Diagnostics>();
if self.add_defaults {
app.add_startup_system(setup_frame_time_diagnostic_system.system())
.add_system(frame_time_diagnostic_system.system());
}

if let Some(ref print_diagnostics) = self.print_diagnostics {
app.add_resource(PrintDiagnosticsState::new(print_diagnostics.wait_duration))
.add_system(print_diagnostics_system.system());
Expand Down
3 changes: 2 additions & 1 deletion examples/3d/spawner.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
use bevy::prelude::*;
use bevy::{diagnostic::FrameTimeDiagnosticsPlugin, prelude::*};
use rand::{rngs::StdRng, Rng, SeedableRng};

fn main() {
App::build()
.add_default_plugins()
.add_plugin(DiagnosticsPlugin::default())
.add_plugin(FrameTimeDiagnosticsPlugin::default())
.add_startup_system(setup)
.add_system(move_system.system())
.run();
Expand Down

0 comments on commit ea16f6f

Please sign in to comment.