feat: debug text rendering of statistics, formatting with tests

This commit is contained in:
2025-08-15 17:52:16 -05:00
parent 3086453c7b
commit 31193160a9
10 changed files with 446 additions and 79 deletions

View File

@@ -5,19 +5,15 @@ use sdl2::render::TextureCreator;
use sdl2::ttf::Sdl2TtfContext;
use sdl2::video::WindowContext;
use sdl2::{AudioSubsystem, EventPump, Sdl, VideoSubsystem};
use thousands::Separable;
use tracing::info;
use crate::error::{GameError, GameResult};
use crate::constants::{CANVAS_SIZE, LOOP_TIME, SCALE};
use crate::game::Game;
use crate::platform::get_platform;
use crate::systems::profiling::SystemTimings;
pub struct App {
pub game: Game,
last_timings: Instant,
last_tick: Instant,
focused: bool,
_cursor_pos: Vec2,
@@ -70,7 +66,6 @@ impl App {
game,
focused: true,
last_tick: Instant::now(),
last_timings: Instant::now() - Duration::from_secs_f32(0.5),
_cursor_pos: Vec2::ZERO,
})
}
@@ -113,28 +108,6 @@ impl App {
return false;
}
if self.last_timings.elapsed() > Duration::from_secs(1) {
// Show timing statistics over the last 90 frames
if let Some(timings) = self.game.world.get_resource::<SystemTimings>() {
let stats = timings.get_stats();
let (total_avg, total_std) = timings.get_total_stats();
let mut individual_timings = String::new();
for (name, (avg, std_dev)) in stats.iter() {
individual_timings.push_str(&format!("{}={:?} ± {:?} ", name, avg, std_dev));
}
let effective_fps = match 1.0 / total_avg.as_secs_f64() {
f if f > 100.0 => (f as u32).separate_with_commas(),
f if f < 10.0 => format!("{:.1} FPS", f),
f => format!("{:.0} FPS", f),
};
info!("({effective_fps}) {total_avg:?} ± {total_std:?} ({individual_timings})");
}
self.last_timings = Instant::now();
}
// Sleep if we still have time left
if start.elapsed() < LOOP_TIME {
let time = LOOP_TIME.saturating_sub(start.elapsed());