Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp

Issue 2411643002: Make HarfBuzzFace release SimpleFontData. (Closed)
Patch Set: Removed m_simpleFontData from HarfBuzzFace. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 Google Inc. All rights reserved. 2 * Copyright (c) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 77
78 // struct to carry user-pointer data for hb_font_t callback functions. 78 // struct to carry user-pointer data for hb_font_t callback functions.
79 struct HarfBuzzFontData { 79 struct HarfBuzzFontData {
80 USING_FAST_MALLOC(HarfBuzzFontData); 80 USING_FAST_MALLOC(HarfBuzzFontData);
81 WTF_MAKE_NONCOPYABLE(HarfBuzzFontData); 81 WTF_MAKE_NONCOPYABLE(HarfBuzzFontData);
82 82
83 public: 83 public:
84 HarfBuzzFontData() 84 HarfBuzzFontData()
85 : m_paint(), m_simpleFontData(nullptr), m_rangeSet(nullptr) {} 85 : m_paint(), m_simpleFontData(nullptr), m_rangeSet(nullptr) {}
86 86
87 ~HarfBuzzFontData() {
88 if (m_simpleFontData)
89 FontCache::fontCache()->releaseFontData(m_simpleFontData);
90 }
91
92 void updateSimpleFontData(FontPlatformData* platformData) {
93 SimpleFontData* simpleFontData =
94 FontCache::fontCache()
95 ->fontDataFromFontPlatformData(platformData)
96 .get();
97 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.
98 FontCache::fontCache()->releaseFontData(m_simpleFontData);
99 m_simpleFontData = simpleFontData;
100 }
101
87 SkPaint m_paint; 102 SkPaint m_paint;
88 SimpleFontData* m_simpleFontData; 103 SimpleFontData* m_simpleFontData;
89 RefPtr<UnicodeRangeSet> m_rangeSet; 104 RefPtr<UnicodeRangeSet> m_rangeSet;
90 }; 105 };
91 106
92 // Though we have FontCache class, which provides the cache mechanism for 107 // Though we have FontCache class, which provides the cache mechanism for
93 // WebKit's font objects, we also need additional caching layer for HarfBuzz to 108 // WebKit's font objects, we also need additional caching layer for HarfBuzz to
94 // reduce the number of hb_font_t objects created. Without it, we would create 109 // reduce the number of hb_font_t objects created. Without it, we would create
95 // an hb_font_t object for every FontPlatformData object. But insted, we only 110 // an hb_font_t object for every FontPlatformData object. But insted, we only
96 // need one for each unique SkTypeface. 111 // need one for each unique SkTypeface.
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 hb_font_set_funcs(unscaledFont, harfBuzzSkiaGetFontFuncs(), 378 hb_font_set_funcs(unscaledFont, harfBuzzSkiaGetFontFuncs(),
364 cacheEntry->hbFontData(), nullptr); 379 cacheEntry->hbFontData(), nullptr);
365 return cacheEntry; 380 return cacheEntry;
366 } 381 }
367 382
368 hb_font_t* HarfBuzzFace::getScaledFont( 383 hb_font_t* HarfBuzzFace::getScaledFont(
369 PassRefPtr<UnicodeRangeSet> rangeSet) const { 384 PassRefPtr<UnicodeRangeSet> rangeSet) const {
370 m_platformData->setupPaint(&m_harfBuzzFontData->m_paint); 385 m_platformData->setupPaint(&m_harfBuzzFontData->m_paint);
371 m_harfBuzzFontData->m_paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); 386 m_harfBuzzFontData->m_paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
372 m_harfBuzzFontData->m_rangeSet = rangeSet; 387 m_harfBuzzFontData->m_rangeSet = rangeSet;
373 m_harfBuzzFontData->m_simpleFontData = 388 m_harfBuzzFontData->updateSimpleFontData(m_platformData);
374 FontCache::fontCache()
375 ->fontDataFromFontPlatformData(m_platformData)
376 .get();
377 ASSERT(m_harfBuzzFontData->m_simpleFontData); 389 ASSERT(m_harfBuzzFontData->m_simpleFontData);
378 int scale = SkiaScalarToHarfBuzzPosition(m_platformData->size()); 390 int scale = SkiaScalarToHarfBuzzPosition(m_platformData->size());
379 hb_font_set_scale(m_unscaledFont, scale, scale); 391 hb_font_set_scale(m_unscaledFont, scale, scale);
380 return m_unscaledFont; 392 return m_unscaledFont;
381 } 393 }
382 394
383 } // namespace blink 395 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698