Take mutex when calling into FreeType.

SkScalerContext_FreeType::generateCharToGlyph and generateGlyphToChar
do not take a mutex when calling into FreeType, but they need to.
The setupSize method also requires the mutex to be locked, which is
not a problem since it currently always is, but add a debug assert
to ensure that it continues to be.

BUG=chromium:542640

Review URL: https://codereview.chromium.org/1431683006
This commit is contained in:
bungeman 2015-11-03 11:07:20 -08:00 committed by Commit bot
parent 0c2999974d
commit 3f846ae913

View File

@ -949,6 +949,7 @@ SkScalerContext_FreeType::~SkScalerContext_FreeType() {
this face with other context (at different sizes).
*/
FT_Error SkScalerContext_FreeType::setupSize() {
gFTMutex.assertHeld();
FT_Error err = FT_Activate_Size(fFTSize);
if (err != 0) {
SkDEBUGF(("SkScalerContext_FreeType::FT_Activate_Size(%s %s, 0x%x, 0x%x) returned 0x%x\n",
@ -968,10 +969,12 @@ unsigned SkScalerContext_FreeType::generateGlyphCount() {
}
uint16_t SkScalerContext_FreeType::generateCharToGlyph(SkUnichar uni) {
SkAutoMutexAcquire ac(gFTMutex);
return SkToU16(FT_Get_Char_Index( fFace, uni ));
}
SkUnichar SkScalerContext_FreeType::generateGlyphToChar(uint16_t glyph) {
SkAutoMutexAcquire ac(gFTMutex);
// iterate through each cmap entry, looking for matching glyph indices
FT_UInt glyphIndex;
SkUnichar charCode = FT_Get_First_Char( fFace, &glyphIndex );