https://bugs.kde.org/show_bug.cgi?id=492924

--- Comment #3 from orko <o...@igalia.com> ---
> Is it affecting Chrome negatively?

Yes you're right it still continues sending frame callbacks but it appears it
somehow ends up not releasing buffers when the window gets occluded.

For example, initially with an animation running in a chrome window, I see 3
buffers (53, 52, 51) being attached and released:
```
[2792322.937] wl_buffer#53.release()
[2792613.077]  -> wl_surface#31.attach(wl_buffer#51, 0, 0)
[2792617.577] wl_buffer#52.release()
[2792796.449]  -> wl_surface#31.attach(wl_buffer#53, 0, 0)
[2792801.144] wl_buffer#51.release()
[2793102.328]  -> wl_surface#31.attach(wl_buffer#52, 0, 0)
[2793107.900] wl_buffer#53.release()
[2793311.867]  -> wl_surface#31.attach(wl_buffer#51, 0, 0)
[2793317.832] wl_buffer#52.release()
[2793622.481]  -> wl_surface#31.attach(wl_buffer#53, 0, 0)
[2793628.009] wl_buffer#51.release()
[2793805.902]  -> wl_surface#31.attach(wl_buffer#52, 0, 0)
```

But then when the window is fully covered 2 of the buffers remain unreleased,
which halts chromium rendering:
```
[2794624.698] wl_buffer#53.release()
[2794803.251]  -> wl_surface#31.attach(wl_buffer#51, 0, 0)
[2794816.491] wl_buffer#52.release()
[2795106.495]  -> wl_surface#31.attach(wl_buffer#53, 0, 0)
[2795111.186] wl_buffer#51.release()
[2795317.602]  -> wl_surface#31.attach(wl_buffer#52, 0, 0)
[2795323.820] wl_buffer#53.release()
[2795349.909]  -> wl_surface#31.attach(wl_buffer#51, 0, 0)
[2795409.049]  -> wl_surface#31.attach(wl_buffer#53, 0, 0)
[2795409.159] wl_buffer#51.release()
... This is where the animation and the logs stop. Note #53 and #52 are not
returned ...
```

While this doesn't affect normal use cases, there is a use case in chrome that
is broken when a window is put in background, viz. the tab capture feature
where a tab is internally captured within chromium as opposed to capturing an
entire window or screen. If the window containing the tab that is being
captured is occluded the capture stops. So for instance sharing a slideshow tab
containing animations will freeze when the window is covered by another window.

Logs and videos attached here: https://cloud.igalia.com/s/CewK5bS6oyB9gjM

I did notice that firefox for instance works around this issue by creating new
buffers when previous buffers are blocked and continues to render. I could
explore something like that on the chromium-side as well. But I am also
interested to know if this is something that is unexpected in kwin and if it
could be addressed there, e.g. by not doing any throttling at all or using
`suspended` and throttling frame callbacks instead.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to