@@ -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