diff --git a/0447-REG-Fix-unwanted-cache-flush-in-Freetype-engine.patch b/0447-REG-Fix-unwanted-cache-flush-in-Freetype-engine.patch new file mode 100644 index 0000000..be0c0e3 --- /dev/null +++ b/0447-REG-Fix-unwanted-cache-flush-in-Freetype-engine.patch @@ -0,0 +1,61 @@ +From 6f423555eba55ccdf7287071e10576bc1b687fd2 Mon Sep 17 00:00:00 2001 +From: Eskil Abrahamsen Blomfeldt +Date: Mon, 1 Aug 2016 13:39:53 +0200 +Subject: [PATCH 447/783] REG: Fix unwanted cache flush in Freetype engine + +The Freetype cache was almost completely disabled by +134c6db8587a8ce156d4fa31ffa62605821851b2 because after that +change, the lockedAlphaMapForGlyph() function would no longer +cut off early for empty glyphs like spaces, but rather go +through all alpha map functions before it realized that there +was nothing to render. This would in turn invalidate the cache +for every empty glyph, causing all glyphs to be rerendered for +every isolated word. + +This change adds back a cut off. This is only needed in the +lockedAlphaMapForGlyph() function, since the superclass implementation +of the other alpha map functions already contains a cut off for +width/height == 0. + +[ChangeLog][Qt Gui][Text] Fixed a performance regression in Freetype +engine that was introduced in Qt 5.5. + +Change-Id: I381285939909e99cc5fb5f3497fecf9fa871f29a +Task-number: QTBUG-49452 +Reviewed-by: Simon Hausmann +--- + src/gui/text/qfontengine_ft.cpp | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp +index 4de41df..7c878da 100644 +--- a/src/gui/text/qfontengine_ft.cpp ++++ b/src/gui/text/qfontengine_ft.cpp +@@ -1716,7 +1716,7 @@ glyph_metrics_t QFontEngineFT::alphaMapBoundingBox(glyph_t glyph, QFixed subPixe + + static inline QImage alphaMapFromGlyphData(QFontEngineFT::Glyph *glyph, QFontEngine::GlyphFormat glyphFormat) + { +- if (glyph == Q_NULLPTR) ++ if (glyph == Q_NULLPTR || glyph->height == 0 || glyph->width == 0) + return QImage(); + + QImage::Format format = QImage::Format_Invalid; +@@ -1764,11 +1764,15 @@ QImage *QFontEngineFT::lockedAlphaMapForGlyph(glyph_t glyphIndex, QFixed subPixe + + currentlyLockedAlphaMap = alphaMapFromGlyphData(glyph, neededFormat); + ++ const bool glyphHasGeometry = glyph != Q_NULLPTR && glyph->height != 0 && glyph->width != 0; + if (!cacheEnabled && glyph != &emptyGlyph) { + currentlyLockedAlphaMap = currentlyLockedAlphaMap.copy(); + delete glyph; + } + ++ if (!glyphHasGeometry) ++ return Q_NULLPTR; ++ + if (currentlyLockedAlphaMap.isNull()) + return QFontEngine::lockedAlphaMapForGlyph(glyphIndex, subPixelPosition, neededFormat, t, offset); + +-- +2.7.4 + diff --git a/qt5-qtbase.spec b/qt5-qtbase.spec index 3933dee..66ac713 100644 --- a/qt5-qtbase.spec +++ b/qt5-qtbase.spec @@ -62,7 +62,7 @@ BuildRequires: pkgconfig(libsystemd) Name: qt5-qtbase Summary: Qt5 - QtBase components Version: 5.7.0 -Release: 6%{?dist} +Release: 7%{?dist} # See LGPL_EXCEPTIONS.txt, for exception details License: LGPLv2 with exceptions or GPLv3 with exceptions @@ -113,6 +113,7 @@ Patch60: qtbase-opensource-src-5.7.1-moc_system_defines.patch Patch61: qt5-qtbase-cxxflag.patch ## upstream patches +Patch447: 0447-REG-Fix-unwanted-cache-flush-in-Freetype-engine.patch # Do not check any files in %%{_qt5_plugindir}/platformthemes/ for requires. # Those themes are there for platform integration. If the required libraries are @@ -344,6 +345,8 @@ Qt5 libraries used for drawing widgets and OpenGL items. %patch60 -p1 -b .moc_system_defines %patch61 -p1 -b .qt5-qtbase-cxxflag +%patch447 -p1 -b .0447 + %if 0%{?inject_optflags} ## adjust $RPM_OPT_FLAGS @@ -935,6 +938,9 @@ fi %changelog +* Tue Dec 13 2016 Rex Dieter - 5.7.0-7 +- unwanted cache flush in Freetype engine (#1400417, QTBUG-49452) + * Mon Dec 12 2016 Vitaly Zaitsev - 5.7.0-6 - Backported QTBUG-53071 patch to resolve problem with latest tzdata. - Fixed Source URL.