https://bugs.kde.org/show_bug.cgi?id=487043
Fabian Vogt <fab...@ritter-vogt.de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |fab...@ritter-vogt.de Status|REPORTED |CONFIRMED Ever confirmed|0 |1 --- Comment #14 from Fabian Vogt <fab...@ritter-vogt.de> --- I tried to simulate a very slow .cache using the delay device mapper module: > dd if=/dev/zero of=cachelp bs=1M count=64 > /sbin/mkfs.ext4 cachelp > sudo losetup -f cachelp > echo "0 $(sudo blockdev --getsz /dev/loop0) delay /dev/loop0 0 500)" | sudo > dmsetup create delayed > sudo mount /dev/mapper/delayed ~testuser/.cache > sudo chown testuser /home/testuser/.cache Then I ran as testuser > dbus-run-session gdb --args kwin_wayland --x11-display $DISPLAY > --exit-with-session /usr/bin/konsole Moved the window around a bit and maximised it, to make sure caches (.qmlc, ksysoca) got generated. Then I restarted kwin and maximised the konsole window and it lagged. Backtrace: Thread 1 (Thread 0x7f515559bb00 (LWP 31711) "kwin_wayland"): #0 0x00007f5158508daa in fdatasync () at /lib64/libc.so.6 #1 0x00007f5158d65d63 in QLockFile::tryLock(std::chrono::duration<long, std::ratio<1l, 1000l> >) () at /lib64/libQt6Core.so.6 #2 0x00007f515b167fd0 in QSGRhiSupport::preparePipelineCache(QRhi*, QQuickWindow*) () at /lib64/libQt6Quick.so.6 #3 0x00007f515b168d0c in QSGRhiSupport::createRhi(QQuickWindow*, QSurface*, bool) () at /lib64/libQt6Quick.so.6 #4 0x00007f515b14a763 in () at /lib64/libQt6Quick.so.6 #5 0x00007f515b14c73d in () at /lib64/libQt6Quick.so.6 #6 0x00007f515963d7e9 in QWindow::event(QEvent*) () at /lib64/libQt6Gui.so.6 #7 0x00007f5159fc2f1e in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt6Widgets.so.6 #8 0x00007f5158d8f030 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt6Core.so.6 #9 0x00007f51595eda8b in QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent*) () at /lib64/libQt6Gui.so.6 #10 0x00007f515964c05c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt6Gui.so.6 #11 0x00007f515964c1e7 in QWindowSystemInterface::flushWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt6Gui.so.6 #12 0x00007f5159627340 in QPlatformWindow::setVisible(bool) () at /lib64/libQt6Gui.so.6 #13 0x00007f515aa839b4 in () at /lib64/libQt6Qml.so.6 #14 0x00007f515aa97936 in () at /lib64/libQt6Qml.so.6 #15 0x00007f515aa9613d in QQmlBinding::doUpdate(QQmlJavaScriptExpression::DeleteWatcher const&, QFlags<QQmlPropertyData::WriteFlag>, QV4::Scope&) () at /lib64/libQt6Qml.so.6 #16 0x00007f515aa94084 in QQmlBinding::update(QFlags<QQmlPropertyData::WriteFlag>) () at /lib64/libQt6Qml.so.6 #17 0x00007f515ab096c8 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) () at /lib64/libQt6Qml.so.6 #18 0x00007f5158de7e88 in () at /lib64/libQt6Core.so.6 #19 0x00007f515ba2479d in KWin::Window::setElectricBorderMaximizing(bool) () at /lib64/libkwin.so.6 Apparently something in Qt's Rhi has a lock file in .cache which needs to be synced to disk (/home/testuser/.cache/kwin/qtpipelinecache-x86_64-little_endian-lp64/qqpc_opengl.lck). Fortunately it's only a fdatasync and not a fsync or even sync so it only waits until that specific file data has made it to disk, but it can still block for a while. Maybe there's a way to avoid QLockFile use there. -- You are receiving this mail because: You are watching all bug changes.