Index: third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp |
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp |
index cb2aae1b0a5bd47394d9f53dd3c010bf7bde6006..5c1a7e50a31d0ea12bcc70c12ddf7f7203cfeedb 100644 |
--- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp |
+++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp |
@@ -84,6 +84,21 @@ struct HarfBuzzFontData { |
HarfBuzzFontData() |
: m_paint(), m_simpleFontData(nullptr), m_rangeSet(nullptr) {} |
+ ~HarfBuzzFontData() { |
+ if (m_simpleFontData) |
+ FontCache::fontCache()->releaseFontData(m_simpleFontData); |
+ } |
+ |
+ void updateSimpleFontData(FontPlatformData* platformData) { |
+ SimpleFontData* simpleFontData = |
+ FontCache::fontCache() |
+ ->fontDataFromFontPlatformData(platformData) |
+ .get(); |
+ if (m_simpleFontData) |
drott
2016/10/13 07:28:34
I think in the else case we need to release the ne
jb
2016/10/13 07:53:47
I think you misread the code. I always release the
drott
2016/10/13 08:06:29
True, sorry.
|
+ FontCache::fontCache()->releaseFontData(m_simpleFontData); |
+ m_simpleFontData = simpleFontData; |
+ } |
+ |
SkPaint m_paint; |
SimpleFontData* m_simpleFontData; |
RefPtr<UnicodeRangeSet> m_rangeSet; |
@@ -370,10 +385,7 @@ hb_font_t* HarfBuzzFace::getScaledFont( |
m_platformData->setupPaint(&m_harfBuzzFontData->m_paint); |
m_harfBuzzFontData->m_paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
m_harfBuzzFontData->m_rangeSet = rangeSet; |
- m_harfBuzzFontData->m_simpleFontData = |
- FontCache::fontCache() |
- ->fontDataFromFontPlatformData(m_platformData) |
- .get(); |
+ m_harfBuzzFontData->updateSimpleFontData(m_platformData); |
ASSERT(m_harfBuzzFontData->m_simpleFontData); |
int scale = SkiaScalarToHarfBuzzPosition(m_platformData->size()); |
hb_font_set_scale(m_unscaledFont, scale, scale); |