kms: Skip overlay tests on fullscreen
This commit is contained in:
parent
0be83fe930
commit
74c7a216f5
1 changed files with 22 additions and 12 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue