Index: content/common/font_warmup_win.cc |
diff --git a/content/common/font_warmup_win.cc b/content/common/font_warmup_win.cc |
index f9825fef0c734f36243cd7be4259db2e596b8a1f..2968218c231a88281bdca074aa94eafc8bb30dbe 100644 |
--- a/content/common/font_warmup_win.cc |
+++ b/content/common/font_warmup_win.cc |
@@ -23,6 +23,7 @@ |
#include "base/win/iat_patch_function.h" |
#include "base/win/windows_version.h" |
#include "content/public/common/dwrite_font_platform_win.h" |
+#include "ppapi/shared_impl/proxy_lock.h" |
#include "skia/ext/fontmgr_default_win.h" |
#include "skia/ext/refptr.h" |
#include "third_party/WebKit/public/web/win/WebFontRendering.h" |
@@ -35,6 +36,7 @@ namespace content { |
namespace { |
+// The Skia font manager, used for the life of the process (leaked at the end). |
SkFontMgr* g_warmup_fontmgr = nullptr; |
base::win::IATPatchFunction g_iat_patch_open_sc_manager; |
@@ -255,6 +257,7 @@ skia::RefPtr<SkTypeface> GetTypefaceFromLOGFONT(const LOGFONTW* log_font) { |
: SkFontStyle::kUpright_Slant); |
std::string family_name = base::WideToUTF8(log_font->lfFaceName); |
+ ppapi::ProxyAutoLock lock; // Needed for DirectWrite font proxy. |
return skia::AdoptRef( |
g_warmup_fontmgr->matchFamilyStyle(family_name.c_str(), style)); |
} |
@@ -486,7 +489,10 @@ SkFontMgr* GetPreSandboxWarmupFontMgr() { |
} |
GdiFontPatchData* PatchGdiFontEnumeration(const base::FilePath& path) { |
- // We assume the fontmgr is already warmed up before calling this. |
+ if (ShouldUseDirectWriteFontProxyFieldTrial() && !g_warmup_fontmgr) |
+ g_warmup_fontmgr = SkFontMgr_New_DirectWrite(); |
+ // If not using the font proxy, we assume |g_warmup_fontmgr| is already |
+ // initialized before this function is called. |
DCHECK(g_warmup_fontmgr); |
return new GdiFontPatchDataImpl(path); |
} |