From 3f31f109b56730f71d6d61914429038501a8ed23 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 15 Sep 2021 10:12:08 +0100 Subject: [PATCH] LibWeb: Speed up computed style calculation Rather than destroying and rebuilding the entire document layout tree in every call to `ComputedCSSStyleDeclaration::property()`, we now just make sure that the layout tree exists. This speeds up the DOM Inspector significantly, from taking several seconds to select an element, to almost instant. :^) --- .../Libraries/LibWeb/CSS/ComputedCSSStyleDeclaration.cpp | 2 +- Userland/Libraries/LibWeb/DOM/Document.cpp | 6 ++++++ Userland/Libraries/LibWeb/DOM/Document.h | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/CSS/ComputedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ComputedCSSStyleDeclaration.cpp index 3995c05d50..fb3b4ceaa6 100644 --- a/Userland/Libraries/LibWeb/CSS/ComputedCSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/ComputedCSSStyleDeclaration.cpp @@ -381,7 +381,7 @@ static NonnullRefPtr value_or_default(Optional proper Optional ComputedCSSStyleDeclaration::property(PropertyID property_id) const { - const_cast(m_element->document()).force_layout(); + const_cast(m_element->document()).ensure_layout(); if (!m_element->layout_node()) { auto style = m_element->document().style_resolver().resolve_style(const_cast(*m_element)); diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 2cfa9a55c2..d9e24f07d9 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -400,6 +400,12 @@ void Document::force_layout() update_layout(); } +void Document::ensure_layout() +{ + if (!m_layout_root) + update_layout(); +} + void Document::update_layout() { if (!browsing_context()) diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index 099f199795..5ac4254e40 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -144,6 +144,7 @@ public: void force_layout(); void invalidate_layout(); + void ensure_layout(); void update_style(); void update_layout();