Chromium Code Reviews| 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); |