From b1089dc95d2389a6fe348272aba963af903f8e1a Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Fri, 2 Nov 2018 16:58:49 -0700 Subject: [PATCH] add a cache --- atom/browser/font_defaults.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/atom/browser/font_defaults.cc b/atom/browser/font_defaults.cc index d6b6d4f6e78e0..fb8c496254158 100644 --- a/atom/browser/font_defaults.cc +++ b/atom/browser/font_defaults.cc @@ -5,6 +5,7 @@ #include "atom/browser/font_defaults.h" #include +#include #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" @@ -106,11 +107,30 @@ std::string GetDefaultFontForPref(const char* pref_name) { return std::string(); } +// Map from script to font. +// Key comparison uses pointer equality. +using ScriptFontMap = std::unordered_map; + +// Map from font family to ScriptFontMap. +// Key comparison uses pointer equality. +using FontFamilyMap = std::unordered_map; + +FontFamilyMap g_font_cache; + base::string16 FetchFont(const char* script, const char* map_name) { + FontFamilyMap::const_iterator it = g_font_cache.find(map_name); + if (it != g_font_cache.end()) { + ScriptFontMap::const_iterator it2 = it->second.find(script); + if (it2 != it->second.end()) + return it2->second; + } + std::string pref_name = base::StringPrintf("%s.%s", map_name, script); std::string font = GetDefaultFontForPref(pref_name.c_str()); base::string16 font16 = base::UTF8ToUTF16(font); + ScriptFontMap& map = g_font_cache[map_name]; + map[script] = font16; return font16; }