Solution
This is a bug in KDE Plasma [1.1][2]. It appears that it might be fixed in KDE Plasma v6.2 [1.2][3].
Original Post
I have noticed this behavior with Element and Signal while playing Deadlock. The game will have a pretty severe stutter, ie the frame-rate will substantially dip, for half a second or so at the exact moment that a message is received. It seems to happen with every message. Do note that these are only messages that would result in a system notification. All other messages that are silent, ie they have no pop-up notification, do not result in any stutter.
- OS: Arch Linux, Kernel: v6.6.49-1-lts
- DE: KDE Plasma v6.1.4
- WM: Wayland
- CPU: Intel Core i5-4690k
- GPU: AMD Radeon RX 6600
Updates
- I have tried disabling this setting in Deadlock:
- I have tried windowed-borderless
- I have noticed that the moment that the stutter occurs, my CPU spikes maybe 20% and my GPU drops to 0%.
References
- @[email protected]. “Have you ever experienced stuttering in a game if you receive a message in a desktop messaging app during gameplay?”. sh.itjust.works. Lemmy. Published: 2024-09-09T23:12:24Z. Accessed: 2024-09-10T00:03Z. https://sh.itjust.works/comment/13818926. https://lemm.ee/comment/14674507.
-
it’s a bug in KDE Plasma
-
[the bug] might be fixed [in KDE Plasma] 6.2
-
- “Bug 487780: Fullscreen game stutter when Plasma receives notifications.”. Robert. bugs.kde.org. Published: 2024-05-30T03:58Z. Accessed: 2024-09-10T00:06Z. https://bugs.kde.org/show_bug.cgi?id=487780.
- Zamundaaa. “Bug 487780: Fullscreen game stutter when Plasma receives notifications.”. bugs.kde.org. Published: 2024-08-19T12:01:08Z. Accessed: 2024-09-10T00:13Z. https://bugs.kde.org/show_bug.cgi?id=487780#c13.
There are some remaining code paths that can block direct scanout - namely effects that haven’t been fixed, or that may need to block direct scanout in some situations. There’s a new API in 6.2 that effects can use though, https://invent.kde.org/plasma/kwin/-/merge_requests/6203, which blocks direct scanout only when really necessary. It’s implemented for all built in effects, and external javascript effects automatically make use of this API too.
Thank you! Solved!