Reproducible display freezes and frame jumps associated with page-flip failures
bug
## Issue
### Steps to reproduce
1. Start Sway with upstream default configuration.
2. Open a terminal emulator.
3. Open a long document in Vim or Neovim.
4. Scroll through the document with `Ctrl+F` or `Ctrl+B` for a minute or two.
### Expected behavior
Smooth scrolling, if holding down `Ctrl+F` or `Ctrl+B`, or, if pressing `Ctrl+F` or `Ctrl+B` repeatedly, an instant jump each time.
### Actual behavior
Sway (or at least the contents of the window) frequently freezes momentarily, and then jumps forward or backward a few pages. Whenever this occurs, Sway emits the following error:
```
01:07:54.832 [ERROR] [wlr] [backend/drm/atomic.c:82] connector eDP-1: Atomic commit failed: Device or resource busy
01:07:54.832 [ERROR] [sway/desktop/output.c:307] Page-flip failed on output eDP-1
```
#### Logs
(I followed the wlroots DRM debugging guidelines.)
- [sway.log](https://github.com/user-attachments/files/28814242/sway.log)
- [dmesg.log](https://github.com/user-attachments/files/28814254/dmesg.log)
### Related
The symptoms match #7519, which @emersion suggested was connected to https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3507. Although the symptoms match, I'm opening a new issue because my issue is occurring in a different context – in particular, I'm using the Intel xe driver, not the i915 driver.
## System
- Sway version: 1.12 (with the default configuration)
- Kernel version: 7.0.11-hardened2-1-hardened
- Mesa version: 26.1.2
- DRM driver: xe
- GPU: Intel Lunar Lake
## Observations
I tried to reproduce the issue under a variety of circumstances:
- I was able to reproduce the issue in both Vim and Neovim. (The issue is observable in other circumstances as well – e.g. after pressing `Enter` at the command line prompt, or while paging through a man page. Scrolling through a document in Vim or Neovim is just the easiest way I've found to get the freezes to occur.)
- I was able to reproduce the issue in both kitty (my usual terminal emulator) and foot.
- I was able to reproduce the issue both on an external monitor and on my laptop's built-in monitor.
- According to `gputop`, minimal GPU resources were used when reproducing the issue (<1%).
- I was not able to reproduce the issue in `tinywl`.
- I was not able to reproduce the issue in Hyprland, the only non-wlroots compositor I tried.
- I was not able to reproduce the issue in i3.
The `tinywl` result in particular shows that not all wlroots compositors suffer from this issue, which is why I'm reporting this as a Sway issue first. The fact that I can't reproduce the issue in Hyprland or i3 at least goes to show that the issue isn't caused by some general defect of my system. And the fact that I can reproduce the issue in multiple terminal emulators and text editors goes to show that the issue isn't being caused by the software used to reproduce the issue.
## Further context
I have experienced symptoms of this sort in the past (including on an older machine where I was using the i915 driver), and so I always used to use the legacy DRM backend by setting `WLR_DRM_NO_ATOMIC`, as is suggested by some of the folks commenting on #7519. For some reason, I am no longer able to use the legacy DRM backend as of wlroots 0.20 and Sway 1.12, and so now I am experiencing the issue again (or experiencing a different issue with similar symptoms).
The fact that the legacy DRM backend doesn't work for me is a separate issue, but I'll describe it briefly here **just in case** it helps isolate the cause of the issue I'm reporting. Since wlroots 0.20 and Sway 1.12, when I start Sway with the legacy DRM backend, I just get a black screen. It's not easy for me to parse the logs, but it looks as if Sway gives up on finding a valid configuration for my monitor (both with my actual config and the vanilla config) and therefore never activates it. **Just in case** it's useful, here is a Sway debug log and a DRM debug log of what happens when I try to start Sway with the legacy DRM backend.
- [sway.log](https://github.com/user-attachments/files/28814312/sway.log)
- [dmesg.log](https://github.com/user-attachments/files/28814346/dmesg.log)
Thank you for your work!
1 条评论