| Index: src/ports/SkFontHost_FreeType.cpp
|
| diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
|
| index fe32ebb42a7fe33c7e7758738cc40f26f7afaa8d..cb7ce8028dccd4e92d81b1e8ce63fc3b08c4b438 100644
|
| --- a/src/ports/SkFontHost_FreeType.cpp
|
| +++ b/src/ports/SkFontHost_FreeType.cpp
|
| @@ -6,6 +6,7 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| +#include "SkAdvancedTypefaceMetrics.h"
|
| #include "SkBitmap.h"
|
| #include "SkCanvas.h"
|
| #include "SkColorPriv.h"
|
| @@ -18,7 +19,7 @@
|
| #include "SkMask.h"
|
| #include "SkMaskGamma.h"
|
| #include "SkOTUtils.h"
|
| -#include "SkAdvancedTypefaceMetrics.h"
|
| +#include "SkOnce.h"
|
| #include "SkScalerContext.h"
|
| #include "SkStream.h"
|
| #include "SkString.h"
|
| @@ -160,17 +161,22 @@ static bool InitFreetype() {
|
| return true;
|
| }
|
|
|
| -// Lazy, once, wrapper to ask the FreeType Library if it can support LCD text
|
| -static bool is_lcd_supported() {
|
| +// Called while holding gFTMutex.
|
| +static void determine_lcd_support(bool* lcdSupported) {
|
| if (!gLCDSupportValid) {
|
| - SkAutoMutexAcquire ac(gFTMutex);
|
| -
|
| - if (!gLCDSupportValid) {
|
| - InitFreetype();
|
| - FT_Done_FreeType(gFTLibrary);
|
| - }
|
| + // This will determine LCD support as a side effect.
|
| + InitFreetype();
|
| + FT_Done_FreeType(gFTLibrary);
|
| }
|
| - return gLCDSupport;
|
| + SkASSERT(gLCDSupportValid);
|
| + *lcdSupported = gLCDSupport;
|
| +}
|
| +
|
| +// Lazy, once, wrapper to ask the FreeType Library if it can support LCD text
|
| +static bool is_lcd_supported() {
|
| + static bool lcdSupported = false;
|
| + SkOnce(&gLCDSupportValid, &gFTMutex, determine_lcd_support, &lcdSupported);
|
| + return lcdSupported;
|
| }
|
|
|
| class SkScalerContext_FreeType : public SkScalerContext_FreeType_Base {
|
|
|