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

            Bug ID: 510621
           Summary: Frame pacing desynchronization on QtQuick-based
                    animations (Plasma desktop itself, Kirigami apps) at
                    high refresh rates (165 Hz, Radeon iGPU)
    Classification: Plasma
           Product: plasmashell
      Version First 6.4.5
       Reported In:
          Platform: Arch Linux
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: generic-performance
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: 1.0

SUMMARY

On my laptop with a **165 Hz** panel (AMD Radeon 680M, Mesa 25.2.4, Plasma
6.4.5, Qt 6.10), **QtQuick-based** Plasma elements (mostly Plasmashell itself,
Plasma settings, Discover and other Kirigami/QtQuick based apps like KMail, and
the Processes list on the System Monitor to name a few) animations, scrolling
and transitions appear **visually choppy and irregular**, as if **they were
running capped at 60 Hz despite the compositor correctly running at 165 Hz**.

**QtWidgets-based** applications (Dolphin, Kate and Konsole) and general window
movement are perfectly smooth, but QtQuick components (Plasma panel, Overview,
Kirigami apps) and also the window resizing show **irregular frame pacing**, as
if their animation timing was slightly out of sync with the compositor
(mismatched framerate?)

It looks like **QtQuick’s animation driver and KWin’s compositor clock are
slightly desynchronized**, producing micro-stutters and a “pacing mismatch”
that feels like dropped frames. The issue persists on both **Wayland** and
**X11*.

I obviously can't record any of these because screen recording also drops
frames to achieve 60 Hz and we are talking about 60+ Hz refresh rates.

STEPS TO REPRODUCE: try these

- When **resizing a window**, **most notorious in Kirigami/QtQuick apps** like
Elisa music player and Plasma settings; but **also affecting QtWidgets apps
though not as much**, only moving the window is buttery smooth but **resizing
looks choppy**, unmatching, like a lot of **dropped frames** effect which is
visually unpleasant and stressful as someone with hyperactivity.
- When **scrolling through desktops** in **Overview** mode, scrolling also
looks **60 Hz-capped and full of frame drops**
- **Scrolling though lists**. Three examples are the Plasma settings left bar,
the mail list and also through the mail contents on KMail/Kontact (which is a
Kirigami app), and even scrolling through the "All" program list on the panel
also looks jittery/choppy.
- **On the logout/shutdown screen**, while being buttery smooth most of the
time, the transition caps as well from time to time.

Or these:

# Reproduction:
1. Start a Wayland session at 165 Hz.
2. Open System Settings → Appearance → Global Theme and navigate between pages.
3. Observe inconsistent frame pacing / 60 Hz feel on transitions.
4. Suspend and resume → notice further degradation (~20–30 FPS feel).
5. Run `env QSG_INFO=1 plasmashell --replace` → logs still show correct vsync
(6.06 ms).

After **suspending** and **resuming**, **even Plasmashell** starts to look
really choppy ~20 FPS and I have to log out and back in to restore the full
refresh rate and timings as they were even if they start to dephase again.
Suspending and resuming framerate timing mismatch affects the panels, the panel
applets and the global framerate also drops, and it also tanks the graphics and
input response times.

The issues affect both Wayland and X11.

**SAMPLE TESTS:**

`plasmashell` **does** run at 165 Hz:

```
~ » env QSG_INFO=1 plasmashell --replace

qt.scenegraph.general: threaded render loop
qt.scenegraph.general: Using sg animation driver
qt.scenegraph.general: Animation Driver: using vsync: 6.06 ms
kf.svg: The theme "Ant-Dark" uses the legacy metadata.desktop. Consider
contacting the author and asking them update it to use the newer JSON format.
kf.plasma.quick: Applet preload policy set to 1
qt.scenegraph.general: Using sg animation driver
qt.scenegraph.general: Animation Driver: using vsync: 6.06 ms
qt.scenegraph.general: Creating QRhi with backend OpenGL for window
0x562534671d70 (wflags 0x801)
  Graphics API debug/validation layers: 0
  Debug markers: 0
  Timestamps: 0
  Prefer software device: 0
  Shader/pipeline cache collection: 1
qt.rhi.general: Created OpenGL context QSurfaceFormat(version 4.6, options
QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24,
redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8,
stencilBufferSize 8, samples 0, swapBehavior
QSurfaceFormat::DefaultSwapBehavior, swapInterval 1, colorSpace QColorSpace(),
profile  QSurfaceFormat::CompatibilityProfile)
qt.rhi.general: OpenGL VENDOR: AMD RENDERER: AMD Radeon Graphics (radeonsi,
rembrandt, LLVM 20.1.8, DRM 3.64, 6.17.1-arch1-1) VERSION: 4.6 (Compatibility
Profile) Mesa 25.2.4-arch1.2
qt.scenegraph.general: Created QRhi 0x7fb720001750 for window 0x562534671d70
qt.scenegraph.general: Attempting to seed pipeline cache for QRhi
0x7fb720001750 from
'/home/lito/.cache/plasmashell/qtpipelinecache-x86_64-little_endian-lp64/qqpc_opengl'
qt.rhi.general: Seeded pipeline cache with 5 program binaries
qt.scenegraph.general: MSAA sample count for the swapchain is 1. Alpha channel
requested = no.
qt.scenegraph.general: rhi texture atlas dimensions: 4096x2048
qml: QML Plugin org.kde.plasma.panelcolorizer not found. Custom blur background
will not work.
qt.scenegraph.general: Using sg animation driver
qt.scenegraph.general: Animation Driver: using vsync: 6.06 ms
qt.scenegraph.general: Creating QRhi with backend OpenGL for window
0x562535496a00 (wflags 0x200800)
  Graphics API debug/validation layers: 0
  Debug markers: 0
  Timestamps: 0
  Prefer software device: 0
  Shader/pipeline cache collection: 1
qt.rhi.general: Created OpenGL context QSurfaceFormat(version 4.6, options
QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24,
redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8,
stencilBufferSize 8, samples 0, swapBehavior
QSurfaceFormat::DefaultSwapBehavior, swapInterval 1, colorSpace QColorSpace(),
profile  QSurfaceFormat::CompatibilityProfile)
qt.rhi.general: OpenGL VENDOR: AMD RENDERER: AMD Radeon Graphics (radeonsi,
rembrandt, LLVM 20.1.8, DRM 3.64, 6.17.1-arch1-1) VERSION: 4.6 (Compatibility
Profile) Mesa 25.2.4-arch1.2
qt.scenegraph.general: Created QRhi 0x7fb6c4001750 for window 0x562535496a00
qt.scenegraph.general: Attempting to seed pipeline cache for QRhi
0x7fb6c4001750 from
'/home/lito/.cache/plasmashell/qtpipelinecache-x86_64-little_endian-lp64/qqpc_opengl'
qt.rhi.general: Seeded pipeline cache with 5 program binaries
qt.scenegraph.general: MSAA sample count for the swapchain is 1. Alpha channel
requested = yes.
qt.scenegraph.general: rhi texture atlas dimensions: 512x512
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
No QSGTexture provided from updateSampledImage(). This is wrong.
qt.scenegraph.general: animation driver switched to timer mode
qt.scenegraph.general: Using sg animation driver
qt.scenegraph.general: animation driver switched to vsync mode
```

Don't be fooled by the Panel colorizer. This happens independently if it is
enabled or not.
6.06 ms = 1000 / 6.06 Hz = 165.0165 Hz; so **Plasmashell** itself **is**
running at 165 Hz.

```
~ » qdbus org.kde.KWin /KWin supportInformation | grep -i rate

separateScreenFocus: true
Refresh Rate: 165003
```

Also confirms that it is running at 165.003, so it is a **dephased** clock,
though the problem seems to be likely that **there are parts of the Plasma
compositor**, whether it is the Wayland or not, **that cap the animations to 60
Hz** which looks like a sped up snail which doesn't look good.

EXPECTED BEHAVIOR

All QtQuick animations (Plasma Shell, Kirigami apps, etc.) should exhibit
smooth motion consistent with the compositor’s actual refresh rate (165 Hz),
matching QtWidgets and OpenGL applications.

ACTUAL BEHAVIOR

Animations appear visually capped at 60 Hz or experience irregular frame
pacing.
After suspend/resume, performance drops dramatically until restarting
Plasmashell.

SIDE NOTES

- Forcing Vulkan RHI causes unrelated rendering issues (panel failing to open).
- The issue seems to stem from a timing drift and also a framerate
cap/mismatch/bottleneck between QtQuick’s animation driver and KWin’s frame
presentation clock

**SPECS:**

**CPU**: AMD Ryzen 9 6900HX
**iGPU**: AMD Radeon 680M (**Plasma runs here**, confirmed with nvtop)
**dGPU**: NVIDIA RTX 3050 Laptop (only used for games, **Plasma doesn't use
it**)
**RAM**: 16 GB
**Monitor**: 2560x1440 @ 165 Hz, DCI-P3
**Plasma**: 6.4.5, but this comes from a long time ago and it is still not
fixed
**Qt**: 6.10.0
**KDE Frameworks**: 6.19.0
**Kernel**: 6.17.1 - **both zen and vanilla affected**
**Platform**: **both Wayland and X11 **affected**

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

Reply via email to