mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
layout: Fix depends_on_block_constraints
logic (#38318)
The logic was wrong, sometimes we weren't setting it to true on flex containers that needed it, and then as a workaround we were setting it to to true on flex items that didn't need it. For example, this testcase had 5 cache misses when stretching the items, now we will avoid laying them out again: ```html <div style="display: flex"> <div></div> <div></div> <div></div> <div></div> <div></div> </div> ``` Also, the workaround wasn't always working, e.g. it failed to stretch the green element here: ```html <div style="display: flex; min-height: 200px"> <div> <div style="display: flex; height: 100%; background-color: red"> <div style="width: 200px; background-color: green;"></div> </div> </div> </div> ``` Testing: Adding new test Fixes: #38023 Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
a5d4c49ec6
commit
3d2f0d1be5
10 changed files with 50 additions and 36 deletions
|
@ -346,7 +346,6 @@ impl OutsideMarker {
|
|||
layout_context,
|
||||
positioning_context,
|
||||
&containing_block_for_children,
|
||||
false, /* depends_on_block_constraints */
|
||||
);
|
||||
|
||||
let max_inline_size =
|
||||
|
@ -429,7 +428,6 @@ impl BlockFormattingContext {
|
|||
layout_context: &LayoutContext,
|
||||
positioning_context: &mut PositioningContext,
|
||||
containing_block: &ContainingBlock,
|
||||
depends_on_block_constraints: bool,
|
||||
) -> CacheableLayoutResult {
|
||||
let mut sequential_layout_state = if self.contains_floats || !layout_context.use_rayon {
|
||||
Some(SequentialLayoutState::new(containing_block.size.inline))
|
||||
|
@ -470,8 +468,7 @@ impl BlockFormattingContext {
|
|||
clearance.unwrap_or_default(),
|
||||
content_inline_size_for_table: None,
|
||||
baselines: flow_layout.baselines,
|
||||
depends_on_block_constraints: depends_on_block_constraints ||
|
||||
flow_layout.depends_on_block_constraints,
|
||||
depends_on_block_constraints: flow_layout.depends_on_block_constraints,
|
||||
specific_layout_info: None,
|
||||
collapsible_margins_in_children: CollapsedBlockMargins::zero(),
|
||||
}
|
||||
|
@ -1241,7 +1238,6 @@ impl IndependentFormattingContext {
|
|||
&containing_block_for_children,
|
||||
containing_block,
|
||||
preferred_aspect_ratio,
|
||||
false, /* depends_on_block_constraints */
|
||||
&lazy_block_size,
|
||||
);
|
||||
|
||||
|
@ -1432,7 +1428,6 @@ impl IndependentFormattingContext {
|
|||
},
|
||||
containing_block,
|
||||
preferred_aspect_ratio,
|
||||
false, /* depends_on_block_constraints */
|
||||
&lazy_block_size,
|
||||
);
|
||||
|
||||
|
@ -1498,7 +1493,6 @@ impl IndependentFormattingContext {
|
|||
},
|
||||
containing_block,
|
||||
preferred_aspect_ratio,
|
||||
false, /* depends_on_block_constraints */
|
||||
&lazy_block_size,
|
||||
);
|
||||
|
||||
|
@ -2326,7 +2320,6 @@ impl IndependentFormattingContext {
|
|||
&containing_block_for_children,
|
||||
containing_block,
|
||||
preferred_aspect_ratio,
|
||||
false, /* depends_on_block_constraints */
|
||||
&lazy_block_size,
|
||||
);
|
||||
|
||||
|
|
|
@ -225,7 +225,6 @@ impl BoxTree {
|
|||
layout_context,
|
||||
&mut positioning_context,
|
||||
&(&initial_containing_block).into(),
|
||||
false, /* depends_on_block_constraints */
|
||||
);
|
||||
|
||||
let mut root_fragments = independent_layout.fragments.into_iter().collect::<Vec<_>>();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue