kms: Skip overlay tests on fullscreen

This commit is contained in:
Victoria Brekenfeld 2025-04-28 17:51:30 +02:00 committed by Victoria Brekenfeld
parent 0be83fe930
commit 74c7a216f5

View file

@ -974,10 +974,8 @@ impl SurfaceThreadState {
self.timings.start_render(&self.clock); self.timings.start_render(&self.clock);
let mut vrr = match self.vrr_mode { let mut additional_frame_flags = FrameFlags::empty();
AdaptiveSync::Force => true, let mut remove_frame_flags = FrameFlags::empty();
_ => false,
};
let has_active_fullscreen = { let has_active_fullscreen = {
let shell = self.shell.read().unwrap(); let shell = self.shell.read().unwrap();
@ -989,6 +987,16 @@ impl SurfaceThreadState {
} }
}; };
if has_active_fullscreen {
// skip overlay plane assign if we have a fullscreen surface to save on tests
remove_frame_flags |= FrameFlags::ALLOW_OVERLAY_PLANE_SCANOUT;
}
let mut vrr = match self.vrr_mode {
AdaptiveSync::Force => true,
_ => false,
};
if self.vrr_mode == AdaptiveSync::Enabled { if self.vrr_mode == AdaptiveSync::Enabled {
vrr = has_active_fullscreen; vrr = has_active_fullscreen;
} }
@ -1008,12 +1016,10 @@ impl SurfaceThreadState {
.map_err(|err| { .map_err(|err| {
anyhow::format_err!("Failed to accumulate elements for rendering: {:?}", err) anyhow::format_err!("Failed to accumulate elements for rendering: {:?}", err)
})?; })?;
let additional_frame_flags =
if vrr && has_active_fullscreen && !self.timings.past_min_render_time(&self.clock) { if vrr && has_active_fullscreen && !self.timings.past_min_render_time(&self.clock) {
FrameFlags::SKIP_CURSOR_ONLY_UPDATES additional_frame_flags |= FrameFlags::SKIP_CURSOR_ONLY_UPDATES;
} else { };
FrameFlags::empty()
};
self.timings.set_vrr(vrr); self.timings.set_vrr(vrr);
self.timings.elements_done(&self.clock); self.timings.elements_done(&self.clock);
@ -1382,7 +1388,9 @@ impl SurfaceThreadState {
&mut renderer, &mut renderer,
&elements, &elements,
[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0],
self.frame_flags.union(additional_frame_flags), self.frame_flags
.union(additional_frame_flags)
.difference(remove_frame_flags),
) )
} else { } else {
if let Err(err) = compositor.with_compositor(|c| c.use_vrr(vrr)) { if let Err(err) = compositor.with_compositor(|c| c.use_vrr(vrr)) {
@ -1392,7 +1400,9 @@ impl SurfaceThreadState {
&mut renderer, &mut renderer,
&elements, &elements,
CLEAR_COLOR, // TODO use a theme neutral color CLEAR_COLOR, // TODO use a theme neutral color
self.frame_flags.union(additional_frame_flags), self.frame_flags
.union(additional_frame_flags)
.difference(remove_frame_flags),
) )
}; };
self.timings.draw_done(&self.clock); self.timings.draw_done(&self.clock);