浏览代码

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.
Andreas Kling 1 年之前
父节点
当前提交
7be0aed4b6
共有 2 个文件被更改,包括 5 次插入8 次删除
  1. 4 7
      Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
  2. 1 1
      Userland/Libraries/LibWeb/CSS/StyleProperties.h

+ 4 - 7
Userland/Libraries/LibWeb/CSS/StyleProperties.cpp

@@ -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)];

+ 1 - 1
Userland/Libraries/LibWeb/CSS/StyleProperties.h

@@ -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;