@@ -33,8 +33,8 @@ pub(crate) struct RedrawInputs {
3333 pub ( crate ) has_window : bool ,
3434 /// Whether the app has already requested event-loop exit.
3535 pub ( crate ) exit_requested : bool ,
36- /// Whether VR pacing owns frame cadence.
37- pub ( crate ) vr_active : bool ,
36+ /// Whether HMD compositor pacing owns frame cadence for the next redraw .
37+ pub ( crate ) hmd_compositor_paced : bool ,
3838 /// Swapchain VSync mode. `On` lets FIFO presentation own desktop cadence.
3939 pub ( crate ) vsync : VsyncMode ,
4040 /// Whether winit reports that the renderer window currently has keyboard focus.
@@ -80,7 +80,7 @@ pub(crate) fn plan_redraw(inputs: RedrawInputs) -> RedrawPlan {
8080 } ;
8181 }
8282
83- if inputs. vr_active || inputs. vsync == VsyncMode :: On {
83+ if inputs. hmd_compositor_paced || inputs. vsync == VsyncMode :: On {
8484 return RedrawPlan {
8585 decision : RedrawDecision :: RedrawNow ,
8686 fps_cap : 0 ,
@@ -159,7 +159,7 @@ mod tests {
159159 let plan = plan_redraw ( RedrawInputs {
160160 has_window : true ,
161161 exit_requested : false ,
162- vr_active : false ,
162+ hmd_compositor_paced : false ,
163163 vsync : VsyncMode :: Off ,
164164 window_has_keyboard_focus : true ,
165165 foreground_fps_cap : 60 ,
@@ -179,7 +179,7 @@ mod tests {
179179 let plan = plan_redraw ( RedrawInputs {
180180 has_window : true ,
181181 exit_requested : false ,
182- vr_active : false ,
182+ hmd_compositor_paced : false ,
183183 vsync : VsyncMode :: Off ,
184184 window_has_keyboard_focus : false ,
185185 foreground_fps_cap : 60 ,
@@ -203,7 +203,7 @@ mod tests {
203203 let plan = plan_redraw ( RedrawInputs {
204204 has_window : true ,
205205 exit_requested : false ,
206- vr_active : false ,
206+ hmd_compositor_paced : false ,
207207 vsync : VsyncMode :: Off ,
208208 window_has_keyboard_focus : true ,
209209 foreground_fps_cap : 30 ,
@@ -218,13 +218,13 @@ mod tests {
218218 }
219219
220220 #[ test]
221- fn redraw_plan_redraws_immediately_when_uncapped_or_vr ( ) {
221+ fn redraw_plan_redraws_immediately_when_uncapped_or_hmd_paced ( ) {
222222 let now = Instant :: now ( ) ;
223223 assert_eq ! (
224224 plan_redraw( RedrawInputs {
225225 has_window: true ,
226226 exit_requested: false ,
227- vr_active : false ,
227+ hmd_compositor_paced : false ,
228228 vsync: VsyncMode :: Off ,
229229 window_has_keyboard_focus: true ,
230230 foreground_fps_cap: 0 ,
@@ -235,21 +235,41 @@ mod tests {
235235 . decision,
236236 RedrawDecision :: RedrawNow
237237 ) ;
238- assert_eq ! (
239- plan_redraw( RedrawInputs {
240- has_window: true ,
241- exit_requested: false ,
242- vr_active: true ,
243- vsync: VsyncMode :: Off ,
244- window_has_keyboard_focus: true ,
245- foreground_fps_cap: 60 ,
246- background_fps_cap: 15 ,
247- last_frame_start: Some ( now) ,
248- now,
249- } )
250- . decision,
251- RedrawDecision :: RedrawNow
252- ) ;
238+ let hmd_paced = plan_redraw ( RedrawInputs {
239+ has_window : true ,
240+ exit_requested : false ,
241+ hmd_compositor_paced : true ,
242+ vsync : VsyncMode :: Off ,
243+ window_has_keyboard_focus : true ,
244+ foreground_fps_cap : 60 ,
245+ background_fps_cap : 15 ,
246+ last_frame_start : Some ( now) ,
247+ now,
248+ } ) ;
249+ assert_eq ! ( hmd_paced. decision, RedrawDecision :: RedrawNow ) ;
250+ assert_eq ! ( hmd_paced. fps_cap, 0 ) ;
251+ assert_eq ! ( hmd_paced. wait_ms, 0.0 ) ;
252+ }
253+
254+ #[ test]
255+ fn redraw_plan_caps_non_hmd_frames_even_after_xr_session_exists ( ) {
256+ let t0 = Instant :: now ( ) ;
257+ let now = t0 + Duration :: from_millis ( 1 ) ;
258+ let plan = plan_redraw ( RedrawInputs {
259+ has_window : true ,
260+ exit_requested : false ,
261+ hmd_compositor_paced : false ,
262+ vsync : VsyncMode :: Off ,
263+ window_has_keyboard_focus : true ,
264+ foreground_fps_cap : 60 ,
265+ background_fps_cap : 15 ,
266+ last_frame_start : Some ( t0) ,
267+ now,
268+ } ) ;
269+
270+ assert_eq ! ( plan. fps_cap, 60 ) ;
271+ assert ! ( matches!( plan. decision, RedrawDecision :: WaitUntil ( _) ) ) ;
272+ assert ! ( plan. wait_ms > 0.0 ) ;
253273 }
254274
255275 #[ test]
@@ -260,7 +280,7 @@ mod tests {
260280 let plan = plan_redraw ( RedrawInputs {
261281 has_window : true ,
262282 exit_requested : false ,
263- vr_active : false ,
283+ hmd_compositor_paced : false ,
264284 vsync : VsyncMode :: On ,
265285 window_has_keyboard_focus,
266286 foreground_fps_cap : 60 ,
@@ -281,7 +301,7 @@ mod tests {
281301 plan_redraw( RedrawInputs {
282302 has_window: false ,
283303 exit_requested: false ,
284- vr_active : false ,
304+ hmd_compositor_paced : false ,
285305 vsync: VsyncMode :: Off ,
286306 window_has_keyboard_focus: true ,
287307 foreground_fps_cap: 60 ,
@@ -296,7 +316,7 @@ mod tests {
296316 plan_redraw( RedrawInputs {
297317 has_window: true ,
298318 exit_requested: true ,
299- vr_active : true ,
319+ hmd_compositor_paced : true ,
300320 vsync: VsyncMode :: Off ,
301321 window_has_keyboard_focus: true ,
302322 foreground_fps_cap: 60 ,
0 commit comments