Frameworks & Performance Question

Mark Gaiser markg85 at gmail.com
Sun Dec 29 22:04:41 UTC 2013


On Sun, Dec 29, 2013 at 8:07 PM, Christoph Cullmann <cullmann at absint.com> wrote:
> Hi,
>
> if I play around with Kate on KF5, it laggs like hell the whole time.
>
> I tried to profile, but guess I am stuck a bit.
>
> Interesting is that most times you see it lag and you interrupt it then, it hangs around in:
>
> #0  0x00007ffff3fc1a90 in operator< (k1=..., k2=...) at /home/cullmann/local/kf5/src/frameworks/kconfig/src/core/kconfigdata.h:126
> #1  0x00007ffff3fc4cce in qMapLessThanKey<KEntryKey> (key1=..., key2=...) at /usr/include/qt5/QtCore/qmap.h:75
> #2  0x00007ffff3fc4c6d in QMapNode<KEntryKey, KEntry>::lowerBound (this=0xab2ca0, akey=...) at /usr/include/qt5/QtCore/qmap.h:145
> #3  0x00007ffff3fc3d66 in QMapData<KEntryKey, KEntry>::findNode (this=0x1086100, akey=...) at /usr/include/qt5/QtCore/qmap.h:292
> #4  0x00007ffff3fc8c9e in QMap<KEntryKey, KEntry>::find (this=0x647628, akey=...) at /usr/include/qt5/QtCore/qmap.h:844
> #5  0x00007ffff3fc733a in KEntryMap::findExactEntry (this=0x647628, group=..., key=..., flags=...) at /home/cullmann/local/kf5/src/frameworks/kconfig/src/core/kconfigdata.cpp:45
> #6  0x00007ffff3fc7695 in KEntryMap::setEntry (this=0x647628, group=..., key=..., value=..., options=...)
>     at /home/cullmann/local/kf5/src/frameworks/kconfig/src/core/kconfigdata.cpp:90
> #7  0x00007ffff3fd4f74 in KConfigIniBackend::parseConfig (this=0x689850, currentLocale=..., entryMap=..., options=..., merging=false)
>     at /home/cullmann/local/kf5/src/frameworks/kconfig/src/core/kconfigini.cpp:270
> #8  0x00007ffff3fd3ef8 in KConfigIniBackend::parseConfig (this=0x689850, currentLocale=..., entryMap=..., options=...)
>     at /home/cullmann/local/kf5/src/frameworks/kconfig/src/core/kconfigini.cpp:66
> #9  0x00007ffff3fbf3bc in KConfigPrivate::parseConfigFiles (this=0x647600) at /home/cullmann/local/kf5/src/frameworks/kconfig/src/core/kconfig.cpp:711
> #10 0x00007ffff3fbeaa0 in KConfig::reparseConfiguration (this=0x688130) at /home/cullmann/local/kf5/src/frameworks/kconfig/src/core/kconfig.cpp:633
> #11 0x00007fffe5bad6b7 in KStyle::styleHint (this=0x658da0, hint=QStyle::SH_Widget_ShareActivation, option=0x0, widget=0x9f2050, returnData=0x0)
>     at /home/cullmann/local/kf5/src/frameworks/frameworkintegration/src/kstyle/kstyle.cpp:338
> #12 0x00007fffe5e12afe in Oxygen::Style::styleHint (this=0x658da0, hint=<optimized out>, option=0x0, widget=<optimized out>, returnData=0x0)
>     at /home/cullmann/local/kf5/src/kde-workspace/kstyles/oxygen/oxygenstyle.cpp:873
> #13 0x00007ffff31f798a in QWidget::isActiveWindow() const () from /usr/lib64/libQt5Widgets.so.5
> #14 0x00007ffff31f7b25 in QWidget::palette() const () from /usr/lib64/libQt5Widgets.so.5
> #15 0x00007ffff3206ab8 in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #16 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #17 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #18 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #19 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #20 0x00007ffff33599d7 in QStatusBar::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #21 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #22 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #23 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #24 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #25 0x00007ffff330231e in QFrame::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #26 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #27 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #28 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #29 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #30 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #31 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #32 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #33 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #34 0x00007ffff330231e in QFrame::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #35 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #36 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #37 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #38 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #39 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #40 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #41 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #42 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> ---Type <return> to continue, or q <return> to quit---
> #43 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #44 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #45 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #46 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #47 0x00007ffff330231e in QFrame::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #48 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #49 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #50 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #51 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #52 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #53 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #54 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #55 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #56 0x00007ffff330231e in QFrame::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #57 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #58 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #59 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #60 0x00007ffff320683b in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #61 0x00007ffff331784b in QMainWindow::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #62 0x00007ffff638cc3d in KMainWindow::event (this=0x8976b0, ev=0x7fffffffd100) at /home/cullmann/local/kf5/src/frameworks/kxmlgui/src/kmainwindow.cpp:840
> #63 0x00007ffff63ca0db in KXmlGuiWindow::event (this=0x8976b0, ev=0x7fffffffd100) at /home/cullmann/local/kf5/src/frameworks/kxmlgui/src/kxmlguiwindow.cpp:118
> #64 0x00007ffff31cb0bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #65 0x00007ffff31d0286 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
> #66 0x00007ffff1f4d2cd in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
> #67 0x00007ffff31cdadb in QApplication::setActiveWindow(QWidget*) () from /usr/lib64/libQt5Widgets.so.5
> #68 0x00007ffff28f2ad9 in QGuiApplicationPrivate::processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent*) () from /usr/lib64/libQt5Gui.so.5
> #69 0x00007ffff28f2de5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib64/libQt5Gui.so.5
> #70 0x00007ffff28dbdb8 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Gui.so.5
> #71 0x00007fffe94e3960 in ?? () from /usr/lib64/qt5/plugins/platforms/libqxcb.so
> #72 0x00007fffed33d316 in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
> #73 0x00007fffed33d668 in ?? () from /usr/lib64/libglib-2.0.so.0
> #74 0x00007fffed33d70c in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
> #75 0x00007ffff1f9a08c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Core.so.5
> #76 0x00007ffff1f4bffb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Core.so.5
> #77 0x00007ffff1f527b1 in QCoreApplication::exec() () from /usr/lib64/libQt5Core.so.5
> #78 0x00007ffff7bd60a7 in kdemain (argc=1, argv=<optimized out>) at /home/cullmann/local/kf5/kate/kate/app/katemain.cpp:447
> #79 0x00007ffff116abe5 in __libc_start_main () from /lib64/libc.so.6
> #80 0x0000000000400a91 in _start () at ../sysdeps/x86_64/start.S:122
>
> It seems on nearly each event (like windows resize, ...) again and again the reparseConfiguration code path is called.
>
> I use current KF5 frameworks (yesterday build from scratch) and a Qt 5.2.0 build.
>
> Any clue what I could try to fix that would be really great.
>
> Greetings
> Christoph
>

What you see there are sorting operations:
> #1  0x00007ffff3fc4cce in qMapLessThanKey<KEntryKey> (key1=..., key2=...) at /usr/include/qt5/QtCore/qmap.h:75

But what i don't get is that it "seems" to be coming from config
files. Those aren't usually big and certainly don't take a notable
time when being parsed/sorted.. You could do a trace on kate to see
which files it is reading.

I'm just guessing here btw. I hope someone else can provide a more
educated answer for you :)


More information about the Kde-frameworks-devel mailing list