mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:18:11 +00:00
LibWeb: Cache scaled web fonts instead of recreating them every time
Previously, we would create a new Gfx::ScaledFont whenever we needed one for an element's computed style. This worked fine on Acid3 since the use of web fonts was extremely limited. In the wild, web fonts obviously get used a lot more, so let's have a per-point-size font cache for them.
This commit is contained in:
parent
ae6b09f4dc
commit
751b605690
1 changed files with 15 additions and 1 deletions
|
@ -68,7 +68,19 @@ public:
|
|||
{
|
||||
if (!m_vector_font)
|
||||
return nullptr;
|
||||
return adopt_ref(*new Gfx::ScaledFont(*m_vector_font, point_size, point_size));
|
||||
|
||||
if (auto it = m_cached_fonts.find(point_size); it != m_cached_fonts.end())
|
||||
return it->value;
|
||||
|
||||
// FIXME: It might be nicer to have a global cap on the number of fonts we cache
|
||||
// instead of doing it at the per-font level like this.
|
||||
constexpr size_t max_cached_font_size_count = 64;
|
||||
if (m_cached_fonts.size() > max_cached_font_size_count)
|
||||
m_cached_fonts.remove(m_cached_fonts.begin());
|
||||
|
||||
auto font = adopt_ref(*new Gfx::ScaledFont(*m_vector_font, point_size, point_size));
|
||||
m_cached_fonts.set(point_size, font);
|
||||
return font;
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -92,6 +104,8 @@ private:
|
|||
StyleComputer& m_style_computer;
|
||||
FlyString m_family_name;
|
||||
RefPtr<Gfx::VectorFont> m_vector_font;
|
||||
|
||||
HashMap<float, NonnullRefPtr<Gfx::ScaledFont>> mutable m_cached_fonts;
|
||||
};
|
||||
|
||||
static StyleSheet& default_stylesheet()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue