Skip to content

Commit cf610b6

Browse files
committed
Deal with OS or winit redraw requests
1 parent 41622dc commit cf610b6

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/window/update_loop.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,18 @@ impl UpdateLoop {
168168

169169
fn render(&mut self, window_wrapper: &mut WinitWindowWrapper) {
170170
self.pending_render = false;
171+
tracy_plot!("pending_render", self.pending_render as u8 as f64);
171172
window_wrapper.draw_frame(self.last_dt);
172173

173174
if let FocusedState::UnfocusedNotDrawn = self.focused {
174175
self.focused = FocusedState::Unfocused;
175176
}
176177

177178
self.num_consecutive_rendered += 1;
179+
tracy_plot!(
180+
"num_consecutive_rendered",
181+
self.num_consecutive_rendered as f64
182+
);
178183
self.last_dt = self.previous_frame_start.elapsed().as_secs_f32();
179184
self.previous_frame_start = Instant::now();
180185
}
@@ -207,6 +212,7 @@ impl UpdateLoop {
207212
.vsync
208213
.request_redraw(window_wrapper.skia_renderer.window());
209214
self.pending_render = true;
215+
tracy_plot!("pending_render", self.pending_render as u8 as f64);
210216
} else {
211217
self.render(window_wrapper);
212218
}
@@ -234,6 +240,10 @@ impl UpdateLoop {
234240
self.schedule_render(skipped_frame, window_wrapper);
235241
} else {
236242
self.num_consecutive_rendered = 0;
243+
tracy_plot!(
244+
"num_consecutive_rendered",
245+
self.num_consecutive_rendered as f64
246+
);
237247
self.last_dt = self.previous_frame_start.elapsed().as_secs_f32();
238248
self.previous_frame_start = Instant::now();
239249
}
@@ -265,10 +275,16 @@ impl UpdateLoop {
265275
..
266276
}
267277
| Event::UserEvent(UserEvent::RedrawRequested) => {
268-
tracy_zone!("render (redraw requested)");
269-
self.render(window_wrapper);
270-
// We should process all buffered draw commands as soon as the rendering has finished
271-
self.process_buffered_draw_commands(window_wrapper);
278+
if self.pending_render {
279+
tracy_zone!("render (redraw requested)");
280+
self.render(window_wrapper);
281+
// We should process all buffered draw commands as soon as the rendering has finished
282+
self.process_buffered_draw_commands(window_wrapper);
283+
} else {
284+
tracy_zone!("redraw requested");
285+
// The OS itself asks us to redraw, so we need to prepare first
286+
self.should_render = ShouldRender::Immediately;
287+
}
272288
}
273289
_ => {}
274290
}

0 commit comments

Comments
 (0)