@@ -974,10 +974,8 @@ impl SurfaceThreadState {
974974
975975 self . timings . start_render ( & self . clock ) ;
976976
977- let mut vrr = match self . vrr_mode {
978- AdaptiveSync :: Force => true ,
979- _ => false ,
980- } ;
977+ let mut additional_frame_flags = FrameFlags :: empty ( ) ;
978+ let mut remove_frame_flags = FrameFlags :: empty ( ) ;
981979
982980 let has_active_fullscreen = {
983981 let shell = self . shell . read ( ) . unwrap ( ) ;
@@ -989,6 +987,16 @@ impl SurfaceThreadState {
989987 }
990988 } ;
991989
990+ if has_active_fullscreen {
991+ // skip overlay plane assign if we have a fullscreen surface to save on tests
992+ remove_frame_flags |= FrameFlags :: ALLOW_OVERLAY_PLANE_SCANOUT ;
993+ }
994+
995+ let mut vrr = match self . vrr_mode {
996+ AdaptiveSync :: Force => true ,
997+ _ => false ,
998+ } ;
999+
9921000 if self . vrr_mode == AdaptiveSync :: Enabled {
9931001 vrr = has_active_fullscreen;
9941002 }
@@ -1008,12 +1016,10 @@ impl SurfaceThreadState {
10081016 . map_err ( |err| {
10091017 anyhow:: format_err!( "Failed to accumulate elements for rendering: {:?}" , err)
10101018 } ) ?;
1011- let additional_frame_flags =
1012- if vrr && has_active_fullscreen && !self . timings . past_min_render_time ( & self . clock ) {
1013- FrameFlags :: SKIP_CURSOR_ONLY_UPDATES
1014- } else {
1015- FrameFlags :: empty ( )
1016- } ;
1019+
1020+ if vrr && has_active_fullscreen && !self . timings . past_min_render_time ( & self . clock ) {
1021+ additional_frame_flags |= FrameFlags :: SKIP_CURSOR_ONLY_UPDATES ;
1022+ } ;
10171023 self . timings . set_vrr ( vrr) ;
10181024 self . timings . elements_done ( & self . clock ) ;
10191025
@@ -1382,7 +1388,9 @@ impl SurfaceThreadState {
13821388 & mut renderer,
13831389 & elements,
13841390 [ 0.0 , 0.0 , 0.0 , 0.0 ] ,
1385- self . frame_flags . union ( additional_frame_flags) ,
1391+ self . frame_flags
1392+ . union ( additional_frame_flags)
1393+ . difference ( remove_frame_flags) ,
13861394 )
13871395 } else {
13881396 if let Err ( err) = compositor. with_compositor ( |c| c. use_vrr ( vrr) ) {
@@ -1392,7 +1400,9 @@ impl SurfaceThreadState {
13921400 & mut renderer,
13931401 & elements,
13941402 CLEAR_COLOR , // TODO use a theme neutral color
1395- self . frame_flags . union ( additional_frame_flags) ,
1403+ self . frame_flags
1404+ . union ( additional_frame_flags)
1405+ . difference ( remove_frame_flags) ,
13961406 )
13971407 } ;
13981408 self . timings . draw_done ( & self . clock ) ;
0 commit comments