summaryrefslogtreecommitdiffstats
path: root/skia
diff options
context:
space:
mode:
authorscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 01:20:12 +0000
committerscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 01:20:12 +0000
commit1399f24ce315f875733ce548774a91d3f27b1f66 (patch)
tree6b83b65bba5555bda79f239c89ffc81c5868deb3 /skia
parentf1b75a3d17fb083d617ce6dc77b8ba8d728f9581 (diff)
downloadchromium_src-1399f24ce315f875733ce548774a91d3f27b1f66.zip
chromium_src-1399f24ce315f875733ce548774a91d3f27b1f66.tar.gz
chromium_src-1399f24ce315f875733ce548774a91d3f27b1f66.tar.bz2
Customize SkFontMgr::Factory to control DirectWrite vs. GDI selection
Move SkFontMgr::Factory to skia/ext so that we can use the warmed-up sandbox version when using DirectWrite that's created by content/. This avoids the previous default behaviour of creating a GDI SkFontMgr which is always wrong when DirectWrite is being used (and causes crashes when --enable_win32k_renderer_lockdown is enabled). R=jamesr@chromium.org,bungeman@google.com BUG=385926,356950,385717 TEST=http://www.effectgames.com/demos/canvascycle/ http://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_canvas_filltext and enabling FPS in about:flags with both --enable_win32k_renderer_lockdown and --disable-direct-write Review URL: https://codereview.chromium.org/344653002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278222 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia')
-rw-r--r--skia/BUILD.gn3
-rw-r--r--skia/ext/fontmgr_default_win.cc27
-rw-r--r--skia/ext/fontmgr_default_win.h14
-rw-r--r--skia/skia_chrome.gypi2
-rw-r--r--skia/skia_gn_files.gypi1
-rw-r--r--skia/skia_library.gypi2
6 files changed, 45 insertions, 4 deletions
diff --git a/skia/BUILD.gn b/skia/BUILD.gn
index 7f9f974..c6890d2 100644
--- a/skia/BUILD.gn
+++ b/skia/BUILD.gn
@@ -260,6 +260,8 @@ component("skia") {
"ext/convolver.h",
"ext/event_tracer_impl.cc",
"ext/event_tracer_impl.h",
+ "ext/fontmgr_default_win.cc",
+ "ext/fontmgr_default_win.h",
"ext/google_logging.cc",
"ext/image_operations.cc",
"ext/image_operations.h",
@@ -425,7 +427,6 @@ component("skia") {
} else {
sources -= [
"//third_party/skia/src/ports/SkFontHost_win.cpp",
- "//third_party/skia/src/ports/SkFontMgr_default_gdi.cpp",
"//third_party/skia/src/ports/SkFontMgr_win_dw.cpp",
"//third_party/skia/src/ports/SkOSFile_win.cpp",
"//third_party/skia/src/ports/SkRemotableFontMgr_win_dw.cpp",
diff --git a/skia/ext/fontmgr_default_win.cc b/skia/ext/fontmgr_default_win.cc
new file mode 100644
index 0000000..3b1031f
--- /dev/null
+++ b/skia/ext/fontmgr_default_win.cc
@@ -0,0 +1,27 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "skia/ext/fontmgr_default_win.h"
+
+#include "third_party/skia/include/ports/SkFontMgr.h"
+#include "third_party/skia/include/ports/SkTypeface_win.h"
+
+namespace {
+
+SkFontMgr* g_default_fontmgr;
+
+} // namespace
+
+void SetDefaultSkiaFactory(SkFontMgr* fontmgr) {
+ g_default_fontmgr = fontmgr;
+}
+
+SK_API SkFontMgr* SkFontMgr::Factory() {
+ // This will be set when DirectWrite is in use, and an SkFontMgr has been
+ // created with the pre-sandbox warmed up one. Otherwise, we fallback to a
+ // GDI SkFontMgr which is used in the browser.
+ if (g_default_fontmgr)
+ return SkRef(g_default_fontmgr);
+ return SkFontMgr_New_GDI();
+}
diff --git a/skia/ext/fontmgr_default_win.h b/skia/ext/fontmgr_default_win.h
new file mode 100644
index 0000000..cea72c1
--- /dev/null
+++ b/skia/ext/fontmgr_default_win.h
@@ -0,0 +1,14 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SKIA_EXT_FONTMGR_DEFAULT_WIN_H_
+#define SKIA_EXT_FONTMGR_DEFAULT_WIN_H_
+
+#include "third_party/skia/include/core/SkTypes.h"
+
+class SkFontMgr;
+
+void SK_API SetDefaultSkiaFactory(SkFontMgr* fontmgr);
+
+#endif // SKIA_EXT_FONTMGR_DEFAULT_WIN_H_
diff --git a/skia/skia_chrome.gypi b/skia/skia_chrome.gypi
index b553011..32f5ca0 100644
--- a/skia/skia_chrome.gypi
+++ b/skia/skia_chrome.gypi
@@ -38,6 +38,8 @@
'ext/convolver.h',
'ext/event_tracer_impl.cc',
'ext/event_tracer_impl.h',
+ 'ext/fontmgr_default_win.cc',
+ 'ext/fontmgr_default_win.h',
'ext/google_logging.cc',
'ext/image_operations.cc',
'ext/image_operations.h',
diff --git a/skia/skia_gn_files.gypi b/skia/skia_gn_files.gypi
index 13a6f42..23eda79 100644
--- a/skia/skia_gn_files.gypi
+++ b/skia/skia_gn_files.gypi
@@ -22,7 +22,6 @@
'<(skia_src_path)/ports/SkFontHost_FreeType.cpp',
'<(skia_src_path)/ports/SkFontHost_mac.cpp',
'<(skia_src_path)/ports/SkFontHost_win.cpp',
- '<(skia_src_path)/ports/SkFontMgr_default_gdi.cpp',
'<(skia_src_path)/ports/SkFontMgr_win_dw.cpp',
'<(skia_src_path)/ports/SkGlobalInitialization_chromium.cpp',
'<(skia_src_path)/ports/SkImageDecoder_empty.cpp',
diff --git a/skia/skia_library.gypi b/skia/skia_library.gypi
index b56a827..531d30b 100644
--- a/skia/skia_library.gypi
+++ b/skia/skia_library.gypi
@@ -52,7 +52,6 @@
'../third_party/skia/src/ports/SkFontConfigParser_android.cpp',
'../third_party/skia/src/ports/SkFontHost_mac.cpp',
'../third_party/skia/src/ports/SkFontHost_win.cpp',
- '../third_party/skia/src/ports/SkFontMgr_default_gdi.cpp',
'../third_party/skia/src/ports/SkFontMgr_win_dw.cpp',
'../third_party/skia/src/ports/SkGlobalInitialization_chromium.cpp',
'../third_party/skia/src/ports/SkOSFile_posix.cpp',
@@ -342,7 +341,6 @@
],
},{ # not 'OS == "win"'
'sources!': [
- '../third_party/skia/src/ports/SkFontMgr_default_gdi.cpp',
'../third_party/skia/src/ports/SkFontMgr_win_dw.cpp',
'../third_party/skia/src/ports/SkRemotableFontMgr_win_dw.cpp',
'../third_party/skia/src/ports/SkScalerContext_win_dw.cpp',