Просмотр исходного кода

LibWeb: Don't regenerate linear gradient data unless size changes

This is an easy check to add and seems like it makes things a
tiny bit smoother.
MacDue 2 лет назад
Родитель
Сommit
fa5c2183df

+ 5 - 3
Userland/Libraries/LibWeb/CSS/StyleValue.cpp

@@ -1612,13 +1612,15 @@ float LinearGradientStyleValue::angle_degrees(Gfx::FloatSize const& gradient_siz
 
 void LinearGradientStyleValue::resolve_for_size(Layout::Node const& node, Gfx::FloatSize const& size) const
 {
-    m_resolved_data = Painting::resolve_linear_gradient_data(node, size, *this);
+    if (m_resolved.has_value() && m_resolved->size == size)
+        return;
+    m_resolved = ResolvedData { Painting::resolve_linear_gradient_data(node, size, *this), size };
 }
 
 void LinearGradientStyleValue::paint(PaintContext& context, Gfx::IntRect const& dest_rect, CSS::ImageRendering) const
 {
-    VERIFY(m_resolved_data.has_value());
-    Painting::paint_linear_gradient(context, dest_rect, *m_resolved_data);
+    VERIFY(m_resolved.has_value());
+    Painting::paint_linear_gradient(context, dest_rect, m_resolved->data);
 }
 
 bool InheritStyleValue::equals(StyleValue const& other) const

+ 6 - 1
Userland/Libraries/LibWeb/CSS/StyleValue.h

@@ -1023,7 +1023,12 @@ private:
     GradientType m_gradient_type;
     Repeating m_repeating;
 
-    mutable Optional<Painting::LinearGradientData> m_resolved_data;
+    struct ResolvedData {
+        Painting::LinearGradientData data;
+        Gfx::FloatSize size;
+    };
+
+    mutable Optional<ResolvedData> m_resolved;
 };
 
 class InheritStyleValue final : public StyleValue {