https://bugs.kde.org/show_bug.cgi?id=487043
Méven Car <meve...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |meve...@gmail.com --- Comment #15 from Méven Car <meve...@gmail.com> --- (In reply to Fabian Vogt from comment #14) > 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. Relevant documentation: https://doc.qt.io/qt-5/qmldiskcache.html Another workaround would be to use `export QML_DISK_CACHE_PATH=/tmp/qmlcache` where /tmp/qmlcache is a fast drive or a ramdisk. For some reason (that I don't know but there is probably one) we don't use `qt_add_qml_module` in plasma and kwin, that does pre-compile the js/qml/C++-binding and embedded it in the executable resources: https://doc.qt.io/qt-6/qt-add-qml-module.html#caching-compiled-qml-sources We do use it in applications (spectacle, neochat...). -- You are receiving this mail because: You are watching all bug changes.