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.

Reply via email to