LibWeb: Keep StyleProperties animated properties in a HashMap

Instead of a gigantic array with space for every possible CSS property
being animated at the same time.

This shrinks StyleProperties by 3480 bytes per instance.
This commit is contained in:
Andreas Kling 2024-03-18 11:21:57 +01:00
parent dd8504c68d
commit 7be0aed4b6
Notes: sideshowbarker 2024-07-17 07:43:44 +09:00
2 changed files with 5 additions and 8 deletions

View File

@ -62,19 +62,17 @@ void StyleProperties::set_property(CSS::PropertyID id, NonnullRefPtr<StyleValue
void StyleProperties::set_animated_property(CSS::PropertyID id, NonnullRefPtr<StyleValue const> value)
{
m_animated_property_values[to_underlying(id)] = move(value);
m_animated_property_values.set(id, move(value));
}
void StyleProperties::reset_animated_properties()
{
for (auto& animated_property : m_animated_property_values)
animated_property.clear();
m_animated_property_values.clear();
}
NonnullRefPtr<StyleValue const> StyleProperties::property(CSS::PropertyID property_id) const
{
auto animated_value = m_animated_property_values[to_underlying(property_id)];
if (animated_value.has_value())
if (auto animated_value = m_animated_property_values.get(property_id).value_or(nullptr))
return *animated_value;
auto value = m_property_values[to_underlying(property_id)];
@ -85,8 +83,7 @@ NonnullRefPtr<StyleValue const> StyleProperties::property(CSS::PropertyID proper
RefPtr<StyleValue const> StyleProperties::maybe_null_property(CSS::PropertyID property_id) const
{
auto animated_value = m_animated_property_values[to_underlying(property_id)];
if (animated_value.has_value())
if (auto animated_value = m_animated_property_values.get(property_id).value_or(nullptr))
return *animated_value;
auto value = m_property_values[to_underlying(property_id)];

View File

@ -186,7 +186,7 @@ private:
friend class StyleComputer;
PropertyValues m_property_values;
Array<Optional<NonnullRefPtr<StyleValue const>>, to_underlying(CSS::last_property_id) + 1> m_animated_property_values;
HashMap<CSS::PropertyID, NonnullRefPtr<StyleValue const>> m_animated_property_values;
Optional<CSS::Overflow> overflow(CSS::PropertyID) const;
Vector<CSS::ShadowData> shadow(CSS::PropertyID, Layout::Node const&) const;