commit | 69f60ea35d33ea693ae1ed6f65659943348101d7 | [log] [tgz] |
---|---|---|
author | Orko Garai <orko@igalia.com> | Thu Feb 20 00:02:22 2025 |
committer | Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com> | Thu Feb 20 00:02:22 2025 |
tree | 86c8a5709af2df7c29fc53201e8fb3e5ca22f2f8 | |
parent | ddf706819e96d077c5c6f89f66b0feffb1ed882f [diff] |
ozone/wayland: Fix edge cases when capturing tab from occluded window This change fixes two edge cases when a window containing a captured tab gets occluded: 1. Mutter blocks frame callbacks initially when window gets occluded but it doesn't send a suspended state until 3 seconds after [1]. This causes a 3 second freeze when switching workspaces, and doesn't make the window inactive, which is what the current workaround uses. The mutter developers clarified that they would prefer to retain the delay as it is not guaranteed to indicate the "occlusion" transition as per the protocol. So a different client-side fix is added here instead, where a timer is used to detect the frame callback freeze, and playback is continued without waiting for frame callbacks. 2. In kwin instead of frame callbacks being blocked on window occlusion [2], buffers get blocked instead which was freezing the tab capture completely when switching away from workspace containing the captured tab, but in recent plasma (tested on 6.2.5) it at least seems to send SUSPENDED state now, at the end of the workspace transition. So another workaround is added here to clear submitted buffers of all submitted frames, and not just the last submitted frame, when the suspended state is received and playback can continue without sending surface commits to wayland as before. This makes the capture continue when switching workspaces in KDE. There is still a tiny freeze in KDE during the workspace animation until the suspended state is received, but that is not too severe. In order to fix the issue for that tiny delay or older KDE versions that don't send suspended state, a follow-up fix may be added that can track timeouts for buffer releases as well. [1] https://gitlab.gnome.org/GNOME/mutter/-/issues/3663 [2] https://bugs.kde.org/show_bug.cgi?id=492924 Bug: 364197252 Change-Id: Ie055187f5cad8f116f5b0a34fb91c217cf9492f5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6258396 Reviewed-by: Kramer Ge <fangzhoug@chromium.org> Commit-Queue: Orko Garai <orko@igalia.com> Cr-Commit-Position: refs/heads/main@{#1422264}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone
! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure.
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.
If you found a bug, please file it at https://crbug.com/new.