[devel-noble] Lomiri stutters when entering/exitting full screen mode
When, for example, I go to Gallery app and open an image, Lomiri will enter the "full screen" mode where it will hide the indicators. When that happens, the Lomiri itself stutters. By attaching with GDB when it happens, every single time I land in libjpeg's decoding function, with a backtrace indicating it's re-decoding the background image.
A binary bisect leads me to commit c4f50475 ("Fixes and adjustments in the workspace previews"). And with some trickery involving a modified version of binding-loop-tracker.py [1], I obtained a (partial) combined C++/QML stacktrace which leads me to believe that this happens because Image
's sourceSize
property is being repeatedly updated.
But I can't quite put two and two together yet, so ping @kugiigi1, the commit author, to see if maybe something pops up in your mind.
[1]: https://blog.davidedmundson.co.uk/blog/daves-qml-binding-loop-backtrace-printer/ (I'll post a modified version some day...)
[2]:
#0 - decode_mcu_DC_refine at /usr/src/libjpeg-turbo-2.1.5-2ubuntu2/jdphuff.c:480 #1 - consume_data at /usr/src/libjpeg-turbo-2.1.5-2ubuntu2/jdcoefct.c:235 #2 - jpeg_start_decompress at /usr/src/libjpeg-turbo-2.1.5-2ubuntu2/jdapistd.c:67 #3 - read_jpeg_image at qjpeghandler.cpp:378 #4 - QJpegHandlerPrivate::read at qjpeghandler.cpp:1012 #5 - QImageReader::read(QImage*) #6 - readImage at util/qquickpixmapcache.cpp:453 #7 - createPixmapDataSync at util/qquickpixmapcache.cpp:1436 #8 - QQuickPixmap::load at util/qquickpixmapcache.cpp:1703 #9 - QQuickImageBase::loadPixmap at items/qquickimagebase.cpp:319 #10 - QQuickImageBase::qt_metacall at .moc/moc_qquickimagebase_p.cpp:407 #11 - QQuickImage::qt_metacall at .moc/moc_qquickimage_p.cpp:318 #12 - QQmlGadgetPtrWrapper::write at qml/qqmlvaluetype.cpp:265 #13 - operator() at ../../include/QtQml/5.15.13/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:284 #14 - QQmlPropertyPrivate::writeValueProperty at qml/qqmlproperty.cpp:1207 #15 - QQmlBinding::slowWrite at qml/qqmlbinding.cpp:476 #16 - GenericBinding<0>::write at qml/qqmlbinding.cpp:335 #17 - QQmlNonbindingBinding::doUpdate at qml/qqmlbinding.cpp:258 [Thread 0x7ef7ff6b80 (LWP 70406) exited] [Thread 0x7f0d0fbb80 (LWP 70405) exited] [Thread 0x7f43ff6b80 (LWP 70403) exited] [Thread 0x7f0e11bb80 (LWP 70401) exited] [Thread 0x7f551dcb80 (LWP 70402) exited]Thread 1 "lomiri" received signal SIGSEGV, Segmentation fault. Downloading source file /usr/src/qtdeclarative-opensource-src-5.15.13+dfsg-1/src/qml/qml/qqmlbinding.cpp QQmlBinding::expressionIdentifier (this=) at qml/qqmlbinding.cpp:539
warning: 539 qml/qqmlbinding.cpp: No such file or directory #18 - QQmlBinding::update at qml/qqmlbinding.cpp:194 #19 - QQmlNotifier::emitNotify at qml/qqmlnotifier.cpp:104 #20 - doActivate at kernel/qobject.cpp:3817 #21 - QMetaObject::activate at kernel/qobject.cpp:3985 #22 - QQuickItem::widthChanged at .moc/moc_qquickitem.cpp:1206 #23 - QQuickItem::geometryChanged at items/qquickitem.cpp:3790 #24 - QQuickImage::geometryChanged at items/qquickimage.cpp:635 #25 - QQuickItem::setSize at items/qquickitem.cpp:7070 #26 - QQuickAnchorsPrivate::setItemSize at items/qquickanchors.cpp:435 #27 - QQuickAnchorsPrivate::fillChanged at items/qquickanchors.cpp:211 #28 - QQuickItem::geometryChanged at items/qquickitem.cpp:3780 --Type for more, q to quit, c to continue without paging--c #29 - QQuickItem::setWidth at items/qquickitem.cpp:6749 #30 - QQmlPropertyData::writeProperty at ../../include/QtQml/5.15.13/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:391 #31 - GenericBinding<6>::doStore at qml/qqmlbinding.cpp:342 #32 - GenericBinding<6>::write at qml/qqmlbinding.cpp:315 #33 - QQmlNonbindingBinding::doUpdate at qml/qqmlbinding.cpp:258 [Thread 0x7f0d90bb80 (LWP 70404) exited] [Thread 0x7f0c8ebb80 (LWP 70400) exited] [Thread 0x7f427c6b80 (LWP 70367) exited] #34 - QQmlBinding::update for file:///usr/share/lomiri//Stage/Spread/Workspaces.qml:413:21 #35 - QQmlNotifier::emitNotify at qml/qqmlnotifier.cpp:104 #36 - doActivate at kernel/qobject.cpp:3817 #37 - QMetaObject::activate at kernel/qobject.cpp:3998 #38 - QQmlVMEMetaObject::activate at qml/qqmlvmemetaobject.cpp:1311 #39 - QQmlVMEMetaObject::metaCall at qml/qqmlvmemetaobject.cpp:877 #40 - QQmlPropertyData::writeProperty at ../../include/QtQml/5.15.13/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:284 #41 - GenericBinding<6>::doStore at qml/qqmlbinding.cpp:342 #42 - GenericBinding<6>::write at qml/qqmlbinding.cpp:315 #43 - QQmlNonbindingBinding::doUpdate at qml/qqmlbinding.cpp:258 #44 - QQmlBinding::update for file:///usr/share/lomiri//Stage/Spread/Workspaces.qml:162:13 #45 - QQmlNotifier::emitNotify at qml/qqmlnotifier.cpp:104 #46 - doActivate at kernel/qobject.cpp:3817 #47 - QMetaObject::activate at kernel/qobject.cpp:3998 #48 - QQmlVMEMetaObject::activate at qml/qqmlvmemetaobject.cpp:1311 #49 - QQmlVMEMetaObject::metaCall at qml/qqmlvmemetaobject.cpp:877 #50 - QQmlPropertyData::writeProperty at ../../include/QtQml/5.15.13/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:284