-
Notifications
You must be signed in to change notification settings - Fork 103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix stuck-frame-after-mode-switch bug #3673
Conversation
When we perform a mode switch Mir first tears down all the `Compositor`s, does the switch, and then creates a new set of `Compositor`s, one for each output. But, in the buffer queue code, we track which `Compositor`s have accessed the “current” buffer of a surface, and only advance to the most recently submitted buffer when the `Compositor` had already seen the current one. After the mode switch, *all* the `Compositor`s are new, so *none* of them will have seen the “current” buffer, and so will not receive the most recently submitted client buffer until something else triggers a new composite pass. The buffer queue code is going to need to change significantly in the forseeable future to accomodate the requirements of some Wayland extensions, so work around this problem by having each `Compositor` thread mark itself as a user of the “current” buffer on construction, so the first composition pass will receive the most recent buffer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code and new docs look good. @Saviq does this fix the issue on your end?
Edit: Tried to see if I can test on my set up using the built-in display. Mir is convinced it only supports 1920x1080@144 Hz :/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixes the issue I saw (display stuck after refresh rate changes until the compositor redraws).
# rc1 * New upstream release 2.19.0 - ABI summary: . miral ABI unchanged at 7 . mircommon ABI unchanged at 10 . mircore ABI unchanged at 2 . miroil ABI unchanged at 5 . mirplatform ABI bumped to 30 . mirserver ABI bumped to 61 . mirwayland ABI unchanged at 5 . mirplatformgraphics ABI unchanged at 22 . mirinputplatform ABI unchanged at 9 - Enhancements: . [x11-kiosk] defer fullscreening of applications until they are placed once (#3670) . [x11-kiosk] Ensure windows are placed and repainted on X11 "CONFIGURE" (#3619) . [x11-kiosk] change enable-x11 default to true . Initial atomic-kms platform . [Wayland] Add support for xdg_activation_v1 (#3639) . Do not default window size (especially to weird values) (#3623) . DesktopFileManager::resolve_app_id no longer returns an app id with a .desktop file suffix (Fixes #3608) . [Configuration] Split options into global and per-module configuration (#3590) - Bugs fixed: . Ensure we always send an initial output enter (#3680) . Fix stuck-frame-after-mode-switch bug (#3673) . Fix rendering of resized XWayland applications with client side decorations (#3587) . Aspect ratios shouldn't contain zero (Fixes: #3663) . Use PkgConfig to find development headers (#3661) . Fix the inotify event handling in ReloadingYamlFileDisplayConfig::auto_reload() (#3636) . The `miral::ConfigFile` "Watcher" can be destroyed before the main loop (Fixes: #3612) . [xwayland] Don't allow clients to place X11 windows (#3622) . Surfaces track scale changes on outputs they appear on. (Fixes: #3552) . New attached windows need to be placed (#3676) ---- [Test Plan](https://canonical-mir.readthedocs-hosted.com/latest/how-to/how-to-test-mir-for-a-release/) ### Platforms || 24.04 | 24.10 | |-|-|-| | gbm-kms |@AlanGriffiths|@AlanGriffiths| | atomic-kms |@AlanGriffiths|@AlanGriffiths| | eglstream-kms |@tarek-y-ismail|| | eglstream-kms + gbm-kms hybrid |@tarek-y-ismail|| | x11 |@AlanGriffiths|@AlanGriffiths| | wayland |@AlanGriffiths|@AlanGriffiths| | virtual |@AlanGriffiths|@AlanGriffiths| ### Console Providers || 24.04 | 24.10 | |-|-|-| | vt |@AlanGriffiths|@AlanGriffiths| | logind |@AlanGriffiths|@AlanGriffiths| | minimal |@AlanGriffiths|| ### Window Manager Examples || 24.04 | 24.10 | |-|-|-| | --window-manager=floating |@AlanGriffiths|@AlanGriffiths| | --window-manager=tiling |@AlanGriffiths|| | -kiosk |@AlanGriffiths||
No description provided.