diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2014-05-27 16:37:30 +0200 |
---|---|---|
committer | Matúš Kukan <matus.kukan@collabora.com> | 2014-05-27 19:38:23 +0200 |
commit | a6b00d16eb27a5e7e31c721671001a909ecef960 (patch) | |
tree | 7ea874d0ce61f623279e2f5af5510c67dd236e59 /vcl | |
parent | 5792e76cb5beb630c135f57b74f57d74dd2dc2b0 (diff) |
Related bnc#822625: Cache FontEntry with the original FontSelectPattern.
Otherwise we never hit cache directly, only after expensive call to
ImplFindByFont.
Change-Id: If15b368feeba94c8fff8ee7cbe049fc4a2069768
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/outdev.h | 2 | ||||
-rw-r--r-- | vcl/source/outdev/font.cxx | 12 |
2 files changed, 8 insertions, 6 deletions
diff --git a/vcl/inc/outdev.h b/vcl/inc/outdev.h index dcde57c09ee9..e468ae22534a 100644 --- a/vcl/inc/outdev.h +++ b/vcl/inc/outdev.h @@ -149,7 +149,7 @@ public: ImplFontEntry* GetFontEntry( PhysicalFontCollection*, const Font&, const Size& rPixelSize, float fExactHeight); - ImplFontEntry* GetFontEntry( PhysicalFontCollection*, FontSelectPattern& ); + ImplFontEntry* GetFontEntry( PhysicalFontCollection*, const FontSelectPattern& ); ImplFontEntry* GetGlyphFallbackFont( PhysicalFontCollection*, FontSelectPattern&, int nFallbackLevel, OUString& rMissingCodes ); void Release( ImplFontEntry* ); diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx index 9e40712e3051..d8b77db84134 100644 --- a/vcl/source/outdev/font.cxx +++ b/vcl/source/outdev/font.cxx @@ -1227,22 +1227,23 @@ ImplFontEntry* ImplFontCache::GetFontEntry( PhysicalFontCollection* pFontList, } ImplFontEntry* ImplFontCache::GetFontEntry( PhysicalFontCollection* pFontList, - FontSelectPattern& aFontSelData ) + const FontSelectPattern& rFontSelData ) { // check if a directly matching logical font instance is already cached, // the most recently used font usually has a hit rate of >50% ImplFontEntry *pEntry = NULL; PhysicalFontFamily* pFontFamily = NULL; IFSD_Equal aIFSD_Equal; - if( mpFirstEntry && aIFSD_Equal( aFontSelData, mpFirstEntry->maFontSelData ) ) + if( mpFirstEntry && aIFSD_Equal( rFontSelData, mpFirstEntry->maFontSelData ) ) pEntry = mpFirstEntry; else { - FontInstanceList::iterator it = maFontInstanceList.find( aFontSelData ); + FontInstanceList::iterator it = maFontInstanceList.find( rFontSelData ); if( it != maFontInstanceList.end() ) pEntry = (*it).second; } + FontSelectPattern aFontSelData(rFontSelData); if( !pEntry ) // no direct cache hit { // find the best matching logical font family and update font selector accordingly @@ -1315,8 +1316,9 @@ ImplFontEntry* ImplFontCache::GetFontEntry( PhysicalFontCollection* pFontList, } #endif - // add the new entry to the cache - maFontInstanceList[ aFontSelData ] = pEntry; + // Add the new entry to the cache with the original FontSelectPattern, + // so that we can find it next time as a direct cache hit. + maFontInstanceList[ rFontSelData ] = pEntry; } mpFirstEntry = pEntry; |