From 89823ab617af3bb299b411aa707448872407ab83 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 29 Apr 2020 07:20:27 +0200 Subject: [PATCH] Print frame times for glium and wasm excluding painting --- emigui_glium/src/painter.rs | 1 + example_glium/src/main.rs | 21 +++++++++++++++++++++ example_wasm/src/lib.rs | 18 +++++++++++------- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/emigui_glium/src/painter.rs b/emigui_glium/src/painter.rs index 6c7b77de..1d19148a 100644 --- a/emigui_glium/src/painter.rs +++ b/emigui_glium/src/painter.rs @@ -226,6 +226,7 @@ impl Painter { target.finish().unwrap(); } + #[inline(never)] // Easier profiling fn paint_batch( &mut self, target: &mut Frame, diff --git a/example_glium/src/main.rs b/example_glium/src/main.rs index 67319af8..3e15fbcb 100644 --- a/example_glium/src/main.rs +++ b/example_glium/src/main.rs @@ -43,6 +43,8 @@ fn main() { let mut frame_start = Instant::now(); + let mut frame_times = std::collections::VecDeque::new(); + let mut example_app = ExampleApp::default(); while running { @@ -73,6 +75,19 @@ fn main() { running = false; } + let mean_frame_time = if frame_times.is_empty() { + 0.0 + } else { + frame_times.iter().sum::() / (frame_times.len() as f64) + }; + region.add( + label!( + "Frame time: {:.1} ms (excludes painting)", + 1e3 * mean_frame_time + ) + .text_style(TextStyle::Monospace), + ); + // TODO: Make it even simpler to show a window Window::new("Examples") @@ -90,6 +105,12 @@ fn main() { }); let (output, paint_batches) = emigui.end_frame(); + + frame_times.push_back((Instant::now() - emigui_start).as_secs_f64()); + while frame_times.len() > 30 { + frame_times.pop_front(); + } + painter.paint_batches(&display, paint_batches, emigui.texture()); let cursor = match output.cursor_icon { diff --git a/example_wasm/src/lib.rs b/example_wasm/src/lib.rs index 9aebdde6..31e9f3e0 100644 --- a/example_wasm/src/lib.rs +++ b/example_wasm/src/lib.rs @@ -73,8 +73,11 @@ impl State { self.frame_times.iter().sum::() / (self.frame_times.len() as f64) }; region.add( - label!("Total CPU usage: {:.1} ms", 1e3 * mean_frame_time) - .text_style(TextStyle::Monospace), + label!( + "Frame time: {:.1} ms (excludes painting)", + 1e3 * mean_frame_time + ) + .text_style(TextStyle::Monospace), ); // TODO: Make it even simpler to show a window @@ -95,6 +98,12 @@ impl State { let bg_color = srgba(0, 0, 0, 0); // Use background css color. let (output, batches) = self.emigui.end_frame(); + + self.frame_times.push_back(now_sec() - everything_start); + while self.frame_times.len() > 30 { + self.frame_times.pop_front(); + } + self.webgl_painter.paint_batches( bg_color, batches, @@ -102,11 +111,6 @@ impl State { pixels_per_point, )?; - self.frame_times.push_back(now_sec() - everything_start); - while self.frame_times.len() > 30 { - self.frame_times.pop_front(); - } - Ok(output) } }