Replace use of Fontmgr::RefDefault with explicit creation calls (flutter/engine#48571)

In https://g-issues.skia.org/issues/305780908 Skia is removing the
default SkFontMgr. Previous work consolidated all references to
txt/platform.h and this replaces those last references. I attempted to
mirror the existing functionality, which still responds to GN flags and
the target platform.

After this PR, Flutter should not be depending on the default fontmgr
(and the defines in flutter_defines.gni) will maintain that behavior
until the legacy functions/methods are deleted from Skia. There were a
few tests that I missed on an earlier PR which relied on the default
font (helper added in #47493). These tests were failing because they
were making some assertions related to TextBlobs, which didn't work if
the (now-empty) Typeface they loaded had no glyphs. Thus, I added a few
extra asserts to make sure these textblobs *had* glyphs which make the
failing tests less mysterious, should this issue crop up again.

I cleaned up Flutter's BUILD.gn file for Skia a bit, deleting unused
targets related to the font managers. This involved fixing an implicit
dependency from //third_party/glfw/ to `Gdi32.lib` on Windows.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide] and the [C++,
Objective-C, Java style guides].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I added new tests to check the change I am making or feature I am
adding, or the PR is [test-exempt]. See [testing the engine] for
instructions on writing and running engine tests.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [x] I signed the [CLA].
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[C++, Objective-C, Java style guides]:
https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
[testing the engine]:
https://github.com/flutter/flutter/wiki/Testing-the-engine
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
This commit is contained in:
Kevin Lubick 2023-12-06 13:02:34 -05:00 committed by GitHub
parent 9eb8dc90f3
commit d5d8b5de90
17 changed files with 132 additions and 140 deletions

View File

@ -55,6 +55,8 @@ source_set("glfw") {
"$_checkout_dir/src/win32_window.c",
]
libs = [ "Gdi32.lib" ]
defines = [ "_GLFW_WIN32" ]
} else if (is_linux) {
sources += [

View File

@ -11,6 +11,7 @@
#include "flutter/display_list/skia/dl_sk_canvas.h"
#include "flutter/display_list/skia/dl_sk_conversions.h"
#include "flutter/display_list/skia/dl_sk_dispatcher.h"
#include "flutter/display_list/testing/dl_test_snippets.h"
#include "flutter/display_list/testing/dl_test_surface_provider.h"
#include "flutter/display_list/utils/dl_comparable.h"
#include "flutter/fml/file.h"
@ -58,7 +59,7 @@ constexpr SkScalar kRenderRadius = std::min(kRenderWidth, kRenderHeight) / 2.0;
constexpr SkScalar kRenderCornerRadius = kRenderRadius / 5.0;
constexpr SkPoint kTestCenter = SkPoint::Make(kTestWidth / 2, kTestHeight / 2);
constexpr SkRect kTestBounds = SkRect::MakeWH(kTestWidth, kTestHeight);
constexpr SkRect kTestBounds2 = SkRect::MakeWH(kTestWidth, kTestHeight);
constexpr SkRect kRenderBounds =
SkRect::MakeLTRB(kRenderLeft, kRenderTop, kRenderRight, kRenderBottom);
@ -486,7 +487,7 @@ struct SkJobRenderer : public MatrixClipJobRenderer {
sk_sp<SkPicture> MakePicture(const RenderJobInfo& info) {
SkPictureRecorder recorder;
SkRTreeFactory rtree_factory;
SkCanvas* cv = recorder.beginRecording(kTestBounds, &rtree_factory);
SkCanvas* cv = recorder.beginRecording(kTestBounds2, &rtree_factory);
Render(cv, info);
return recorder.finishRecordingAsPicture();
}
@ -532,7 +533,7 @@ struct DlJobRenderer : public MatrixClipJobRenderer {
}
sk_sp<DisplayList> MakeDisplayList(const RenderJobInfo& info) {
DisplayListBuilder builder(kTestBounds);
DisplayListBuilder builder(kTestBounds2);
Render(&builder, info);
return builder.Build();
}
@ -2750,9 +2751,10 @@ class CanvasCompareTester {
static sk_sp<SkTextBlob> MakeTextBlob(const std::string& string,
SkScalar font_height) {
SkFont font(txt::GetDefaultFontManager()->matchFamilyStyle(
"ahem", SkFontStyle::Normal()),
font_height);
SkFont font = CreateTestFontOfSize(font_height);
sk_sp<SkTypeface> face = font.refTypeface();
FML_CHECK(face);
FML_CHECK(face->countGlyphs() > 0) << "No glyphs in font";
return SkTextBlob::MakeFromText(string.c_str(), string.size(), font,
SkTextEncoding::kUTF8);
}
@ -3801,7 +3803,7 @@ TEST_F(DisplayListRendering, SaveLayerClippedContentStillFilters) {
const SkRect draw_rect = SkRect::MakeLTRB( //
kRenderRight + 1, //
kRenderTop, //
kTestBounds.fRight, //
kTestBounds2.fRight, //
kRenderBottom //
);
TestParameters test_params(
@ -3812,7 +3814,7 @@ TEST_F(DisplayListRendering, SaveLayerClippedContentStillFilters) {
layer_paint.setImageFilter(layer_filter);
ctx.canvas->save();
ctx.canvas->clipRect(kRenderBounds, SkClipOp::kIntersect, false);
ctx.canvas->saveLayer(&kTestBounds, &layer_paint);
ctx.canvas->saveLayer(&kTestBounds2, &layer_paint);
ctx.canvas->drawRect(draw_rect, ctx.paint);
ctx.canvas->restore();
ctx.canvas->restore();
@ -3824,7 +3826,7 @@ TEST_F(DisplayListRendering, SaveLayerClippedContentStillFilters) {
layer_paint.setImageFilter(layer_filter);
ctx.canvas->Save();
ctx.canvas->ClipRect(kRenderBounds, ClipOp::kIntersect, false);
ctx.canvas->SaveLayer(&kTestBounds, &layer_paint);
ctx.canvas->SaveLayer(&kTestBounds2, &layer_paint);
ctx.canvas->DrawRect(draw_rect, ctx.paint);
ctx.canvas->Restore();
ctx.canvas->Restore();
@ -3906,19 +3908,19 @@ TEST_F(DisplayListRendering, SaveLayerConsolidation) {
const std::string& desc1, const std::string& desc2,
const RenderEnvironment* env) {
DisplayListBuilder nested_builder;
nested_builder.SaveLayer(&kTestBounds, &paint1);
nested_builder.SaveLayer(&kTestBounds, &paint2);
nested_builder.SaveLayer(&kTestBounds2, &paint1);
nested_builder.SaveLayer(&kTestBounds2, &paint2);
render_content(nested_builder);
auto nested_results = env->getResult(nested_builder.Build());
DisplayListBuilder reverse_builder;
reverse_builder.SaveLayer(&kTestBounds, &paint2);
reverse_builder.SaveLayer(&kTestBounds, &paint1);
reverse_builder.SaveLayer(&kTestBounds2, &paint2);
reverse_builder.SaveLayer(&kTestBounds2, &paint1);
render_content(reverse_builder);
auto reverse_results = env->getResult(reverse_builder.Build());
DisplayListBuilder combined_builder;
combined_builder.SaveLayer(&kTestBounds, &paint_both);
combined_builder.SaveLayer(&kTestBounds2, &paint_both);
render_content(combined_builder);
auto combined_results = env->getResult(combined_builder.Build());
@ -4056,7 +4058,7 @@ TEST_F(DisplayListRendering, MatrixColorFilterModifyTransparencyCheck) {
builder2.Translate(kTestCenter.fX, kTestCenter.fY);
builder2.Rotate(45);
builder2.Translate(-kTestCenter.fX, -kTestCenter.fY);
builder2.SaveLayer(&kTestBounds, &filter_save_paint);
builder2.SaveLayer(&kTestBounds2, &filter_save_paint);
builder2.DrawRect(kRenderBounds, paint);
builder2.Restore();
auto display_list2 = builder2.Build();
@ -4115,8 +4117,8 @@ TEST_F(DisplayListRendering, MatrixColorFilterOpacityCommuteCheck) {
DlPaint filter_save_paint = DlPaint().setColorFilter(filter);
DisplayListBuilder builder1;
builder1.SaveLayer(&kTestBounds, &opacity_save_paint);
builder1.SaveLayer(&kTestBounds, &filter_save_paint);
builder1.SaveLayer(&kTestBounds2, &opacity_save_paint);
builder1.SaveLayer(&kTestBounds2, &filter_save_paint);
// builder1.DrawRect(kRenderBounds.makeOffset(20, 20), DlPaint());
builder1.DrawRect(kRenderBounds, paint);
builder1.Restore();
@ -4124,8 +4126,8 @@ TEST_F(DisplayListRendering, MatrixColorFilterOpacityCommuteCheck) {
auto display_list1 = builder1.Build();
DisplayListBuilder builder2;
builder2.SaveLayer(&kTestBounds, &filter_save_paint);
builder2.SaveLayer(&kTestBounds, &opacity_save_paint);
builder2.SaveLayer(&kTestBounds2, &filter_save_paint);
builder2.SaveLayer(&kTestBounds2, &opacity_save_paint);
// builder1.DrawRect(kRenderBounds.makeOffset(20, 20), DlPaint());
builder2.DrawRect(kRenderBounds, paint);
builder2.Restore();
@ -4232,7 +4234,7 @@ TEST_F(DisplayListRendering, BlendColorFilterModifyTransparencyCheck) {
builder2.Translate(kTestCenter.fX, kTestCenter.fY);
builder2.Rotate(45);
builder2.Translate(-kTestCenter.fX, -kTestCenter.fY);
builder2.SaveLayer(&kTestBounds, &filter_save_paint);
builder2.SaveLayer(&kTestBounds2, &filter_save_paint);
builder2.DrawRect(kRenderBounds, paint);
builder2.Restore();
auto display_list2 = builder2.Build();
@ -4284,8 +4286,8 @@ TEST_F(DisplayListRendering, BlendColorFilterOpacityCommuteCheck) {
DlPaint filter_save_paint = DlPaint().setColorFilter(&filter);
DisplayListBuilder builder1;
builder1.SaveLayer(&kTestBounds, &opacity_save_paint);
builder1.SaveLayer(&kTestBounds, &filter_save_paint);
builder1.SaveLayer(&kTestBounds2, &opacity_save_paint);
builder1.SaveLayer(&kTestBounds2, &filter_save_paint);
// builder1.DrawRect(kRenderBounds.makeOffset(20, 20), DlPaint());
builder1.DrawRect(kRenderBounds, paint);
builder1.Restore();
@ -4293,8 +4295,8 @@ TEST_F(DisplayListRendering, BlendColorFilterOpacityCommuteCheck) {
auto display_list1 = builder1.Build();
DisplayListBuilder builder2;
builder2.SaveLayer(&kTestBounds, &filter_save_paint);
builder2.SaveLayer(&kTestBounds, &opacity_save_paint);
builder2.SaveLayer(&kTestBounds2, &filter_save_paint);
builder2.SaveLayer(&kTestBounds2, &opacity_save_paint);
// builder1.DrawRect(kRenderBounds.makeOffset(20, 20), DlPaint());
builder2.DrawRect(kRenderBounds, paint);
builder2.Restore();

View File

@ -74,11 +74,12 @@ sk_sp<SkTextBlob> PerformanceOverlayLayer::MakeStatisticsText(
const std::string& label_prefix,
const std::string& font_path) {
SkFont font;
if (font_path != "") {
sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
font = SkFont(font_mgr->makeFromFile(font_path.c_str()));
sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
if (font_path == "") {
font = SkFont(font_mgr->matchFamilyStyle(nullptr, {}), 15);
} else {
font = SkFont(font_mgr->makeFromFile(font_path.c_str()), 15);
}
font.setSize(15);
double max_ms_per_frame = stopwatch.MaxDelta().ToMillisecondsF();
double average_ms_per_frame = stopwatch.AverageDelta().ToMillisecondsF();

View File

@ -277,6 +277,7 @@ impeller_component("entity_unittests") {
":entity_test_helpers",
"../geometry:geometry_asserts",
"../playground:playground_test",
"//flutter/display_list/testing:display_list_testing",
"//flutter/impeller/typographer/backends/skia:typographer_skia_backend",
]
}

View File

@ -8,6 +8,7 @@
#include <utility>
#include <vector>
#include "flutter/display_list/testing/dl_test_snippets.h"
#include "fml/logging.h"
#include "gtest/gtest.h"
#include "impeller/core/formats.h"
@ -2192,8 +2193,7 @@ TEST_P(EntityTest, InheritOpacityTest) {
// Text contents can accept opacity if the text frames do not
// overlap
SkFont font;
font.setSize(30);
SkFont font = flutter::testing::CreateTestFontOfSize(30);
auto blob = SkTextBlob::MakeFromString("A", font);
auto frame = MakeTextFrameFromTextBlobSkia(blob);
auto lazy_glyph_atlas =

View File

@ -46,6 +46,7 @@ impeller_component("typographer_unittests") {
"../playground:playground_test",
"backends/skia:typographer_skia_backend",
"backends/stb:typographer_stb_backend",
"//flutter/display_list/testing:display_list_testing",
"//flutter/third_party/txt",
]
}

View File

@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/testing/dl_test_snippets.h"
#include "flutter/testing/testing.h"
#include "impeller/playground/playground_test.h"
#include "impeller/typographer/backends/skia/text_frame_skia.h"
@ -9,6 +10,7 @@
#include "impeller/typographer/lazy_glyph_atlas.h"
#include "impeller/typographer/rectangle_packer.h"
#include "third_party/skia/include/core/SkData.h"
#include "third_party/skia/include/core/SkFont.h"
#include "third_party/skia/include/core/SkFontMgr.h"
#include "third_party/skia/include/core/SkRect.h"
#include "third_party/skia/include/core/SkTextBlob.h"
@ -38,7 +40,7 @@ static std::shared_ptr<GlyphAtlas> CreateGlyphAtlas(
}
TEST_P(TypographerTest, CanConvertTextBlob) {
SkFont font;
SkFont font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString(
"the quick brown fox jumped over the lazy dog.", font);
ASSERT_TRUE(blob);
@ -59,7 +61,7 @@ TEST_P(TypographerTest, CanCreateGlyphAtlas) {
auto context = TypographerContextSkia::Make();
auto atlas_context = context->CreateGlyphAtlasContext();
ASSERT_TRUE(context && context->IsValid());
SkFont sk_font;
SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString("hello", sk_font);
ASSERT_TRUE(blob);
auto atlas = CreateGlyphAtlas(
@ -97,7 +99,7 @@ TEST_P(TypographerTest, LazyAtlasTracksColor) {
ASSERT_TRUE(mapping);
sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
SkFont emoji_font(font_mgr->makeFromData(mapping), 50.0);
SkFont sk_font;
SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString("hello", sk_font);
ASSERT_TRUE(blob);
@ -130,7 +132,7 @@ TEST_P(TypographerTest, GlyphAtlasWithOddUniqueGlyphSize) {
auto context = TypographerContextSkia::Make();
auto atlas_context = context->CreateGlyphAtlasContext();
ASSERT_TRUE(context && context->IsValid());
SkFont sk_font;
SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString("AGH", sk_font);
ASSERT_TRUE(blob);
auto atlas = CreateGlyphAtlas(
@ -147,7 +149,7 @@ TEST_P(TypographerTest, GlyphAtlasIsRecycledIfUnchanged) {
auto context = TypographerContextSkia::Make();
auto atlas_context = context->CreateGlyphAtlasContext();
ASSERT_TRUE(context && context->IsValid());
SkFont sk_font;
SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString("spooky skellingtons", sk_font);
ASSERT_TRUE(blob);
auto atlas = CreateGlyphAtlas(
@ -177,7 +179,7 @@ TEST_P(TypographerTest, GlyphAtlasWithLotsOfdUniqueGlyphSize) {
"œ∑´®†¥¨ˆøπ““‘‘åß∂ƒ©˙∆˚¬…æ≈ç√∫˜µ≤≥≥≥≥÷¡™£¢∞§¶•ªº–≠⁄€‹›fifl‡°·‚—±Œ„´‰Á¨Ø∏”’/"
"* Í˝ */¸˛Ç◊ı˜Â¯˘¿";
SkFont sk_font;
SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString(test_string, sk_font);
ASSERT_TRUE(blob);
@ -214,7 +216,7 @@ TEST_P(TypographerTest, GlyphAtlasTextureIsRecycledIfUnchanged) {
auto context = TypographerContextSkia::Make();
auto atlas_context = context->CreateGlyphAtlasContext();
ASSERT_TRUE(context && context->IsValid());
SkFont sk_font;
SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString("spooky 1", sk_font);
ASSERT_TRUE(blob);
auto atlas = CreateGlyphAtlas(
@ -247,7 +249,7 @@ TEST_P(TypographerTest, GlyphAtlasTextureIsRecreatedIfTypeChanges) {
auto context = TypographerContextSkia::Make();
auto atlas_context = context->CreateGlyphAtlasContext();
ASSERT_TRUE(context && context->IsValid());
SkFont sk_font;
SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
auto blob = SkTextBlob::MakeFromString("spooky 1", sk_font);
ASSERT_TRUE(blob);
auto atlas = CreateGlyphAtlas(

View File

@ -202,6 +202,7 @@ if (enable_unittests) {
fixtures = [
"fixtures/shelltest_screenshot.png",
"fixtures/hello_loop_2.gif",
"//flutter/third_party/txt/third_party/fonts/Roboto-Regular.ttf",
]
}
@ -322,6 +323,7 @@ if (enable_unittests) {
":shell_unittests_fixtures",
"//flutter/assets",
"//flutter/common/graphics",
"//flutter/display_list/testing:display_list_testing",
"//flutter/shell/common:base64",
"//flutter/shell/profiling:profiling_unittests",
"//flutter/shell/version",

View File

@ -4,9 +4,11 @@
#include "flutter/display_list/display_list.h"
#include "flutter/display_list/dl_builder.h"
#include "flutter/display_list/testing/dl_test_snippets.h"
#include "flutter/shell/common/dl_op_spy.h"
#include "flutter/testing/testing.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkFont.h"
#include "third_party/skia/include/core/SkRSXform.h"
namespace flutter {
@ -545,7 +547,7 @@ TEST(DlOpSpy, DrawTextBlob) {
DisplayListBuilder builder;
DlPaint paint(DlColor::kBlack());
std::string string = "xx";
SkFont font;
SkFont font = CreateTestFontOfSize(12);
auto text_blob = SkTextBlob::MakeFromString(string.c_str(), font);
builder.DrawTextBlob(text_blob, 1, 1, paint);
sk_sp<DisplayList> dl = builder.Build();
@ -557,7 +559,7 @@ TEST(DlOpSpy, DrawTextBlob) {
DisplayListBuilder builder;
DlPaint paint(DlColor::kTransparent());
std::string string = "xx";
SkFont font;
SkFont font = CreateTestFontOfSize(12);
auto text_blob = SkTextBlob::MakeFromString(string.c_str(), font);
builder.DrawTextBlob(text_blob, 1, 1, paint);
sk_sp<DisplayList> dl = builder.Build();

View File

@ -750,6 +750,11 @@ if (enable_unittests) {
"$root_gen_dir/flutter/shell/common/assets/shelltest_screenshot.png"
dest = "assets/shelltest_screenshot.png"
},
{
path = rebase_path(
"//flutter/third_party/txt/third_party/fonts/Roboto-Regular.ttf")
dest = "assets/Roboto-Regular.ttf"
},
]
libraries = vulkan_validation_libs

View File

@ -208,17 +208,9 @@ template("optional") {
}
}
group("fontmgr_factory") {
public_deps = [ skia_fontmgr_factory ]
}
optional("fontmgr_empty_factory") {
enabled = true
sources = [ "$_skia_root/src/ports/SkFontMgr_empty_factory.cpp" ]
}
optional("fontmgr_android") {
enabled = skia_enable_fontmgr_android
public_defines = [ "SK_FONTMGR_ANDROID_AVAILABLE" ]
deps = [
":typeface_freetype",
@ -231,11 +223,6 @@ optional("fontmgr_android") {
"$_skia_root/src/ports/SkFontMgr_android_parser.h",
]
}
optional("fontmgr_android_factory") {
enabled = skia_enable_fontmgr_android
deps = [ ":fontmgr_android" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_android_factory.cpp" ]
}
optional("fontmgr_custom") {
enabled =
@ -247,24 +234,9 @@ optional("fontmgr_custom") {
sources = [ "$_skia_root/src/ports/SkFontMgr_custom.cpp" ]
}
optional("fontmgr_custom_directory") {
enabled = skia_enable_fontmgr_custom_directory
deps = [
":fontmgr_custom",
":typeface_freetype",
]
public = [ "$_skia_root/include/ports/SkFontMgr_directory.h" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_custom_directory.cpp" ]
}
optional("fontmgr_custom_directory_factory") {
enabled = skia_enable_fontmgr_custom_directory
deps = [ ":fontmgr_custom_directory" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_custom_directory_factory.cpp" ]
}
optional("fontmgr_custom_embedded") {
enabled = skia_enable_fontmgr_custom_embedded
public_defines = [ "SK_FONTMGR_FREETYPE_EMBEDDED_AVAILABLE" ]
deps = [
":fontmgr_custom",
@ -272,14 +244,10 @@ optional("fontmgr_custom_embedded") {
]
sources = [ "$_skia_root/src/ports/SkFontMgr_custom_embedded.cpp" ]
}
optional("fontmgr_custom_embedded_factory") {
enabled = skia_enable_fontmgr_custom_embedded
deps = [ ":fontmgr_custom_embedded" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_custom_embedded_factory.cpp" ]
}
optional("fontmgr_custom_empty") {
enabled = skia_enable_fontmgr_custom_empty
public_defines = [ "SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE" ]
deps = [
":fontmgr_custom",
@ -288,14 +256,10 @@ optional("fontmgr_custom_empty") {
public = [ "$_skia_root/include/ports/SkFontMgr_empty.h" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_custom_empty.cpp" ]
}
optional("fontmgr_custom_empty_factory") {
enabled = skia_enable_fontmgr_custom_empty
deps = [ ":fontmgr_custom_empty" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_custom_empty_factory.cpp" ]
}
optional("fontmgr_fontconfig") {
enabled = skia_enable_fontmgr_fontconfig
public_defines = [ "SK_FONTMGR_FONTCONFIG_AVAILABLE" ]
# The public header includes fontconfig.h and uses FcConfig*
public_deps = [ "//third_party:fontconfig" ]
@ -303,40 +267,10 @@ optional("fontmgr_fontconfig") {
deps = [ ":typeface_freetype" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_fontconfig.cpp" ]
}
optional("fontmgr_fontconfig_factory") {
enabled = skia_enable_fontmgr_fontconfig
deps = [ ":fontmgr_fontconfig" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_fontconfig_factory.cpp" ]
}
optional("fontmgr_FontConfigInterface") {
enabled = skia_enable_fontmgr_FontConfigInterface
deps = [
":typeface_freetype",
"//third_party:fontconfig",
]
public = [
"$_skia_root/include/ports/SkFontConfigInterface.h",
"$_skia_root/include/ports/SkFontMgr_FontConfigInterface.h",
]
sources = [
"$_skia_root/src/ports/SkFontConfigInterface.cpp",
"$_skia_root/src/ports/SkFontConfigInterface_direct.cpp",
"$_skia_root/src/ports/SkFontConfigInterface_direct_factory.cpp",
"$_skia_root/src/ports/SkFontConfigTypeface.h",
"$_skia_root/src/ports/SkFontMgr_FontConfigInterface.cpp",
]
}
optional("fontmgr_FontConfigInterface_factory") {
enabled = skia_enable_fontmgr_FontConfigInterface
deps = [ ":fontmgr_FontConfigInterface" ]
sources =
[ "$_skia_root/src/ports/SkFontMgr_FontConfigInterface_factory.cpp" ]
}
optional("fontmgr_fuchsia") {
enabled = skia_enable_fontmgr_fuchsia
public_defines = [ "SK_FONTMGR_FUCHSIA_AVAILABLE" ]
deps = []
@ -352,7 +286,10 @@ optional("fontmgr_fuchsia") {
optional("fontmgr_mac_ct") {
enabled = skia_use_fonthost_mac
public_defines = [ "SK_TYPEFACE_FACTORY_CORETEXT" ]
public_defines = [
"SK_TYPEFACE_FACTORY_CORETEXT",
"SK_FONTMGR_CORETEXT_AVAILABLE",
]
public = [
"$_skia_root/include/ports/SkFontMgr_mac_ct.h",
"$_skia_root/include/ports/SkTypeface_mac.h",
@ -384,16 +321,14 @@ optional("fontmgr_mac_ct") {
]
}
}
optional("fontmgr_mac_ct_factory") {
enabled = skia_use_fonthost_mac
deps = [ ":fontmgr_mac_ct" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_mac_ct_factory.cpp" ]
}
optional("fontmgr_win") {
enabled = skia_enable_fontmgr_win
public_defines = [ "SK_TYPEFACE_FACTORY_DIRECTWRITE" ]
public_defines = [
"SK_TYPEFACE_FACTORY_DIRECTWRITE",
"SK_FONTMGR_DIRECTWRITE_AVAILABLE",
]
public = [ "$_skia_root/include/ports/SkTypeface_win.h" ]
sources = [
"$_skia_root/include/ports/SkFontMgr_indirect.h",
@ -422,19 +357,6 @@ optional("fontmgr_win") {
}
}
}
optional("fontmgr_win_factory") {
enabled = skia_enable_fontmgr_win
deps = [ ":fontmgr_win" ]
sources = [ "$_skia_root/src/ports/SkFontMgr_win_dw_factory.cpp" ]
}
optional("fontmgr_win_gdi") {
enabled = skia_enable_fontmgr_win_gdi
public = [ "$_skia_root/include/ports/SkTypeface_win.h" ]
sources = [ "$_skia_root/src/ports/SkFontHost_win.cpp" ]
libs = [ "Gdi32.lib" ]
}
optional("gpu_shared") {
enabled = skia_enable_ganesh
@ -675,16 +597,13 @@ skia_component("skia") {
check_includes = false
public_deps = [
":fontmgr_FontConfigInterface",
":fontmgr_android",
":fontmgr_custom_directory",
":fontmgr_custom_embedded",
":fontmgr_custom_empty",
":fontmgr_fontconfig",
":fontmgr_fuchsia",
":fontmgr_mac_ct",
":fontmgr_win",
":fontmgr_win_gdi",
":gpu",
":jpeg_encode",
":png_encode",
@ -693,7 +612,6 @@ skia_component("skia") {
]
deps = [
":fontmgr_factory",
":hsw",
":jpeg_decode",
":ndk_images",

View File

@ -23,6 +23,12 @@ flutter_defines = [
# When running Metal, ensure that command buffers are scheduled before
# returning from submit.
"SK_METAL_WAIT_UNTIL_SCHEDULED",
# Staging for b/305780908
"SK_DEFAULT_TYPEFACE_IS_EMPTY",
"SK_DISABLE_LEGACY_DEFAULT_TYPEFACE",
"SK_DISABLE_LEGACY_FONTMGR_FACTORY",
"SK_DISABLE_LEGACY_FONTMGR_REFDEFAULT",
]
if (!is_fuchsia) {

View File

@ -4,6 +4,10 @@
#include "txt/platform.h"
#if defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
#include "third_party/skia/include/ports/SkFontMgr_empty.h"
#endif
namespace txt {
std::vector<std::string> GetDefaultFontFamilies() {
@ -11,7 +15,12 @@ std::vector<std::string> GetDefaultFontFamilies() {
}
sk_sp<SkFontMgr> GetDefaultFontManager(uint32_t font_initialization_data) {
return SkFontMgr::RefDefault();
#if defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
static sk_sp<SkFontMgr> mgr = SkFontMgr_New_Custom_Empty();
#else
static sk_sp<SkFontMgr> mgr = SkFontMgr::RefEmpty();
#endif
return mgr;
}
} // namespace txt

View File

@ -4,6 +4,14 @@
#include "txt/platform.h"
#if defined(SK_FONTMGR_ANDROID_AVAILABLE)
#include "third_party/skia/include/ports/SkFontMgr_android.h"
#endif
#if defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
#include "third_party/skia/include/ports/SkFontMgr_empty.h"
#endif
namespace txt {
std::vector<std::string> GetDefaultFontFamilies() {
@ -11,7 +19,14 @@ std::vector<std::string> GetDefaultFontFamilies() {
}
sk_sp<SkFontMgr> GetDefaultFontManager(uint32_t font_initialization_data) {
return SkFontMgr::RefDefault();
#if defined(SK_FONTMGR_ANDROID_AVAILABLE)
static sk_sp<SkFontMgr> mgr = SkFontMgr_New_Android(nullptr);
#elif defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
static sk_sp<SkFontMgr> mgr = SkFontMgr_New_Custom_Empty();
#else
static sk_sp<SkFontMgr> mgr = SkFontMgr::RefEmpty();
#endif
return mgr;
}
} // namespace txt

View File

@ -7,6 +7,10 @@
#include "third_party/skia/include/ports/SkFontMgr_fuchsia.h"
#include "txt/platform.h"
#if defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
#include "third_party/skia/include/ports/SkFontMgr_empty.h"
#endif
namespace txt {
std::vector<std::string> GetDefaultFontFamilies() {
@ -19,7 +23,12 @@ sk_sp<SkFontMgr> GetDefaultFontManager(uint32_t font_initialization_data) {
sync_font_provider.Bind(zx::channel(font_initialization_data));
return SkFontMgr_New_Fuchsia(std::move(sync_font_provider));
} else {
return SkFontMgr::RefDefault();
#if defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
static sk_sp<SkFontMgr> mgr = SkFontMgr_New_Custom_Empty();
#else
static sk_sp<SkFontMgr> mgr = SkFontMgr::RefEmpty();
#endif
return mgr;
}
}

View File

@ -4,6 +4,14 @@
#include "txt/platform.h"
#if defined(SK_FONTMGR_FONTCONFIG_AVAILABLE)
#include "third_party/skia/include/ports/SkFontMgr_fontconfig.h"
#endif
#if defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
#include "third_party/skia/include/ports/SkFontMgr_empty.h"
#endif
namespace txt {
std::vector<std::string> GetDefaultFontFamilies() {
@ -11,7 +19,14 @@ std::vector<std::string> GetDefaultFontFamilies() {
}
sk_sp<SkFontMgr> GetDefaultFontManager(uint32_t font_initialization_data) {
return SkFontMgr::RefDefault();
#if defined(SK_FONTMGR_FONTCONFIG_AVAILABLE)
static sk_sp<SkFontMgr> mgr = SkFontMgr_New_FontConfig(nullptr);
#elif defined(SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE)
static sk_sp<SkFontMgr> mgr = SkFontMgr_New_Custom_Empty();
#else
static sk_sp<SkFontMgr> mgr = SkFontMgr::RefEmpty();
#endif
return mgr;
}
} // namespace txt

View File

@ -5,6 +5,7 @@
#include <TargetConditionals.h>
#include "flutter/fml/platform/darwin/platform_version.h"
#include "third_party/skia/include/ports/SkFontMgr_mac_ct.h"
#include "third_party/skia/include/ports/SkTypeface_mac.h"
#include "txt/platform.h"
#include "txt/platform_mac.h"
@ -37,7 +38,8 @@ std::vector<std::string> GetDefaultFontFamilies() {
}
sk_sp<SkFontMgr> GetDefaultFontManager(uint32_t font_initialization_data) {
return SkFontMgr::RefDefault();
static sk_sp<SkFontMgr> mgr = SkFontMgr_New_CoreText(nullptr);
return mgr;
}
void RegisterSystemFonts(const DynamicFontManager& dynamic_font_manager) {