servo/components/layout
Martin Robinson d8294fa423
layout: Split stacking context and display list construction (#37047)
Previously, after a layout was finished (or skipped in the case of
repaint-only layout), both the stacking context tree and display list
were built. In the case of repaint-only layout, we should be able to
skip the reconstruction of the stacking context tree and only do display
list building.

This change does that, also generally cleaning and up and clarifying the
data structure used during this phase of layout. This opens up the
possibility of a new kind of incremental layout that does both repaint
and a rebuild of the stacking context tree.

On the blaster.html test case[^1], this reduces tightly-measured layout
time from ~45-50 milliseconds to ~25-30 milliseconds on my M3.

[^1]: https://gist.github.com/mrobinson/44ec87d028c0198917a7715a06dd98a0

Testing: There are currently no performance tests for layout. :( This
should
not modify the results of WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2025-05-20 13:42:39 +00:00
..
display_list layout: Split stacking context and display list construction (#37047) 2025-05-20 13:42:39 +00:00
flexbox layout: Correct damage propagation and style repair for repaint-only layout (#37004) 2025-05-19 10:17:49 +00:00
flow layout: Correct damage propagation and style repair for repaint-only layout (#37004) 2025-05-19 10:17:49 +00:00
fragment_tree layout: Split stacking context and display list construction (#37047) 2025-05-20 13:42:39 +00:00
stylesheets Fully support <input type=color> (#36992) 2025-05-15 17:30:38 +00:00
table layout: Correct damage propagation and style repair for repaint-only layout (#37004) 2025-05-19 10:17:49 +00:00
taffy layout: Correct damage propagation and style repair for repaint-only layout (#37004) 2025-05-19 10:17:49 +00:00
tests layout: Combine layout_2020 and layout_thread_2020 into a crate called layout (#36613) 2025-04-19 10:17:03 +00:00
Cargo.toml layout: Combine layout_2020 and layout_thread_2020 into a crate called layout (#36613) 2025-04-19 10:17:03 +00:00
cell.rs layout: Combine layout_2020 and layout_thread_2020 into a crate called layout (#36613) 2025-04-19 10:17:03 +00:00
construct_modern.rs layout: Share styles to inline box children via SharedInlineStyles (#36896) 2025-05-12 09:38:50 +00:00
context.rs devtools: Allow highlighting elements from the inspector (#35822) 2025-05-05 10:10:25 +00:00
dom.rs layout: Correct damage propagation and style repair for repaint-only layout (#37004) 2025-05-19 10:17:49 +00:00
dom_traversal.rs Fully support <input type=color> (#36992) 2025-05-15 17:30:38 +00:00
formatting_contexts.rs layout: Correct damage propagation and style repair for repaint-only layout (#37004) 2025-05-19 10:17:49 +00:00
geom.rs layout: Inform child layout about final block size (#36980) 2025-05-14 20:35:49 +00:00
layout_box_base.rs layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
layout_impl.rs layout: Split stacking context and display list construction (#37047) 2025-05-20 13:42:39 +00:00
lib.rs layout: Share styles to inline box children via SharedInlineStyles (#36896) 2025-05-12 09:38:50 +00:00
lists.rs layout: Use ServoLayoutNode directly instead of a generic impl (#36876) 2025-05-06 14:27:51 +00:00
positioned.rs layout: Inform child layout about final block size (#36980) 2025-05-14 20:35:49 +00:00
query.rs layout: Use ServoLayoutNode directly instead of a generic impl (#36876) 2025-05-06 14:27:51 +00:00
quotes.rs layout: Combine layout_2020 and layout_thread_2020 into a crate called layout (#36613) 2025-04-19 10:17:03 +00:00
replaced.rs layout: Use ServoLayoutNode directly instead of a generic impl (#36876) 2025-05-06 14:27:51 +00:00
sizing.rs layout: Combine layout_2020 and layout_thread_2020 into a crate called layout (#36613) 2025-04-19 10:17:03 +00:00
style_ext.rs Upgrade Stylo to 2025-05-01 (#36835) 2025-05-05 14:08:49 +00:00
traversal.rs layout: Correct damage propagation and style repair for repaint-only layout (#37004) 2025-05-19 10:17:49 +00:00