add fps printer system to diagnostics mod

This commit is contained in:
Carter Anderson 2020-03-11 01:44:46 -07:00
parent 41e15a2d90
commit ad654a3c25
7 changed files with 39 additions and 64 deletions

View file

@ -1,6 +1,5 @@
use bevy::prelude::*; use bevy::prelude::*;
use rand::{random, rngs::StdRng, Rng, SeedableRng}; use rand::{random, rngs::StdRng, Rng, SeedableRng};
use std::collections::VecDeque;
struct Person; struct Person;
@ -25,7 +24,7 @@ fn main() {
.add_system(build_wander_system()) .add_system(build_wander_system())
.add_system(build_navigate_system()) .add_system(build_navigate_system())
.add_system(build_move_system()) .add_system(build_move_system())
.add_system(build_print_status_system()) .add_system(bevy::diagnostics::build_fps_printer_system())
.run(); .run();
} }
@ -141,37 +140,6 @@ fn build_move_system() -> Box<dyn Schedulable> {
}) })
} }
fn build_print_status_system() -> Box<dyn Schedulable> {
let mut elapsed = 0.0;
let mut frame_time_total = 0.0;
let mut frame_time_count = 0;
let frame_time_max = 10;
let mut frame_time_values = VecDeque::new();
SystemBuilder::new("PrintStatus")
.read_resource::<Time>()
.with_query(<(Read<Person>,)>::query())
.build(move |_, world, time, person_query| {
elapsed += time.delta_seconds;
frame_time_values.push_front(time.delta_seconds);
frame_time_total += time.delta_seconds;
frame_time_count += 1;
if frame_time_count > frame_time_max {
frame_time_count = frame_time_max;
frame_time_total -= frame_time_values.pop_back().unwrap();
}
if elapsed > 1.0 {
if frame_time_count > 0 && frame_time_total > 0.0 {
println!(
"fps: {}",
1.0 / (frame_time_total / frame_time_count as f32)
)
}
println!("peeps: {}", person_query.iter(world).count());
elapsed = 0.0;
}
})
}
fn create_person(world: &mut World, mesh_handle: Handle<Mesh>, translation: Translation) { fn create_person(world: &mut World, mesh_handle: Handle<Mesh>, translation: Translation) {
world.insert( world.insert(
(), (),

View file

@ -1,12 +1,11 @@
use bevy::prelude::*; use bevy::prelude::*;
use rand::{rngs::StdRng, Rng, SeedableRng}; use rand::{rngs::StdRng, Rng, SeedableRng};
use std::collections::VecDeque;
fn main() { fn main() {
AppBuilder::new() AppBuilder::new()
.add_defaults() .add_defaults()
.add_system(build_move_system()) .add_system(build_move_system())
.add_system(build_print_status_system()) .add_system(bevy::diagnostics::build_fps_printer_system())
.setup_world(setup) .setup_world(setup)
.run(); .run();
} }
@ -27,35 +26,6 @@ fn build_move_system() -> Box<dyn Schedulable> {
}) })
} }
fn build_print_status_system() -> Box<dyn Schedulable> {
let mut elapsed = 0.0;
let mut frame_time_total = 0.0;
let mut frame_time_count = 0;
let frame_time_max = 10;
let mut frame_time_values = VecDeque::new();
SystemBuilder::new("PrintStatus")
.read_resource::<Time>()
.build(move |_, _world, time, _queries| {
elapsed += time.delta_seconds;
frame_time_values.push_front(time.delta_seconds);
frame_time_total += time.delta_seconds;
frame_time_count += 1;
if frame_time_count > frame_time_max {
frame_time_count = frame_time_max;
frame_time_total -= frame_time_values.pop_back().unwrap();
}
if elapsed > 1.0 {
if frame_time_count > 0 && frame_time_total > 0.0 {
println!(
"fps: {}",
1.0 / (frame_time_total / frame_time_count as f32)
)
}
elapsed = 0.0;
}
})
}
fn setup(world: &mut World, resources: &mut Resources) { fn setup(world: &mut World, resources: &mut Resources) {
let mut mesh_storage = resources.get_mut::<AssetStorage<Mesh>>().unwrap(); let mut mesh_storage = resources.get_mut::<AssetStorage<Mesh>>().unwrap();
let cube_handle = mesh_storage.add(Mesh::load(MeshType::Cube)); let cube_handle = mesh_storage.add(Mesh::load(MeshType::Cube));

32
src/diagnostics/mod.rs Normal file
View file

@ -0,0 +1,32 @@
use crate::{core::Time, prelude::SystemBuilder};
use legion::prelude::Schedulable;
use std::collections::VecDeque;
pub fn build_fps_printer_system() -> Box<dyn Schedulable> {
let mut elapsed = 0.0;
let mut frame_time_total = 0.0;
let mut frame_time_count = 0;
let frame_time_max = 10;
let mut frame_time_values = VecDeque::new();
SystemBuilder::new("FpsPrinter")
.read_resource::<Time>()
.build(move |_, _world, time, _queries| {
elapsed += time.delta_seconds;
frame_time_values.push_front(time.delta_seconds);
frame_time_total += time.delta_seconds;
frame_time_count += 1;
if frame_time_count > frame_time_max {
frame_time_count = frame_time_max;
frame_time_total -= frame_time_values.pop_back().unwrap();
}
if elapsed > 1.0 {
if frame_time_count > 0 && frame_time_total > 0.0 {
println!(
"fps: {}",
1.0 / (frame_time_total / frame_time_count as f32)
)
}
elapsed = 0.0;
}
})
}

View file

@ -8,6 +8,7 @@ pub mod prelude;
pub mod render; pub mod render;
pub mod serialization; pub mod serialization;
pub mod ui; pub mod ui;
pub mod diagnostics;
pub use bevy_transform as transform; pub use bevy_transform as transform;
pub use glam as math; pub use glam as math;

View file

@ -1,3 +1,4 @@
#[derive(Debug, Clone)]
pub struct Anchors { pub struct Anchors {
pub left: f32, pub left: f32,
pub right: f32, pub right: f32,

View file

@ -1,3 +1,4 @@
#[derive(Debug, Clone)]
pub struct Margins { pub struct Margins {
pub left: f32, pub left: f32,
pub right: f32, pub right: f32,

View file

@ -5,11 +5,13 @@ use crate::{
ui::{Anchors, Margins}, ui::{Anchors, Margins},
}; };
#[derive(Debug, Clone)]
enum GrowDirection { enum GrowDirection {
Negative, Negative,
Positive, Positive,
} }
#[derive(Debug, Clone)]
pub struct Node { pub struct Node {
pub position: Vec2, pub position: Vec2,
pub global_position: Vec2, pub global_position: Vec2,