wl_surface: don't request vblank if there are no new frame requests
This commit is contained in:
parent
388a4d1c94
commit
cccd53b12e
1 changed files with 6 additions and 6 deletions
|
|
@ -1290,11 +1290,11 @@ impl WlSurface {
|
||||||
damage_full = true;
|
damage_full = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let has_frame_requests = {
|
let has_new_frame_requests = pending.frame_request.is_not_empty();
|
||||||
|
{
|
||||||
let frs = &mut *self.frame_requests.borrow_mut();
|
let frs = &mut *self.frame_requests.borrow_mut();
|
||||||
frs.append(&mut pending.frame_request);
|
frs.append(&mut pending.frame_request);
|
||||||
frs.is_not_empty()
|
}
|
||||||
};
|
|
||||||
let has_presentation_feedback = {
|
let has_presentation_feedback = {
|
||||||
let mut fbs = self.presentation_feedback.borrow_mut();
|
let mut fbs = self.presentation_feedback.borrow_mut();
|
||||||
for fb in fbs.drain(..) {
|
for fb in fbs.drain(..) {
|
||||||
|
|
@ -1349,7 +1349,7 @@ impl WlSurface {
|
||||||
}
|
}
|
||||||
if self.visible.get() {
|
if self.visible.get() {
|
||||||
let output = self.output.get();
|
let output = self.output.get();
|
||||||
if has_frame_requests {
|
if has_new_frame_requests {
|
||||||
self.vblank_listener.attach(&output.vblank_event);
|
self.vblank_listener.attach(&output.vblank_event);
|
||||||
}
|
}
|
||||||
if has_presentation_feedback || fifo_barrier_set {
|
if has_presentation_feedback || fifo_barrier_set {
|
||||||
|
|
@ -1369,10 +1369,10 @@ impl WlSurface {
|
||||||
self.client.state.damage(damage);
|
self.client.state.damage(damage);
|
||||||
} else if pending.has_damage() {
|
} else if pending.has_damage() {
|
||||||
self.apply_damage(pending);
|
self.apply_damage(pending);
|
||||||
if has_frame_requests {
|
if has_new_frame_requests {
|
||||||
output.global.connector.damage();
|
output.global.connector.damage();
|
||||||
}
|
}
|
||||||
} else if has_frame_requests && output.schedule.vrr_enabled() {
|
} else if has_new_frame_requests && output.schedule.vrr_enabled() {
|
||||||
// Frame requests must be dispatched at the highest possible frame rate.
|
// Frame requests must be dispatched at the highest possible frame rate.
|
||||||
// Therefore we must trigger a vsync of the output as soon as possible.
|
// Therefore we must trigger a vsync of the output as soon as possible.
|
||||||
let rect = output.global.pos.get();
|
let rect = output.global.pos.get();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue