From a9a53d404bae80f8360adcf08043649d0a3bd63f Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Thu, 26 Apr 2018 15:31:43 -0700 Subject: [PATCH] Use the non-thread-hostile FontProviderSyncPtr for font resolution. (#5105) --- content_handler/application_runner.cc | 19 ++++++++++++------- content_handler/fuchsia_font_manager.cc | 9 ++------- content_handler/fuchsia_font_manager.h | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/content_handler/application_runner.cc b/content_handler/application_runner.cc index 4785169bd59..9c8bb575e3f 100644 --- a/content_handler/application_runner.cc +++ b/content_handler/application_runner.cc @@ -108,13 +108,18 @@ void ApplicationRunner::SetupICU() { } void ApplicationRunner::SetupGlobalFonts() { - fonts::FontProviderPtr font_provider( - host_context_->ConnectToEnvironmentService()); - auto font_manager = - sk_make_sp(std::move(font_provider)); - blink::FontCollection::ForProcess() - .GetFontCollection() - ->SetDefaultFontManager(std::move(font_manager)); + // Fuchsia does not have per application (shell) fonts. Instead, all fonts + // must be obtained from the font provider. + auto process_font_collection = + blink::FontCollection::ForProcess().GetFontCollection(); + + // Connect to the system font provider. + fonts::FontProviderSyncPtr sync_font_provider; + host_context_->ConnectToEnvironmentService(sync_font_provider.NewRequest()); + + // Set the default font manager. + process_font_collection->SetDefaultFontManager( + sk_make_sp(std::move(sync_font_provider))); } void ApplicationRunner::FireTerminationCallbackIfNecessary() { diff --git a/content_handler/fuchsia_font_manager.cc b/content_handler/fuchsia_font_manager.cc index c369e54400e..a370997a579 100644 --- a/content_handler/fuchsia_font_manager.cc +++ b/content_handler/fuchsia_font_manager.cc @@ -54,7 +54,7 @@ fonts::FontSlant ToFontSlant(SkFontStyle::Slant slant) { } // anonymous namespace -FuchsiaFontManager::FuchsiaFontManager(fonts::FontProviderPtr provider) +FuchsiaFontManager::FuchsiaFontManager(fonts::FontProviderSyncPtr provider) : font_provider_(std::move(provider)) {} FuchsiaFontManager::~FuchsiaFontManager() = default; @@ -97,12 +97,7 @@ SkTypeface* FuchsiaFontManager::onMatchFamilyStyle( request.slant = ToFontSlant(style.slant()); fonts::FontResponsePtr response; - font_provider_->GetFont( - std::move(request), - [&response](fonts::FontResponsePtr r) { response = std::move(r); }); - font_provider_.WaitForResponse(); - - if (!response) { + if (!font_provider_->GetFont(std::move(request), &response)) { FXL_DLOG(ERROR) << "Unable to contact the font provider. Did you run " "Flutter in an environment that has a font manager?"; return nullptr; diff --git a/content_handler/fuchsia_font_manager.h b/content_handler/fuchsia_font_manager.h index ecfb724b858..974ed2c72a4 100644 --- a/content_handler/fuchsia_font_manager.h +++ b/content_handler/fuchsia_font_manager.h @@ -17,8 +17,8 @@ #ifndef TXT_FUCHSIA_FONT_MANAGER_H_ #define TXT_FUCHSIA_FONT_MANAGER_H_ -#include #include +#include #include "lib/fxl/macros.h" #include "third_party/skia/include/core/SkStream.h" #include "third_party/skia/include/core/SkTypeface.h" @@ -28,7 +28,7 @@ namespace txt { class FuchsiaFontManager final : public SkFontMgr { public: - FuchsiaFontManager(fonts::FontProviderPtr provider); + FuchsiaFontManager(fonts::FontProviderSyncPtr provider); ~FuchsiaFontManager() override; @@ -81,7 +81,7 @@ class FuchsiaFontManager final : public SkFontMgr { FXL_DISALLOW_COPY_AND_ASSIGN(FuchsiaFontManager); private: - mutable fonts::FontProviderPtr font_provider_; + mutable fonts::FontProviderSyncPtr font_provider_; }; } // namespace txt