mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This CL fixes following test cases in minikin_tests - FontFamilyTest.hasVariationSelectorTest - HbFontCacheTest.getHbFontLockedTest - HbFontCacheTest.purgeCacheTest For the fix of FontFamilyTest.hasVariationSelectorTest, removing virtual from GetUniqueId() in MinikinFont. After [1], MinikinFont's destructor started calling purgeHbCache() which calls virtual method, MinikinFont::GetUniqueId(). Fortunately, the SkTypeface::uniqueID() returns just internal value, so we can store it at the construction time and use it instead of calling SkTypeface::uniqueID() every time. This patch also changes purgeHbFont to purgeHbFontLocked, as all uses of it were already under global mutex. This change avoids deadlock on explicit unref, as when invoked by a Java finalizer from the Java object that holds a reference to the font. Some of the tests needed to change to using the ref counting protocol rather than explicitly destructing font objects, as well. [1] 9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd Bug: 28105730 Bug: 28105688 Change-Id: Ie5983c4869147dacabdca81af1605066cd680b3f
25 lines
530 B
C++
25 lines
530 B
C++
namespace android {
|
|
|
|
class MinikinFontSkia : public MinikinFont {
|
|
public:
|
|
explicit MinikinFontSkia(SkTypeface *typeface);
|
|
|
|
~MinikinFontSkia();
|
|
|
|
float GetHorizontalAdvance(uint32_t glyph_id,
|
|
const MinikinPaint &paint) const;
|
|
|
|
void GetBounds(MinikinRect* bounds, uint32_t glyph_id,
|
|
const MinikinPaint& paint) const;
|
|
|
|
const void* GetTable(uint32_t tag, size_t* size, MinikinDestroyFunc* destroy);
|
|
|
|
SkTypeface *GetSkTypeface();
|
|
|
|
private:
|
|
SkTypeface *mTypeface;
|
|
|
|
};
|
|
|
|
} // namespace android
|