1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 18:08:12 +00:00

LibWeb: Cache width of "alt" text in ImageBox

We were constantly measuring and re-measuring the "alt" attribute text
of ImageBox layout nodes, even when the alt text didn't change. By
caching this, we avoid a *lot* of repeated text measurement work.
This commit is contained in:
Andreas Kling 2022-09-07 16:46:05 +02:00
parent 514fa83708
commit faf9746244
3 changed files with 21 additions and 1 deletions

View file

@ -59,7 +59,13 @@ void ImageBox::prepare_for_replaced_layout()
auto alt = image_element.alt();
if (alt.is_empty())
alt = image_element.src();
set_intrinsic_width(font.width(alt) + 16);
float alt_text_width = 0;
if (!m_cached_alt_text_width.has_value())
m_cached_alt_text_width = font.width(alt);
alt_text_width = m_cached_alt_text_width.value();
set_intrinsic_width(alt_text_width + 16);
set_intrinsic_height(font.pixel_size() + 16);
}
@ -68,6 +74,11 @@ void ImageBox::prepare_for_replaced_layout()
}
}
void ImageBox::dom_node_did_update_alt_text(Badge<HTML::HTMLImageElement>)
{
m_cached_alt_text_width = {};
}
bool ImageBox::renders_as_alt_text() const
{
if (is<HTML::HTMLImageElement>(dom_node()))