mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:57:44 +00:00
LibWeb: Make LayoutState use HashMap instead of potentially huge Vector
Before this change, LayoutState essentially had a Vector<UsedValues*> resized to the exact number of layout nodes in the current document. When a nested layout is performed (to calculate the intrinsic size of something), we make a new LayoutState with its own Vector. If an entry is missing in a nested LayoutState, we check the parent chain all the way up to the root. Because each nested LayoutState had to allocate a new Vector with space for all layout nodes, this could get really nasty on very large pages (such as the ECMA262 specification). This patch replaces the Vector with a HashMap. There's now a small cost to lookups, but what we get in return is the ability to handle huge layout trees without spending eternity in page faults.
This commit is contained in:
parent
e83681ee34
commit
e2c72922f6
6 changed files with 35 additions and 42 deletions
|
@ -42,8 +42,6 @@ class Node
|
|||
public:
|
||||
virtual ~Node();
|
||||
|
||||
size_t serial_id() const { return m_serial_id; }
|
||||
|
||||
bool is_anonymous() const;
|
||||
DOM::Node const* dom_node() const;
|
||||
DOM::Node* dom_node();
|
||||
|
@ -165,8 +163,6 @@ private:
|
|||
|
||||
JS::NonnullGCPtr<HTML::BrowsingContext> m_browsing_context;
|
||||
|
||||
size_t m_serial_id { 0 };
|
||||
|
||||
bool m_anonymous { false };
|
||||
bool m_has_style { false };
|
||||
bool m_visible { true };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue