[Bug 689489] New: Konqueror scrolling is rough and appears to freeze sometimes, with high CPU load
https://bugzilla.novell.com/show_bug.cgi?id=689489 https://bugzilla.novell.com/show_bug.cgi?id=689489#c0 Summary: Konqueror scrolling is rough and appears to freeze sometimes, with high CPU load Classification: openSUSE Product: openSUSE 12.1 Version: Factory Platform: x86-64 OS/Version: Other Status: NEW Severity: Normal Priority: P5 - None Component: KDE4 Applications AssignedTo: kde-maintainers@suse.de ReportedBy: vlukas@gmx.de QAContact: qa@suse.de Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (compatible; Konqueror/4.6; Linux) KHTML/4.6.2 (like Gecko) SUSE I am using KDE 4.6.2 straight from the Opensuse Factory distribution. I experience a strange responsiveness problem with Konqueror: Scrolling appears to be rough and under specific circumstances Konqueror appears to freeze completely for many seconds, with high CPU usage. This problem is not about animated or Javascript intensive web content, it happens on "plain" websites (see "Steps to Reproduce"). Strangely, this only happens when I use the Qt library, and some related libraries, from the main Opensuse-Factory repository (http://download.opensuse.org/factory/repo/oss/). It does not happen when using the Qt packages from http://download.opensuse.org/repositories/KDE:/Qt47/openSUSE_Factory/. The most recently published packages are not the only ones which are affected, I saw the same behavior already in March this year: Packages from http://download.opensuse.org/factory/repo/oss/ lead to the problem, those from http://download.opensuse.org/repositories/KDE:/Qt47/openSUSE_Factory/ do not. The problem might span back in time more, but I can not say definitely. This is the full list of packages which, when changed between the two different repositories, make the problem appear or disappear: ----------------------------------------------------------- $rpm -qa | grep "libqt4\|qt4-x11\|qt4-qtscript\|QtWeb\|qca2" | sort libqca2-2.0.2-13.2.x86_64 libqca2-debuginfo-2.0.2-13.2.x86_64 libqca2-debugsource-2.0.2-13.2.x86_64 libqca2-devel-2.0.2-13.2.x86_64 libqt4-4.7.2-7.1.x86_64 libqt4-debuginfo-4.7.2-7.1.x86_64 libqt4-debugsource-4.7.2-7.1.x86_64 libqt4-devel-4.7.2-7.1.x86_64 libqt4-devel-debuginfo-4.7.2-7.1.x86_64 libqt4-devel-doc-4.7.2-7.1.x86_64 libqt4-devel-doc-data-4.7.2-7.1.noarch libqt4-devel-doc-debuginfo-4.7.2-7.1.x86_64 libqt4-devel-doc-debugsource-4.7.2-7.1.x86_64 libqt4-qt3support-4.7.2-7.1.x86_64 libqt4-sql-4.7.2-7.1.x86_64 libqt4-sql-debuginfo-4.7.2-7.1.x86_64 libqt4-sql-mysql-4.7.2-7.1.x86_64 libqt4-sql-sqlite-4.7.2-7.1.x86_64 libqt4-sql-sqlite-debuginfo-4.7.2-7.1.x86_64 libqt4-x11-4.7.2-7.1.x86_64 libqt4-x11-debuginfo-4.7.2-7.1.x86_64 libQtWebKit4-4.7.2-7.1.x86_64 libQtWebKit4-debuginfo-4.7.2-7.1.x86_64 libQtWebKit-devel-4.7.2-7.1.x86_64 qt4-qtscript-0.1.0-12.1.x86_64 qt4-x11-tools-4.7.2-7.1.x86_64 ----------------------------------------------------------- Note: It is sufficient to replace libqt4 and libqt4-x11 to trigger the problem, but you have to force rpm to ignore package conflicts then. Reproducible: Always Steps to Reproduce: 1. Start Konqueror 2. Load http://download.opensuse.org/factory/repo/oss/suse/x86_64/ 3. Click on the column heading "Last modified" 4. While the page loads, attempt to use the vertical scrollbar to scroll up and down a few times. 5. After having tried to move the slider a bit, leave Konqueror alone. Actual Results: It can be observed, through the "top" command for example, that Konqueror uses almost 100% CPU time, and continues to do so for some seconds, even when you have stopped touching the scrollbar slider or the rest of the Konqueror UI in any way. If you try to use Konqueror during the high CPU load phase, it will react very slowly, i.e. it will eventually react to user input, but after a much longer time then what can be considered reasonable. Note that the exact length of time of high CPU load and unresponsiveness depends on in what way you have used the scrollbar in step 4 of the "Steps to Reproduce" list: If you give it only one quick pull, the phase will only last a few seconds (in the one digit range). If you try to pull it up and down a few times, the phase of unresponsiveness can last 30 seconds or more. Expected Results: After having stopped touching the Konqueror UI, CPU usage should drop almost instantly (as it does when using the Qt packages from the "right" repository). While reproducing this problem multiple times, I used gdb to obtain backtraces during the phase in which Konqueror utilizes 100% CPU and noticed that execution was always ultimately in the memset function when I took a sample. Here is a sample backtrace: ----------------------------------------------------------- $gdb /usr/bin/konqueror core.4156 [...] Core was generated by `konqueror'. #0 memset () at ../sysdeps/x86_64/memset.S:1048 1048 cmp $0x80,%r8 (gdb) bt #0 memset () at ../sysdeps/x86_64/memset.S:1048 #1 0x00007fbba1d6630a in _int_free (av=0x7fbba205ae80, p=0x264dab0) at malloc.c:4935 #2 0x00007fbba1d689f1 in _int_realloc (av=0x7fbba205ae80, oldp=0x2643c90, oldsize=<optimized out>, nb=40480) at malloc.c:5347 #3 0x00007fbba1d69032 in realloc_check (oldmem=0x2643ca0, bytes=40456, caller=<optimized out>) at hooks.c:365 #4 0x00007fbb9ebbf374 in QVector<QPainterPath::Element>::realloc (this=0x2626258, asize=1680, aalloc=1685) at ../../src/corelib/tools/qvector.h:481 #5 0x00007fbb9ebc550c in QVector<QPainterPath::Element>::reserve (this=0x2626258, asize=<optimized out>) at ../../src/corelib/tools/qvector.h:328 #6 0x00007fbb9ebed920 in QPainterPath::addRect (this=0x7fff5854d100, r=...) at painting/qpainterpath.cpp:967 #7 0x00007fbb9ec905c3 in path_for_glyphs (ft=0xcaf750, positions=..., glyphs=...) at painting/qpaintengine_x11.cpp:2343 #8 QX11PaintEngine::drawFreetype (this=0xb555d0, p=<optimized out>, ti=<optimized out>) at painting/qpaintengine_x11.cpp:2462 #9 0x00007fbb9ebe13eb in QPainter::drawTextItem (this=0x7fff58552420, p=..., _ti=...) at painting/qpainter.cpp:6547 #10 0x00007fbb9ebe5229 in QPainter::drawText (this=0x7fff58552420, p=..., str=<optimized out>, tf=<optimized out>, justificationPadding=<optimized out>) at painting/qpainter.cpp:6030 #11 0x00007fbb90ccc03f in drawText (s=..., y=1869, x=80, this=0x7fff58552420) at /usr/include/QtGui/qpainter.h:957 #12 drawDirectedText (str=..., y=1869, x=80, d=Qt::LeftToRight, p=0x7fff58552420) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/font.cpp:95 #13 khtml::Font::drawText (this=0xc8f208, p=0x7fff58552420, x=80, y=1869, str=0xdd3f00, slen=32, pos=0, len=32, toAdd=0, d=Qt::LeftToRight, from=-1, to=-1, bg=..., uy=-1, h=-1, deco=0) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/font.cpp:148 #14 0x00007fbb90c94af7 in khtml::InlineTextBox::paint (this=0x17e1a58, i=..., tx=50, ty=147) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_text.cpp:181 #15 0x00007fbb90cd16a3 in khtml::InlineFlowBox::paint (this=0x17e1ab8, i=..., tx=50, ty=147) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_line.cpp:874 #16 0x00007fbb90cd16a3 in khtml::InlineFlowBox::paint (this=0x17e1960, i=..., tx=50, ty=147) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_line.cpp:874 #17 0x00007fbb90cd17b9 in khtml::RootInlineBox::paint (this=0x17e1960, i=..., tx=50, ty=147) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_line.cpp:1182 #18 0x00007fbb90c9254e in khtml::RenderFlow::paintLines (this=<optimized out>, i=..., _tx=50, _ty=147) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_flow.cpp:389 ---Type <return> to continue, or q <return> to quit--- #19 0x00007fbb90c6c80d in khtml::RenderBlock::paintObject (this=0xbaf350, pI=..., _tx=50, _ty=147, shouldPaintOutline=true) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_block.cpp:1797 #20 0x00007fbb90c6c939 in khtml::RenderBlock::paintObject (this=0xbaeb18, pI=..., _tx=50, _ty=96, shouldPaintOutline=true) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_block.cpp:1801 #21 0x00007fbb90c6c939 in khtml::RenderBlock::paintObject (this=0xbae928, pI=..., _tx=50, _ty=50, shouldPaintOutline=true) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_block.cpp:1801 #22 0x00007fbb90c6c939 in khtml::RenderBlock::paintObject (this=0xbae7a8, pI=..., _tx=0, _ty=0, shouldPaintOutline=true) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_block.cpp:1801 #23 0x00007fbb90c9c6c6 in khtml::RenderLayer::paintLayer (this=0xbae870, rootLayer=0xbae6f0, p=0x7fff58552420, paintDirtyRect=..., selectionOnly=false) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_layer.cpp:1126 #24 0x00007fbb90c9c476 in khtml::RenderLayer::paintLayer (this=0xbae6f0, rootLayer=0xbae6f0, p=0x7fff58552420, paintDirtyRect=..., selectionOnly=false) at /usr/src/debug/kdelibs-4.6.2/khtml/rendering/render_layer.cpp:1151 #25 0x00007fbb90b2ffd4 in KHTMLView::paintEvent (this=0xa54c20, e=<optimized out>) at /usr/src/debug/kdelibs-4.6.2/khtml/khtmlview.cpp:917 #26 0x00007fbb9eae4bfe in QWidget::event (this=0xa54c20, event=0x7fff58552dc0) at kernel/qwidget.cpp:8405 #27 0x00007fbb9ee89796 in QFrame::event (this=0xa54c20, e=0x7fff58552dc0) at widgets/qframe.cpp:557 #28 0x00007fbb90b28325 in KHTMLView::widgetEvent (this=0xa54c20, e=<optimized out>) at /usr/src/debug/kdelibs-4.6.2/khtml/khtmlview.cpp:2208 #29 0x00007fbb90b286c4 in KHTMLView::eventFilter (this=0xa54c20, o=0xa6aa60, e=0x7fff58552dc0) at /usr/src/debug/kdelibs-4.6.2/khtml/khtmlview.cpp:2053 #30 0x00007fbb9f9426e7 in QCoreApplicationPrivate::sendThroughObjectEventFilters (this=<optimized out>, receiver= 0xa6aa60, event=0x7fff58552dc0) at kernel/qcoreapplication.cpp:846 #31 0x00007fbb9ea930f1 in QApplicationPrivate::notify_helper (this=0x630980, receiver=0xa6aa60, e=0x7fff58552dc0) at kernel/qapplication.cpp:4458 #32 0x00007fbb9ea9b6ca in QApplication::notify (this=<optimized out>, receiver=0xa6aa60, e=0x7fff58552dc0) at kernel/qapplication.cpp:4341 #33 0x00007fbba02a4d46 in KApplication::notify (this=0x7fff58555790, receiver=0xa6aa60, event=0x7fff58552dc0) at /usr/src/debug/kdelibs-4.6.2/kdeui/kernel/kapplication.cpp:311 #34 0x00007fbb9f94255c in QCoreApplication::notifyInternal (this=0x7fff58555790, receiver=0xa6aa60, event= 0x7fff58552dc0) at kernel/qcoreapplication.cpp:731 #35 0x00007fbb9eae1ad2 in sendSpontaneousEvent (event=0x7fff58552dc0, receiver=0xa6aa60) at ../../src/corelib/kernel/qcoreapplication.h:218 #36 QWidgetPrivate::drawWidget (this=0xa87c50, pdev=0xad9548, rgn=..., offset=..., flags=4, sharedPainter=0x0, backingStore=0xad94b0) at kernel/qwidget.cpp:5492 ---Type <return> to continue, or q <return> to quit--- #37 0x00007fbb9eca47a8 in QWidgetBackingStore::sync (this=0xad94b0) at painting/qbackingstore.cpp:1325 #38 0x00007fbb9ead76d0 in QWidgetPrivate::syncBackingStore (this=0x70c320) at kernel/qwidget.cpp:1842 #39 0x00007fbb9eae5102 in QWidget::event (this=0x715950, event=0x7fff58553da0) at kernel/qwidget.cpp:8552 #40 0x00007fbb9eea336b in QMainWindow::event (this=0x715950, event=0x7fff58553da0) at widgets/qmainwindow.cpp:1480 #41 0x00007fbba034db73 in KXmlGuiWindow::event (this=0x715950, ev=0x7fff58553da0) at /usr/src/debug/kdelibs-4.6.2/kdeui/xmlgui/kxmlguiwindow.cpp:126 #42 0x00007fbba20d88fc in KonqMainWindow::event (this=0x715950, e=0x7fff58553da0) at /usr/src/debug/kdebase-4.6.2/konqueror/src/konqmainwindow.cpp:5522 #43 0x00007fbb9ea93124 in QApplicationPrivate::notify_helper (this=0x630980, receiver=0x715950, e=0x7fff58553da0) at kernel/qapplication.cpp:4462 #44 0x00007fbb9ea9b6ca in QApplication::notify (this=<optimized out>, receiver=0x715950, e=0x7fff58553da0) at kernel/qapplication.cpp:4341 #45 0x00007fbba02a4d46 in KApplication::notify (this=0x7fff58555790, receiver=0x715950, event=0x7fff58553da0) at /usr/src/debug/kdelibs-4.6.2/kdeui/kernel/kapplication.cpp:311 #46 0x00007fbb9f94255c in QCoreApplication::notifyInternal (this=0x7fff58555790, receiver=0x715950, event= 0x7fff58553da0) at kernel/qcoreapplication.cpp:731 #47 0x00007fbb9eca1329 in sendEvent (event=0x7fff58553da0, receiver=0x715950) at ../../src/corelib/kernel/qcoreapplication.h:215 #48 sendUpdateRequest (updateImmediately=true, widget=0x715950) at painting/qbackingstore.cpp:507 #49 QWidgetBackingStore::markDirty (this=0xad94b0, rect=<optimized out>, widget=<optimized out>, updateImmediately=true, invalidateBuffer=<optimized out>) at painting/qbackingstore.cpp:695 #50 0x00007fbb9ead6f38 in QWidget::repaint (this=0xa54be0, rect=...) at kernel/qwidget.cpp:10322 #51 0x00007fbb9eed7880 in QScrollBarPrivate::stopRepeatAction (this=<optimized out>) at widgets/qscrollbar.cpp:296 #52 0x00007fbb9eae4c4c in QWidget::event (this=0xa54be0, event=0x7fff585548e0) at kernel/qwidget.cpp:8259 #53 0x00007fbb9eed8302 in QScrollBar::event (this=0xa54be0, event=0x7fff585548e0) at widgets/qscrollbar.cpp:546 #54 0x00007fbb9ea93124 in QApplicationPrivate::notify_helper (this=0x630980, receiver=0xa54be0, e=0x7fff585548e0) at kernel/qapplication.cpp:4462 #55 0x00007fbb9ea9bf4a in QApplication::notify (this=<optimized out>, receiver=0xa54be0, e=0x7fff585548e0) at kernel/qapplication.cpp:4023 #56 0x00007fbba02a4d46 in KApplication::notify (this=0x7fff58555790, receiver=0xa54be0, event=0x7fff585548e0) at /usr/src/debug/kdelibs-4.6.2/kdeui/kernel/kapplication.cpp:311 #57 0x00007fbb9f94255c in QCoreApplication::notifyInternal (this=0x7fff58555790, receiver=0xa54be0, event= 0x7fff585548e0) at kernel/qcoreapplication.cpp:731 #58 0x00007fbb9ea94135 in sendEvent (event=<optimized out>, receiver=<optimized out>) ---Type <return> to continue, or q <return> to quit--- at ../../src/corelib/kernel/qcoreapplication.h:215 #59 QApplicationPrivate::sendMouseEvent (receiver=0xa54be0, event=0x7fff585548e0, alienWidget=0xa54be0, nativeWidget=0x715950, buttonDown=0x7fbb9f565198, lastMouseReceiver=..., spontaneous=true) at kernel/qapplication.cpp:3122 #60 0x00007fbb9eb12b48 in QETWidget::translateMouseEvent (this=0x715950, event=<optimized out>) at kernel/qapplication_x11.cpp:4461 #61 0x00007fbb9eb11229 in QApplication::x11ProcessEvent (this=0x7fff58555790, event=0x7fff58555240) at kernel/qapplication_x11.cpp:3587 #62 0x00007fbb9eb38ee2 in x11EventSourceDispatch (s=0x6356b0, callback=0, user_data=0x0) at kernel/qguieventdispatcher_glib.cpp:146 #63 0x00007fbb9a4dcbd3 in g_main_dispatch (context=0x634840) at gmain.c:2440 #64 g_main_context_dispatch (context=0x634840) at gmain.c:3013 #65 0x00007fbb9a4dd3b0 in g_main_context_iterate (context=0x634840, block=1, dispatch=1, self=<optimized out>) at gmain.c:3091 #66 0x00007fbb9a4dd650 in g_main_context_iteration (context=0x634840, may_block=1) at gmain.c:3154 #67 0x00007fbb9f96d31f in QEventDispatcherGlib::processEvents (this=0x60d240, flags=<optimized out>) at kernel/qeventdispatcher_glib.cpp:422 #68 0x00007fbb9eb38b7e in QGuiEventDispatcherGlib::processEvents (this=<optimized out>, flags=<optimized out>) at kernel/qguieventdispatcher_glib.cpp:204 #69 0x00007fbb9f941992 in QEventLoop::processEvents (this=<optimized out>, flags=...) at kernel/qeventloop.cpp:149 #70 0x00007fbb9f941ba5 in QEventLoop::exec (this=0x7fff58555560, flags=...) at kernel/qeventloop.cpp:201 #71 0x00007fbb9f94600b in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1008 #72 0x00007fbba211337a in kdemain (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kdebase-4.6.2/konqueror/src/konqmain.cpp:219 #73 0x00007fbba1d10bfd in __libc_start_main (main=0x400770 <main(int, char**)>, argc=1, ubp_av=0x7fff58556028, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff58556018) at libc-start.c:226 #74 0x0000000000400699 in _start () at ../sysdeps/x86_64/elf/start.S:113 ----------------------------------------------------------- My system uses a Intel Core 2 dual core processor, I have 2GB RAM installed and use a graphics adapter with Nvidia Geforce 6600 GT chipset. I employ Xorgs "nv" driver. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=689489 https://bugzilla.novell.com/show_bug.cgi?id=689489#c1 --- Comment #1 from Volker Lukas <vlukas@gmx.de> 2011-06-19 15:57:03 UTC --- Packages from the Qt repository (http://download.opensuse.org/repositories/KDE:/Qt47/openSUSE_Factory/) exhibit the same problem now since around mid-June 2011. Also, I experience similar symptoms with Kmail and Knode too. I tried to experiment a bit and found the following: - I could only reproduce this problem while using my usual user account, starting Konqueror while logged in as root did not lead to the problem. - Temporarily removing ~/.config/Trolltech.conf did not improve the situation - Using other graphics drivers (Nouveau, official Nvida driver) did not improve the situation. - Backtraces obtained from Knode and Kmail (during similar phases of high CPU load / unresponsiveness) appear similar to me. - Self-compiled Qt 4.7.3 with the original, unmodified sourcecode from Nokia does not lead to the problem, but if Qt is compiled using the source RPM as provided by Opensuse I can reproduce the problem. Because an unmodified Qt does not lead to the problem, I compiled the Opensuse source RPM with the rpmbuild command, selectively including/disabling patches which were mentioned in the SPEC file. I found that if I build Qt this way, applying Opensuse patches up to and including patch number 41 (line 129 in libqt4.spec) I can reproduce the problem. If I also remove patch 41, the problem goes away. This leads me to believe that patch number 41 (konsole-nvidia-font-speed.diff) is the cause, or part of the cause for my problem. Please note that the two functions which are modified by this Patch also appear in the backtrace above. I also checked this patch in isolation against the official Nokia Qt 4.7.3 sources: If applied as the only modification the built library does exhibit my problem. I think the issue can be narrowed down a bit further: The mentioned patch replaces the line which reads "const bool xrenderPath = (X11->use_xrender" in the QX11PaintEngine::drawFreetype function and replaces it by "const bool xrenderPath = (X11->use_xrender && !ft->isBitmapFont()". Without the change to this line, a quick testing of the resulting library does not appear to reproduce my problem. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=689489 https://bugzilla.novell.com/show_bug.cgi?id=689489#c2 Christian Trippe <ctrippe@opensuse.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ctrippe@opensuse.org, | |llunak@novell.com AssignedTo|kde-maintainers@suse.de |dmueller@suse.com --- Comment #2 from Christian Trippe <ctrippe@opensuse.org> 2011-08-09 08:08:29 UTC --- Assinging to the Qt4 maintainer and taking the author of the patch konsole-nvidia-font-speed.diff into CC. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=689489 https://bugzilla.novell.com/show_bug.cgi?id=689489#c3 Dirk Mueller <dmueller@suse.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED --- Comment #3 from Dirk Mueller <dmueller@suse.com> 2011-08-20 02:00:09 CEST --- I've removed the patch, thanks for the very detailed analysis! -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=689489 https://bugzilla.novell.com/show_bug.cgi?id=689489#c4 --- Comment #4 from Bernhard Wiedemann <bwiedemann@suse.com> 2011-09-08 17:00:19 CEST --- This is an autogenerated message for OBS integration: This bug (689489) was mentioned in https://build.opensuse.org/request/show/81567 Factory / libqt4 -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
participants (1)
-
bugzilla_noreply@novell.com