Bug 506553

Summary: Zoom effect hurts FPS badly
Product: [Plasma] kwin Reporter: Tech-Tac <im.tech.tac>
Component: effects-variousAssignee: KWin default assignee <kwin-bugs-null>
Status: REPORTED ---    
Severity: normal CC: kdedev
Priority: NOR    
Version First Reported In: 6.4.2   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Tech-Tac 2025-07-03 19:36:39 UTC
SUMMARY
Using the zoom effect decreases FPS proportional to the zoom level and can go as low as 30FPS. It can vary depending on which windows are visible, with Firefox being the worst.

STEPS TO REPRODUCE
1. Zoom in

OBSERVED RESULT
Lag

EXPECTED RESULT
No lag
This is a basic accessibility tool you can't mess up that bad.

SOFTWARE/OS VERSIONS
Windows: 
Linux: Arch
KDE Plasma Version: 6.4.2
KDE Frameworks Version: 6.15.0
Qt Version: 6.9.1
Comment 1 Vlad Zahorodnii 2025-07-08 09:25:39 UTC
Please post the output of `qdbus org.kde.KWin /KWin supportInformation`. Also did you enable HDR or change color accuracy settings?
Comment 2 TraceyC 2025-07-08 19:20:00 UTC
Setting status, since we're waiting for a response.
Comment 3 Tech-Tac 2025-07-10 07:39:16 UTC
(In reply to Vlad Zahorodnii from comment #1)
> Please post the output of `qdbus org.kde.KWin /KWin supportInformation`.
> Also did you enable HDR or change color accuracy settings?

My monitor isn't HDR-enabled to begin with, color accuracy is set to prefer efficiency, but I almost always have night light on AND screen brightness/gamma lowered via kwin.

KWin Support Information:
The following information should be used when requesting support on e.g. https://discuss.kde.org.
It provides information about the currently running instance, which options are used,
what OpenGL driver and which effects are running.
Please post the information provided underneath this introductory text to a paste bin service
like https://paste.kde.org instead of pasting into support threads.

==========================

Version
=======
KWin version: 6.4.2
Qt Version: 6.9.1
Qt compile version: 6.9.1
XCB compile version: 1.17.0

Operation Mode: Wayland

Build Options
=============
KWIN_BUILD_DECORATIONS: yes
KWIN_BUILD_TABBOX: yes
KWIN_BUILD_ACTIVITIES: yes
HAVE_X11_XCB: yes

X11
===
Vendor: The X.Org Foundation
Vendor Release: 12401008
Protocol Version/Revision: 11/0
SHAPE: yes; Version: 0x11
RANDR: yes; Version: 0x14
Composite: yes; Version: 0x4
RENDER: yes; Version: 0xb
XFIXES: yes; Version: 0x50
SYNC: yes; Version: 0x31
RES: yes; Version: 0x12

Decoration
==========
Plugin: org.kde.klassy
Theme:
Plugin recommends border size: None
onAllDesktopsAvailable: false
alphaChannelSupported: true
closeOnDoubleClickOnMenu: false
decorationButtonsLeft: 0, 1
decorationButtonsRight: 3, 4, 5
borderSize: 0
gridUnit: 10
font: Noto Sans,10,-1,0,400,0,0,0,0,0,0,0,0,0,0,1
smallSpacing: 2
largeSpacing: 10

Output backend
==============
Name: DRM
Atomic Mode Setting on GPU 0: false

Cursor
======
themeName: BreezeX-Light
themeSize: 32

Options
=======
focusPolicy: ClickToFocus
xwaylandCrashPolicy: 1
xwaylandMaxCrashCount: 3
nextFocusPrefersMouse: false
clickRaise: true
autoRaise: false
autoRaiseInterval: 0
delayFocusInterval: 0
shadeHover: false
shadeHoverInterval: 250
separateScreenFocus: true
placement: 5
activationDesktopPolicy: SwitchToOtherDesktop
focusPolicyIsReasonable: true
borderSnapZone: 10
windowSnapZone: 10
centerSnapZone: 0
snapOnlyWhenOverlapping: false
edgeBarrier: 256
cornerBarrier: 1
rollOverDesktops: false
focusStealingPreventionLevel: 1
operationTitlebarDblClick: 5000
operationMaxButtonLeftClick: 5000
operationMaxButtonMiddleClick: 5015
operationMaxButtonRightClick: 5014
commandActiveTitlebar1: MouseRaise
commandActiveTitlebar2: MouseNothing
commandActiveTitlebar3: MouseOperationsMenu
commandInactiveTitlebar1: MouseActivateAndRaise
commandInactiveTitlebar2: MouseNothing
commandInactiveTitlebar3: MouseOperationsMenu
commandWindow1: MouseActivateRaiseOnReleaseAndPassClick
commandWindow2: MouseActivateAndPassClick
commandWindow3: MouseActivateAndPassClick
commandWindowWheel: MouseNothing
commandAll1: MouseUnrestrictedMove
commandAll2: MouseToggleRaiseAndLower
commandAll3: MouseUnrestrictedResize
keyCmdAllModKey: 16777250
doubleClickBorderToMaximize: true
condensedTitle: false
electricBorderMaximize: true
electricBorderTiling: true
electricBorderCornerRatio: 0.25
borderlessMaximizedWindows: false
killPingTimeout: 5000
compositingMode: 1
allowTearing: true
interactiveWindowMoveEnabled: true

Screen Edges
============
desktopSwitching: false
desktopSwitchingMovingClients: true
cursorPushBackDistance: 1x1
actionTopLeft: 0
actionTop: 0
actionTopRight: 0
actionRight: 0
actionBottomRight: 1
actionBottom: 0
actionBottomLeft: 5
actionLeft: 0

Screens
=======
Number of Screens: 1

Screen 0:
---------
Name: VGA-1
Enabled: 1
Geometry: 0,0,1280x1024
Physical size: 376x301mm
Scale: 1
Refresh Rate: 60020
Adaptive Sync: incapable

Compositing
===========
Compositing is active
Compositing Type: OpenGL
OpenGL vendor string: Mesa
OpenGL renderer string: AMD ARUBA (DRM 2.50.0 / 6.15.5-arch1-1, LLVM 20.1.7)
OpenGL version string: 4.5 (Core Profile) Mesa 25.1.5-arch1.1
OpenGL platform interface: EGL
OpenGL shading language version string: 4.50
Driver: Unknown
GPU class: Unknown
OpenGL version: 4.5
GLSL version: 4.50
Mesa version: 25.1.5
X server version: 1.24.1
Linux kernel version: 6.15.5
Direct rendering: Requires strict binding: no
Virtual Machine:  no
OpenGL 2 Shaders are used

Loaded Effects:
---------------
screenshot
outputlocator
colorpicker
zoom
screenedge
blur
logout
sessionquit
login
slidingpopups
windowaperture
slide
magiclamp
cube
kwin4_effect_geometry_change
frozenapp
scale
fadingpopups
dimscreen
dialogparent
wobblywindows
windowview
tileseditor
overview
highlightwindow
blendchanges
startupfeedback
systembell
screentransform
kscreen

Currently Active Effects:
-------------------------
blur

Effect Settings:
----------------
screenshot:

outputlocator:

colorpicker:

zoom:
zoomFactor: 1.2
mousePointer: 0
mouseTracking: 0
focusTrackingEnabled: false
textCaretTrackingEnabled: false
focusDelay: 350
moveFactor: 20
targetZoom: 1

screenedge:

blur:

logout:
pluginId: logout
isActiveFullScreenEffect: false

sessionquit:
pluginId: sessionquit
isActiveFullScreenEffect: false

login:
pluginId: login
isActiveFullScreenEffect: false

slidingpopups:
slideInDuration: 200
slideOutDuration: 200

windowaperture:
pluginId: windowaperture
isActiveFullScreenEffect: false

slide:
horizontalGap: 0
verticalGap: 0
slideBackground: true

magiclamp:

cube:
activeView:
delegate:
data:
configuration:
visible: false
activated: false
animationDuration: 200
mainDelegate:

kwin4_effect_geometry_change:
pluginId: kwin4_effect_geometry_change
isActiveFullScreenEffect: false

frozenapp:
pluginId: frozenapp
isActiveFullScreenEffect: false

scale:
pluginId: scale
isActiveFullScreenEffect: false

fadingpopups:
pluginId: fadingpopups
isActiveFullScreenEffect: false

dimscreen:
pluginId: dimscreen
isActiveFullScreenEffect: false

dialogparent:
pluginId: dialogparent
isActiveFullScreenEffect: false

wobblywindows:
stiffness: 0.15
drag: 0.8
moveFactor: 0.15
xTesselation: 20
yTesselation: 20
minVelocity: 0
maxVelocity: 1000
stopVelocity: 0.5
minAcceleration: 0
maxAcceleration: 1000
stopAcceleration: 0.5
moveWobble: true
resizeWobble: true

windowview:
activeView:
delegate:
animationDuration: 300
ignoreMinimized: false
mode: ModeAllDesktops
partialActivationFactor: 0
gestureInProgress: false
searchText:
selectedIds:

tileseditor:
activeView:
delegate:
animationDuration: 200

overview:
activeView:
delegate:
animationDuration: 300
ignoreMinimized: false
filterWindows: true
organizedGrid: true
overviewPartialActivationFactor: 0
overviewGestureInProgress: false
transitionPartialActivationFactor: 0
transitionGestureInProgress: false
gridPartialActivationFactor: 0
gridGestureInProgress: false
desktopOffset:
searchText:

highlightwindow:

blendchanges:

startupfeedback:
type: 1

systembell:

screentransform:

kscreen:


Loaded Plugins:
---------------
BounceKeysPlugin
KeyNotificationPlugin
MouseKeysPlugin
StickyKeysPlugin
TouchpadShortcutsPlugin
buttonsrebind
eis
krunnerintegration
nightlight
screencast

Available Plugins:
------------------
BounceKeysPlugin
KeyNotificationPlugin
MouseKeysPlugin
StickyKeysPlugin
TouchpadShortcutsPlugin
buttonsrebind
eis
krunnerintegration
nightlight
screencast
Comment 4 Tech-Tac 2025-07-29 19:51:07 UTC
I did some inspection with radeontop and merely using the Zoom effect bumps graphics pipe utilization by ~30% alone, this adds up with other composite heavy windows on-screen and begins reducing FPS below the screen's refresh rate. I've done a comparison with the Magnifier effect and magnifier seems to use a negligible amount of graphic compute by default, only around 5%. it can go up to +20% if the magnifier size is set to 1024x1024+.