frame time diagnostic plugin
This commit is contained in:
parent
75f1362433
commit
ea16f6fc56
@ -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,
|
||||
|
||||
49
crates/bevy_diagnostic/src/frame_time_diagnostics_plugin.rs
Normal file
49
crates/bevy_diagnostic/src/frame_time_diagnostics_plugin.rs
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -17,7 +16,6 @@ pub struct PrintDiagnostics {
|
||||
|
||||
pub struct DiagnosticsPlugin {
|
||||
pub print_diagnostics: Option<PrintDiagnostics>,
|
||||
pub add_defaults: bool,
|
||||
}
|
||||
|
||||
impl Default for DiagnosticsPlugin {
|
||||
@ -27,7 +25,6 @@ impl Default for DiagnosticsPlugin {
|
||||
wait_duration: Duration::from_secs_f64(1.0),
|
||||
filter: None,
|
||||
}),
|
||||
add_defaults: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -35,11 +32,6 @@ impl Default for DiagnosticsPlugin {
|
||||
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());
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user