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