Smooth frame time estimation in wasm example

This commit is contained in:
Emil Ernerfeldt 2020-04-21 14:40:46 +02:00
parent 609473f85a
commit 11cd1bdca3

View file

@ -24,7 +24,8 @@ pub struct State {
example_app: ExampleApp, example_app: ExampleApp,
emigui: Emigui, emigui: Emigui,
webgl_painter: emigui_wasm::webgl::Painter, webgl_painter: emigui_wasm::webgl::Painter,
everything_ms: f64,
frame_times: std::collections::VecDeque<f64>,
} }
impl State { impl State {
@ -33,7 +34,7 @@ impl State {
example_app: Default::default(), example_app: Default::default(),
emigui: Emigui::new(pixels_per_point), emigui: Emigui::new(pixels_per_point),
webgl_painter: emigui_wasm::webgl::Painter::new(canvas_id)?, webgl_painter: emigui_wasm::webgl::Painter::new(canvas_id)?,
everything_ms: 0.0, frame_times: Default::default(),
}) })
} }
@ -61,8 +62,15 @@ impl State {
region.indent(Id::new(&"webgl region"), |region| { region.indent(Id::new(&"webgl region"), |region| {
region.add_label(self.webgl_painter.debug_info()); region.add_label(self.webgl_painter.debug_info());
}); });
let mean_frame_time = if self.frame_times.is_empty() {
0.0
} else {
self.frame_times.iter().sum::<f64>() / (self.frame_times.len() as f64)
};
region.add( region.add(
label!("Everything: {:.1} ms", self.everything_ms).text_style(TextStyle::Monospace), label!("Total CPU usage: {:.1} ms", 1e3 * mean_frame_time)
.text_style(TextStyle::Monospace),
); );
// TODO: Make it even simpler to show a window // TODO: Make it even simpler to show a window
@ -88,7 +96,10 @@ impl State {
raw_input.pixels_per_point, raw_input.pixels_per_point,
); );
self.everything_ms = 1000.0 * (now_sec() - everything_start); self.frame_times.push_back(now_sec() - everything_start);
while self.frame_times.len() > 30 {
self.frame_times.pop_front();
}
result result
} }