From b8ee4dfda8e56859c77e760863bc9f702415e12a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 14 Mar 2022 21:47:37 +0100 Subject: [PATCH] LibWeb: Don't compute style *again* for elements in Layout::TreeBuilder TreeBuilder wasn't taking advantage of the fact that we already have computed style cached on each DOM::Element by the time we're constructing a layout tree. So instead of using the cached style, we recomputed it from scratch for every element. This was done because invalidation was broken in many places, but now that it's more or less trustworthy, stop recomputing style on the fly in TreeBuilder and use what the preceding style update pass gave us instead. This basically cuts style computation work in half. :^) --- Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp b/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp index 7f4d978fa9..7ab1be5f19 100644 --- a/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp +++ b/Userland/Libraries/LibWeb/Layout/TreeBuilder.cpp @@ -101,10 +101,10 @@ void TreeBuilder::create_layout_tree(DOM::Node& dom_node, TreeBuilder::Context& if (is(dom_node)) { auto& element = static_cast(dom_node); element.clear_pseudo_element_nodes({}); - style = style_computer.compute_style(element); + VERIFY(!element.needs_style_update()); + style = element.computed_css_values(); if (style->display().is_none()) return; - element.set_computed_css_values(style); layout_node = element.create_layout_node(*style); } else if (is(dom_node)) { style = style_computer.create_document_style();