unwanted cache flush in Freetype engine (#1400417, QTBUG-49452)
This commit is contained in:
parent
91176c3fee
commit
81d6fcc4ca
61
0447-REG-Fix-unwanted-cache-flush-in-Freetype-engine.patch
Normal file
61
0447-REG-Fix-unwanted-cache-flush-in-Freetype-engine.patch
Normal file
@ -0,0 +1,61 @@
|
||||
From 6f423555eba55ccdf7287071e10576bc1b687fd2 Mon Sep 17 00:00:00 2001
|
||||
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
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 <simon.hausmann@qt.io>
|
||||
---
|
||||
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
|
||||
|
@ -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 <rdieter@fedoraproject.org> - 5.7.0-7
|
||||
- unwanted cache flush in Freetype engine (#1400417, QTBUG-49452)
|
||||
|
||||
* Mon Dec 12 2016 Vitaly Zaitsev <vitaly@easycoding.org> - 5.7.0-6
|
||||
- Backported QTBUG-53071 patch to resolve problem with latest tzdata.
|
||||
- Fixed Source URL.
|
||||
|
Loading…
Reference in New Issue
Block a user