1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 13:37:45 +00:00

LibWeb: Limit style update tree traversal to dirty subtrees

This patch adds a second style dirty bit that tracks whether a DOM node
has one or more children with dirty style. This allows the style update
to skip over entire subtrees where all nodes are clean.
This commit is contained in:
Andreas Kling 2020-12-14 12:04:30 +01:00
parent d1479aef56
commit 6809be436b
3 changed files with 32 additions and 7 deletions

View file

@ -126,7 +126,7 @@ public:
Element* parent_element();
const Element* parent_element() const;
virtual void inserted_into(Node&) { }
virtual void inserted_into(Node&);
virtual void removed_from(Node&) { }
virtual void children_changed() { }
@ -140,6 +140,9 @@ public:
bool needs_style_update() const { return m_needs_style_update; }
void set_needs_style_update(bool);
bool child_needs_style_update() const { return m_child_needs_style_update; }
void set_child_needs_style_update(bool b) { m_child_needs_style_update = b; }
void invalidate_style();
bool is_link() const;
@ -157,7 +160,8 @@ protected:
Document* m_document { nullptr };
mutable WeakPtr<Layout::Node> m_layout_node;
NodeType m_type { NodeType::INVALID };
bool m_needs_style_update { true };
bool m_needs_style_update { false };
bool m_child_needs_style_update { false };
};
}