Index: src/ports/SkFontHost_mac.cpp |
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp |
index 5be7cc1f9781ea301b21bc529f5b50a50627f157..836576bc2a2adc7e067080817f49df02141fe925 100755 |
--- a/src/ports/SkFontHost_mac.cpp |
+++ b/src/ports/SkFontHost_mac.cpp |
@@ -453,14 +453,15 @@ public: |
: SkTypeface(fs, fontID, isFixedPitch) |
, fRequestedName(requestedName) |
, fFontRef(fontRef) // caller has already called CFRetain for us |
+ , fHasColorGlyphs(SkToBool(CTFontGetSymbolicTraits(fFontRef) & SkCTFontColorGlyphsTrait)) |
, fIsLocalStream(isLocalStream) |
- , fHasColorGlyphs(CTFontGetSymbolicTraits(fFontRef) & SkCTFontColorGlyphsTrait) |
{ |
SkASSERT(fontRef); |
} |
SkString fRequestedName; |
AutoCFRelease<CTFontRef> fFontRef; |
+ const bool fHasColorGlyphs; |
protected: |
int onGetUPEM() const override; |
@@ -482,7 +483,6 @@ protected: |
private: |
bool fIsLocalStream; |
- bool fHasColorGlyphs; |
typedef SkTypeface INHERITED; |
}; |
@@ -907,6 +907,13 @@ CGRGBPixel* Offscreen::getCG(const SkScalerContext_Mac& context, const SkGlyph& |
// So always make the font transform identity and place the transform on the context. |
point = CGPointApplyAffineTransform(point, context.fInvTransform); |
+ // Attempt to keep on the stack a hard reference to the font tables. |
+ // This is an experiment to see if this affects crbug.com/413332 . |
+ // When 10.6 headers are no longer supported, 'sbix' can be replaced with kCTFontTableSbix. |
+ AutoCFRelease<CFDataRef> sbix; |
+ if (static_cast<SkTypeface_Mac*>(context.getTypeface())->fHasColorGlyphs) { |
+ sbix.reset(CGFontCopyTableForTag(context.fCGFont, 'sbix')); |
+ } |
ctFontDrawGlyphs(context.fCTUnrotatedFont, &glyphID, &point, 1, fCG); |
SkASSERT(rowBytesPtr); |