diff options
author | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-19 01:20:12 +0000 |
---|---|---|
committer | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-19 01:20:12 +0000 |
commit | 1399f24ce315f875733ce548774a91d3f27b1f66 (patch) | |
tree | 6b83b65bba5555bda79f239c89ffc81c5868deb3 /skia | |
parent | f1b75a3d17fb083d617ce6dc77b8ba8d728f9581 (diff) | |
download | chromium_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.gn | 3 | ||||
-rw-r--r-- | skia/ext/fontmgr_default_win.cc | 27 | ||||
-rw-r--r-- | skia/ext/fontmgr_default_win.h | 14 | ||||
-rw-r--r-- | skia/skia_chrome.gypi | 2 | ||||
-rw-r--r-- | skia/skia_gn_files.gypi | 1 | ||||
-rw-r--r-- | skia/skia_library.gypi | 2 |
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', |