Commit 67b13f2a authored by Dominik Röttsches's avatar Dominik Röttsches Committed by Commit Bot

Avoid IPC calls for fonts not retrievable through Downloadable Fonts

Use the list of candidates for available fonts implemented in [1],
lazily retrieve it and check the list before making IPC calls for
requesting a font. After retrieving the list once, this avoids making
IPC calls for font retrieval for fonts that are not available through
the Android Downloadable Fonts API implemented on the Java side of the
IPC interface.

[1] https://chromium-review.googlesource.com/c/chromium/src/+/2414514

Bug: 1115064
Change-Id: I0c9bee08082f522cbd00fbf85df0c2f4e806cbfc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2425049
Commit-Queue: Dominik Röttsches <drott@chromium.org>
Reviewed-by: default avatarNatalie Chouinard <chouinard@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#810112}
parent c449c01e
......@@ -131,6 +131,17 @@ sk_sp<SkTypeface> FontUniqueNameLookupAndroid::MatchUniqueNameFromFirmwareFonts(
match_result->ttc_index);
}
bool FontUniqueNameLookupAndroid::RequestedNameInQueryableFonts(
const String& font_unique_name) {
if (!queryable_fonts_) {
Vector<String> retrieved_fonts;
android_font_lookup_service_->GetUniqueNameLookupTable(&retrieved_fonts);
queryable_fonts_ = std::move(retrieved_fonts);
}
return queryable_fonts_ && queryable_fonts_->Contains(String::FromUTF8(
IcuFoldCase(font_unique_name.Utf8()).c_str()));
}
sk_sp<SkTypeface>
FontUniqueNameLookupAndroid::MatchUniqueNameFromDownloadableFonts(
const String& font_unique_name) {
......@@ -139,6 +150,9 @@ FontUniqueNameLookupAndroid::MatchUniqueNameFromDownloadableFonts(
return nullptr;
}
if (!RequestedNameInQueryableFonts(font_unique_name))
return nullptr;
DEFINE_STATIC_LOCAL_IMPL(
CustomCountHistogram, lookup_latency_histogram_success,
("Android.FontLookup.Blink.DLFontsLatencySuccess", 0, 10000000, 50),
......
......@@ -42,6 +42,8 @@ class FontUniqueNameLookupAndroid : public FontUniqueNameLookup {
sk_sp<SkTypeface> MatchUniqueNameFromFirmwareFonts(
const String& font_unique_name);
bool RequestedNameInQueryableFonts(const String& font_unique_name);
sk_sp<SkTypeface> MatchUniqueNameFromDownloadableFonts(
const String& font_unique_name);
......@@ -50,6 +52,7 @@ class FontUniqueNameLookupAndroid : public FontUniqueNameLookup {
mojo::Remote<mojom::blink::AndroidFontLookup> android_font_lookup_service_;
WTF::Deque<NotifyFontUniqueNameLookupReady> pending_callbacks_;
base::Optional<bool> sync_available_;
base::Optional<Vector<String>> queryable_fonts_;
DISALLOW_COPY_AND_ASSIGN(FontUniqueNameLookupAndroid);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment