From 9bb5e70f5a0a7d2156536539a813a74983ac7529 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sun, 13 Jul 2025 19:32:57 +0200 Subject: [PATCH] LibWeb: Skip tree traversal if invalidation set doesn't have properties This allows us to skip unnecessary tree traversal to mark style for recalculation when invalidation set only has `InvalidateSelf`. --- Libraries/LibWeb/CSS/InvalidationSet.h | 1 + Libraries/LibWeb/DOM/Node.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Libraries/LibWeb/CSS/InvalidationSet.h b/Libraries/LibWeb/CSS/InvalidationSet.h index e008bb12b4c..b9df9f6b1aa 100644 --- a/Libraries/LibWeb/CSS/InvalidationSet.h +++ b/Libraries/LibWeb/CSS/InvalidationSet.h @@ -51,6 +51,7 @@ public: void set_needs_invalidate_pseudo_class(PseudoClass pseudo_class) { m_properties.set({ Property::Type::PseudoClass, pseudo_class }); } bool is_empty() const; + bool has_properties() const { return !m_properties.is_empty(); } void for_each_property(Function const& callback) const; private: diff --git a/Libraries/LibWeb/DOM/Node.cpp b/Libraries/LibWeb/DOM/Node.cpp index 32fbb7ab8ee..aabe2932d5d 100644 --- a/Libraries/LibWeb/DOM/Node.cpp +++ b/Libraries/LibWeb/DOM/Node.cpp @@ -516,13 +516,17 @@ void Node::invalidate_style(StyleInvalidationReason reason, Vector