From: Maurice v. d. P. <gri...@kf...> - 2015-01-11 00:26:50
|
On Mon, Jan 05, 2015 at 06:15:06PM +0100, Joachim Eibl wrote: > I suppose this is an effect of KDiff3-0.9.98 trying to analyze line > lengths for variable width fonts, where each character has to be analyzed. > If KDiff3 becomes responsive again after a long wait and only for long > files then that is the reason. Looking at the callgrind output the time is being spent in 1.9M calls of QFontEngineFT::loadGlyph (for reference, on my machine that function is only called 358 times). There are cases where this function is called while DiffTextWindow::prepareTextLayout is on the call stack, but I find it hard to tell why the loadGlyph function would be called so often. prepareTextLayout is called 32K times in his profile and 31K times in mine. #0 QFontEngineFT::loadGlyph (this=this@entry=0x1158040, set=set@entry=0x1158128, glyph=2, subPixelPosition=subPixelPosition@entry=..., format=format@entry=QFontEngine::Format_None, fetchMetricsOnly=fetchMetricsOnly@entry=true) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qfontengine_ft.cpp:816 #1 0x00007ffff75fbf03 in loadGlyph (fetchMetricsOnly=true, format=QFontEngine::Format_None, subPixelPosition=..., glyph=<optimized out>, this=0x1158040) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qfontengine_ft_p.h:281 #2 QFontEngineFT::recalcAdvances (this=0x1158040, glyphs=0x7fffffffac98, flags=...) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qfontengine_ft.cpp:1611 #3 0x00007ffff7528052 in hb_getAdvances (font=<optimized out>, glyphs=0x115f320, numGlyphs=61, advances=0x115f4a0, flags=<optimized out>) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qfontengine.cpp:105 #4 0x00007ffff6d4b0f6 in HB_HeuristicPosition (item=item@entry=0x7fffffffb030) at /var/tmp/portage/dev-qt/qtcore-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:441 #5 0x00007ffff6d4cfff in HB_BasicShape (shaper_item=0x7fffffffb030) at /var/tmp/portage/dev-qt/qtcore-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:624 #6 0x00007ffff6d51c03 in HB_ShapeItem (shaper_item=0x7fffffffb030) at /var/tmp/portage/dev-qt/qtcore-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp:1419 #7 0x00007ffff7559b20 in QTextEngine::shapeTextWithHarfbuzz (this=this@entry=0x115d270, item=item@entry=0) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qtextengine.cpp:1342 #8 0x00007ffff755a4b2 in QTextEngine::shapeText (this=this@entry=0x115d270, item=item@entry=0) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qtextengine.cpp:935 #9 0x00007ffff755a7d5 in QTextEngine::shape (this=this@entry=0x115d270, item=item@entry=0) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qtextengine.cpp:1450 #10 0x00007ffff756bbaf in QTextLine::layout_helper (this=this@entry=0x7fffffffb970, maxGlyphs=maxGlyphs@entry=2147483647) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qtextlayout.cpp:1761 #11 0x00007ffff756cb9e in QTextLine::setNumColumns (this=this@entry=0x7fffffffb970, numColumns=numColumns@entry=2147483647) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qtextlayout.cpp:1550 #12 0x00007ffff756cc05 in QTextLayout::endLayout (this=0x7fffffffba90) at /var/tmp/portage/dev-qt/qtgui-4.8.6-r1/work/qt-everywhere-opensource-src-4.8.6/src/gui/text/qtextlayout.cpp:644 #13 0x0000000000431235 in DiffTextWindowData::prepareTextLayout (this=0x1115380, textLayout=..., visibleTextWidth=-1) at difftextwindow.cpp:870 #14 0x000000000042ee37 in DiffTextWindow::getMaxTextWidth (this=0x110f0d0) at difftextwindow.cpp:341 #15 0x0000000000476f8c in KDiff3App::setHScrollBarRange (this=0x8450b0) at pdiff.cpp:428 #16 0x000000000047733a in KDiff3App::resizeDiffTextWindowHeight (this=0x8450b0, newHeight=57) at pdiff.cpp:471 What do you think? Regards, Maurice. -- Maurice van der Pot Kdiff3 developer gri...@kf... http://kdiff3.sourceforge.net |