Call frameRendered for undamaged Wayland surfaces
Currently, if a Wayland surface registers a frame callback but does not send a damage event, the callback will not be serviced even after KWin has completed a compositing cycle and is therefore ready to render a new frame for the surface. Since some clients, including any using NVIDIA's Wayland EGL implementation, wait for frame events before preparing each frame this behavior can result in hangs if a compositing cycle occurs between registering the frame callback and sending the damage event. Instead, in accordance with the Wayland specification, frame callbacks should be serviced (via KWayland::Server::SurfaceInterface::frameRendered) for all visible windows - not just those damaged since the last compositing cycle.
This commit is contained in:
parent
18dd0327c2
commit
f294e7a035
1 changed files with 1 additions and 1 deletions
|
@ -764,7 +764,7 @@ void Compositor::performCompositing()
|
|||
m_timeSinceStart += m_timeSinceLastVBlank;
|
||||
|
||||
if (waylandServer()) {
|
||||
for (Toplevel *win : qAsConst(damaged)) {
|
||||
for (Toplevel *win : qAsConst(windows)) {
|
||||
if (auto surface = win->surface()) {
|
||||
surface->frameRendered(m_timeSinceStart);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue