Explorar o código

LibWeb: Don't call establishes_stacking_context() during painting

By the time we're painting, we've already built the stacking context
tree. So instead of asking if a box establishes a stacking context, we
can ask if its paintable *has* a stacking context.

This was taking up ~6% of the profile when mousing around on the HTML
specification. With this change, it disappears completely. :^)
Andreas Kling %!s(int64=3) %!d(string=hai) anos
pai
achega
ccc37032a4
Modificáronse 1 ficheiros con 2 adicións e 1 borrados
  1. 2 1
      Userland/Libraries/LibWeb/Painting/StackingContext.cpp

+ 2 - 1
Userland/Libraries/LibWeb/Painting/StackingContext.cpp

@@ -52,7 +52,8 @@ void StackingContext::paint_descendants(PaintContext& context, Layout::Node& box
     }
 
     box.for_each_child([&](auto& child) {
-        if (child.establishes_stacking_context())
+        // If `child` establishes its own stacking context, skip over it.
+        if (is<Layout::Box>(child) && child.paintable() && static_cast<Layout::Box const&>(child).paint_box()->stacking_context())
             return;
         bool child_is_inline_or_replaced = child.is_inline() || is<Layout::ReplacedBox>(child);
         switch (phase) {