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.

Reply via email to