servo/components/layout
Martin Robinson 8808f9a468
layout: Add a repaint-only incremental layout mode (#36978)
This change adds the simplest kind of incremental layout. When Servo
detects that all style changes only require a repaint, only run stacking
context tree and WebRender display list generation. This means that
these kind of restyles do not need a re-layout. Instead, the existing
box and fragment trees will be used and the styles of damaged nodes will
be updated in their box and fragment tree nodes.

This requires a new style repair DOM traversal for nodes that have had
their style damaged. In addition, careful accounting of all the places
where we store style must happen in order ot update those styles.

Testing: This is covered by existing WPT tests as it should not change
observable behavior.

We have created a test case which shows a 50% speedup when run
in Servo, even though there still a long way to go to match the speed
of other browsers:
https://gist.github.com/mrobinson/44ec87d028c0198917a7715a06dd98a0

Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2025-05-12 17:03:50 +00:00
..
display_list layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
flexbox layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
flow layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
fragment_tree layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
stylesheets Embed user agent stylesheets and media control resouces in libservo (#36803) 2025-05-04 18:48:09 +00:00
table layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
taffy layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +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: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
dom_traversal.rs layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
formatting_contexts.rs layout: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00
geom.rs Upgrade Stylo to 2025-05-01 (#36835) 2025-05-05 14:08: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: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +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: Split AbsoluteAxisSolver::solve() into different methods (#36970) 2025-05-12 16:30:53 +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: Add a repaint-only incremental layout mode (#36978) 2025-05-12 17:03:50 +00:00