Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4340)

Unified Diff: chrome/browser/android/vr_shell/textures/ui_texture.cc

Issue 2863693002: Fallback Font Cache and Character Hinting for VRShell (Closed)
Patch Set: using ICU script to increase cache hits Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/gfx/BUILD.gn » ('j') | ui/gfx/font_fallback_android.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/android/vr_shell/textures/ui_texture.cc
diff --git a/chrome/browser/android/vr_shell/textures/ui_texture.cc b/chrome/browser/android/vr_shell/textures/ui_texture.cc
index b5edf11cafcede42e9f3c72f548c09787a5aa0e8..d56fa9e23ee58173b788c27d9a61e200993aaeca 100644
--- a/chrome/browser/android/vr_shell/textures/ui_texture.cc
+++ b/chrome/browser/android/vr_shell/textures/ui_texture.cc
@@ -13,9 +13,10 @@
#include "base/memory/ptr_util.h"
#include "base/strings/string_util.h"
#include "chrome/browser/browser_process.h"
+#include "third_party/icu/source/common/unicode/uscript.h"
#include "third_party/skia/include/core/SkCanvas.h"
-#include "third_party/skia/include/ports/SkFontMgr.h"
#include "ui/gfx/canvas.h"
+#include "ui/gfx/font_fallback_android.h"
#include "ui/gfx/font_list.h"
#include "ui/gl/gl_bindings.h"
@@ -23,6 +24,15 @@ namespace vr_shell {
namespace {
constexpr char kDefaultFontFamily[] = "sans-serif";
+
+std::vector<UChar32> CollectDifferentChars(base::string16 text) {
+ std::set<UChar32> characters;
+ for (base::i18n::UTF16CharIterator it(&text); !it.end(); it.Advance()) {
+ characters.insert(it.get());
+ }
+ return std::vector<UChar32>(characters.begin(), characters.end());
+}
+
} // namespace
UiTexture::UiTexture() = default;
@@ -32,6 +42,7 @@ UiTexture::~UiTexture() = default;
void UiTexture::DrawAndLayout(SkCanvas* canvas, const gfx::Size& texture_size) {
cc::SkiaPaintCanvas paint_canvas(canvas);
gfx::Canvas gfx_canvas(&paint_canvas, 1.0f);
+
gfx_canvas.DrawColor(SK_ColorTRANSPARENT);
Draw(&gfx_canvas, texture_size);
}
@@ -44,28 +55,11 @@ gfx::FontList UiTexture::GetFontList(int size, base::string16 text) {
gfx::Font default_font(kDefaultFontFamily, size);
std::vector<gfx::Font> fonts{default_font};
- std::set<wchar_t> characters;
- for (base::i18n::UTF16CharIterator it(&text); !it.end(); it.Advance()) {
- characters.insert(it.get());
- }
- // TODO(acondor): Obtain fallback fonts with gfx::GetFallbackFonts
- // (which is not implemented for android yet) in order to avoid
- // querying per character.
-
- sk_sp<SkFontMgr> font_mgr(SkFontMgr::RefDefault());
std::set<std::string> names;
// TODO(acondor): Query BrowserProcess to obtain the application locale.
- for (wchar_t character : characters) {
- sk_sp<SkTypeface> tf(font_mgr->matchFamilyStyleCharacter(
- kDefaultFontFamily, SkFontStyle(), nullptr, 0, character));
-
- // TODO(acondor): How should we handle no matching font?
- if (!tf)
- continue;
- SkString sk_name;
- tf->getFamilyName(&sk_name);
- std::string name(sk_name.c_str());
- if (name != kDefaultFontFamily)
+ for (UChar32 c : CollectDifferentChars(text)) {
+ std::string name = gfx::GetFallbackFontNameForChar(default_font, c, "");
+ if (!name.empty())
names.insert(name);
}
for (const auto& name : names)
« no previous file with comments | « no previous file | ui/gfx/BUILD.gn » ('j') | ui/gfx/font_fallback_android.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698