aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-11-27 06:02:23 -0500
committerGitHub <noreply@github.com>2019-11-27 06:02:23 -0500
commit83bb96740dfff3bbb89bb7ba3160d37de039e0a1 (patch)
tree888f4213e8a78bc38cc8c7337c842c9d4dd99cd4
parent81c59077fded1a9402b25cff7006794057b92404 (diff)
parent9a4bc23ff0ca2b3bc6781e2d294caf1f492d6da1 (diff)
downloadservo-83bb96740dfff3bbb89bb7ba3160d37de039e0a1.tar.gz
servo-83bb96740dfff3bbb89bb7ba3160d37de039e0a1.zip
Auto merge of #24871 - servo:2020-ci, r=nox,SimonSapin
Run WPT with Layout 2020 on CI … and gate PRs on the result.
-rw-r--r--components/layout_2020/dom_traversal.rs24
-rw-r--r--components/layout_2020/flow/construct.rs27
-rw-r--r--components/layout_2020/flow/float.rs3
-rw-r--r--components/layout_2020/flow/inline.rs16
-rw-r--r--components/layout_2020/flow/mod.rs82
-rw-r--r--components/layout_2020/flow/root.rs31
-rw-r--r--components/layout_2020/formatting_contexts.rs114
-rw-r--r--components/layout_2020/lib.rs100
-rw-r--r--components/layout_2020/positioned.rs16
-rw-r--r--components/layout_thread_2020/lib.rs2
-rw-r--r--components/style/properties/properties.mako.rs4
-rw-r--r--components/style/rule_cache.rs4
-rw-r--r--etc/taskcluster/decision_task.py99
-rw-r--r--python/servo/command_base.py3
-rw-r--r--servobuild.example3
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/anonymous-boxes-inheritance-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-002.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-007.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-002.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-002.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-008.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-010.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-019.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-020.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-021.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-022.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-029.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-006.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-007.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-008.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-009.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-010.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-011.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-012.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-013.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-014.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-015.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-change-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/box-display/root-box-002.xht.ini2
45 files changed, 363 insertions, 225 deletions
diff --git a/components/layout_2020/dom_traversal.rs b/components/layout_2020/dom_traversal.rs
index ce57f4c8100..732dc1afdc9 100644
--- a/components/layout_2020/dom_traversal.rs
+++ b/components/layout_2020/dom_traversal.rs
@@ -8,7 +8,7 @@ use crate::style_ext::{Display, DisplayGeneratingBox, DisplayInside, DisplayOuts
use crate::wrapper::GetRawData;
use atomic_refcell::{AtomicRefCell, AtomicRefMut};
use script_layout_interface::wrapper_traits::{LayoutNode, ThreadSafeLayoutNode};
-use servo_arc::Arc;
+use servo_arc::Arc as ServoArc;
use std::convert::TryInto;
use std::marker::PhantomData as marker;
use style::context::SharedStyleContext;
@@ -30,7 +30,7 @@ pub(super) enum Contents<Node> {
/// <https://drafts.csswg.org/css2/conform.html#replaced-element>
Replaced(ReplacedContent),
- /// Content of a `::before` or `::after` pseudo-element this is being generated.
+ /// Content of a `::before` or `::after` pseudo-element that is being generated.
/// <https://drafts.csswg.org/css2/generate.html#content>
OfPseudoElement(Vec<PseudoElementContentItem>),
}
@@ -49,12 +49,12 @@ pub(super) trait TraversalHandler<'dom, Node>
where
Node: 'dom,
{
- fn handle_text(&mut self, text: String, parent_style: &Arc<ComputedValues>);
+ fn handle_text(&mut self, text: String, parent_style: &ServoArc<ComputedValues>);
/// Or pseudo-element
fn handle_element(
&mut self,
- style: &Arc<ComputedValues>,
+ style: &ServoArc<ComputedValues>,
display: DisplayGeneratingBox,
contents: Contents<Node>,
box_slot: BoxSlot<'dom>,
@@ -144,7 +144,7 @@ fn traverse_pseudo_element<'dom, Node>(
}
fn traverse_pseudo_element_contents<'dom, Node>(
- pseudo_element_style: &Arc<ComputedValues>,
+ pseudo_element_style: &ServoArc<ComputedValues>,
context: &SharedStyleContext,
handler: &mut impl TraversalHandler<'dom, Node>,
items: Vec<PseudoElementContentItem>,
@@ -213,7 +213,7 @@ where
{
pub(crate) fn traverse(
self,
- inherited_style: &Arc<ComputedValues>,
+ inherited_style: &ServoArc<ComputedValues>,
context: &SharedStyleContext,
handler: &mut impl TraversalHandler<'dom, Node>,
) {
@@ -230,7 +230,7 @@ fn pseudo_element_style<'dom, Node>(
_which: WhichPseudoElement,
_element: Node,
_context: &SharedStyleContext,
-) -> Option<Arc<ComputedValues>>
+) -> Option<ServoArc<ComputedValues>>
where
Node: NodeExt<'dom>,
{
@@ -253,12 +253,12 @@ where
}
pub struct BoxSlot<'dom> {
- slot: Option<Arc<AtomicRefCell<Option<LayoutBox>>>>,
+ slot: Option<ServoArc<AtomicRefCell<Option<LayoutBox>>>>,
marker: marker<&'dom ()>,
}
impl BoxSlot<'_> {
- pub(crate) fn new(slot: Arc<AtomicRefCell<Option<LayoutBox>>>) -> Self {
+ pub(crate) fn new(slot: ServoArc<AtomicRefCell<Option<LayoutBox>>>) -> Self {
*slot.borrow_mut() = None;
let slot = Some(slot);
Self { slot, marker }
@@ -284,13 +284,13 @@ impl Drop for BoxSlot<'_> {
}
}
-pub trait NodeExt<'dom>: 'dom + Copy + LayoutNode + Send + Sync {
+pub(crate) trait NodeExt<'dom>: 'dom + Copy + LayoutNode + Send + Sync {
fn is_element(self) -> bool;
fn as_text(self) -> Option<String>;
fn first_child(self) -> Option<Self>;
fn next_sibling(self) -> Option<Self>;
fn parent_node(self) -> Option<Self>;
- fn style(self, context: &SharedStyleContext) -> Arc<ComputedValues>;
+ fn style(self, context: &SharedStyleContext) -> ServoArc<ComputedValues>;
fn layout_data_mut(&self) -> AtomicRefMut<LayoutDataForElement>;
fn element_box_slot(&self) -> BoxSlot<'dom>;
@@ -327,7 +327,7 @@ where
TNode::parent_node(&self)
}
- fn style(self, context: &SharedStyleContext) -> Arc<ComputedValues> {
+ fn style(self, context: &SharedStyleContext) -> ServoArc<ComputedValues> {
self.to_threadsafe().style(context)
}
diff --git a/components/layout_2020/flow/construct.rs b/components/layout_2020/flow/construct.rs
index f3afabf15fc..57d7bf9dd31 100644
--- a/components/layout_2020/flow/construct.rs
+++ b/components/layout_2020/flow/construct.rs
@@ -7,9 +7,9 @@ use crate::element_data::LayoutBox;
use crate::flow::float::FloatBox;
use crate::flow::inline::{InlineBox, InlineFormattingContext, InlineLevelBox, TextRun};
use crate::flow::{BlockContainer, BlockFormattingContext, BlockLevelBox};
+use crate::formatting_contexts::IndependentFormattingContext;
use crate::positioned::AbsolutelyPositionedBox;
use crate::style_ext::{DisplayGeneratingBox, DisplayInside, DisplayOutside};
-use crate::{take, IndependentFormattingContext};
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use rayon_croissant::ParallelIteratorExt;
use servo_arc::Arc;
@@ -380,7 +380,7 @@ where
// The fragmented boxes before the block level element
// are obviously not the last fragment.
last_fragment: false,
- children: take(&mut ongoing.children),
+ children: std::mem::take(&mut ongoing.children),
};
ongoing.first_fragment = false;
fragmented
@@ -450,11 +450,10 @@ where
AbsolutelyPositionedBox {
contents: IndependentFormattingContext::construct(
unimplemented!(),
- &style,
+ style,
display_inside,
contents,
),
- style,
},
));
self.current_inline_level_boxes().push(box_.clone());
@@ -482,11 +481,10 @@ where
let box_ = Arc::new(InlineLevelBox::OutOfFlowFloatBox(FloatBox {
contents: IndependentFormattingContext::construct(
self.context,
- &style,
+ style,
display_inside,
contents,
),
- style,
}));
self.current_inline_level_boxes().push(box_.clone());
box_slot.set(LayoutBox::InlineLevel(box_))
@@ -517,7 +515,7 @@ where
let box_ = IntermediateBlockLevelBox::SameFormattingContextBlock {
style: anonymous_style.clone(),
- contents: IntermediateBlockContainer::InlineFormattingContext(take(
+ contents: IntermediateBlockContainer::InlineFormattingContext(std::mem::take(
&mut self.ongoing_inline_formatting_context,
)),
};
@@ -562,12 +560,12 @@ where
} => {
let contents = IndependentFormattingContext::construct(
context,
- &style,
+ style,
display_inside,
contents,
);
(
- Arc::new(BlockLevelBox::Independent { style, contents }),
+ Arc::new(BlockLevelBox::Independent(contents)),
ContainsFloats::No,
)
},
@@ -580,11 +578,10 @@ where
AbsolutelyPositionedBox {
contents: IndependentFormattingContext::construct(
context,
- &style,
+ style,
display_inside,
contents,
),
- style: style,
},
));
(block_level_box, ContainsFloats::No)
@@ -596,14 +593,12 @@ where
} => {
let contents = IndependentFormattingContext::construct(
context,
- &style,
+ style,
display_inside,
contents,
);
- let block_level_box = Arc::new(BlockLevelBox::OutOfFlowFloatBox(FloatBox {
- contents,
- style,
- }));
+ let block_level_box =
+ Arc::new(BlockLevelBox::OutOfFlowFloatBox(FloatBox { contents }));
(block_level_box, ContainsFloats::Yes)
},
}
diff --git a/components/layout_2020/flow/float.rs b/components/layout_2020/flow/float.rs
index 31fec0b79c0..4698e9d2f1c 100644
--- a/components/layout_2020/flow/float.rs
+++ b/components/layout_2020/flow/float.rs
@@ -2,13 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use crate::IndependentFormattingContext;
+use crate::formatting_contexts::IndependentFormattingContext;
use servo_arc::Arc;
use style::properties::ComputedValues;
#[derive(Debug)]
pub(crate) struct FloatBox {
- pub style: Arc<ComputedValues>,
pub contents: IndependentFormattingContext,
}
diff --git a/components/layout_2020/flow/inline.rs b/components/layout_2020/flow/inline.rs
index e410fa269ec..5a48ac9a2ee 100644
--- a/components/layout_2020/flow/inline.rs
+++ b/components/layout_2020/flow/inline.rs
@@ -4,7 +4,7 @@
use crate::context::LayoutContext;
use crate::flow::float::FloatBox;
-use crate::flow::FlowChildren;
+use crate::flow::FlowLayout;
use crate::fragments::{
AnonymousFragment, BoxFragment, CollapsedBlockMargins, Fragment, TextFragment,
};
@@ -12,7 +12,7 @@ use crate::geom::flow_relative::{Rect, Sides, Vec2};
use crate::positioned::{AbsolutelyPositionedBox, AbsolutelyPositionedFragment};
use crate::replaced::ReplacedContent;
use crate::style_ext::{ComputedValuesExt, Display, DisplayGeneratingBox, DisplayOutside};
-use crate::{relative_adjustement, take, ContainingBlock};
+use crate::{relative_adjustement, ContainingBlock};
use servo_arc::Arc;
use style::properties::ComputedValues;
use style::values::computed::Length;
@@ -88,7 +88,7 @@ impl InlineFormattingContext {
containing_block: &ContainingBlock,
tree_rank: usize,
absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
- ) -> FlowChildren {
+ ) -> FlowLayout {
let mut ifc = InlineFormattingContextState {
containing_block,
partial_inline_boxes_stack: Vec::new(),
@@ -118,7 +118,7 @@ impl InlineFormattingContext {
},
InlineLevelBox::OutOfFlowAbsolutelyPositionedBox(box_) => {
let initial_start_corner =
- match Display::from(box_.style.get_box().original_display) {
+ match Display::from(box_.contents.style.get_box().original_display) {
Display::GeneratingBox(DisplayGeneratingBox::OutsideInside {
outside,
inside: _,
@@ -156,9 +156,9 @@ impl InlineFormattingContext {
} else {
ifc.line_boxes
.finish_line(&mut ifc.current_nesting_level, containing_block);
- return FlowChildren {
+ return FlowLayout {
fragments: ifc.line_boxes.boxes,
- block_size: ifc.line_boxes.next_line_block_position,
+ content_block_size: ifc.line_boxes.next_line_block_position,
collapsible_margins_in_children: CollapsedBlockMargins::zero(),
};
}
@@ -185,7 +185,7 @@ impl LinesBoxes {
};
self.next_line_block_position += size.block;
self.boxes.push(Fragment::Anonymous(AnonymousFragment {
- children: take(&mut top_nesting_level.fragments_so_far),
+ children: std::mem::take(&mut top_nesting_level.fragments_so_far),
rect: Rect { start_corner, size },
mode: containing_block.mode,
}))
@@ -250,7 +250,7 @@ impl<'box_tree> PartialInlineBoxFragment<'box_tree> {
) {
let mut fragment = BoxFragment {
style: self.style.clone(),
- children: take(&mut nesting_level.fragments_so_far),
+ children: std::mem::take(&mut nesting_level.fragments_so_far),
content_rect: Rect {
size: Vec2 {
inline: *inline_position - self.start_corner.inline,
diff --git a/components/layout_2020/flow/mod.rs b/components/layout_2020/flow/mod.rs
index b690e447cd7..9281c135760 100644
--- a/components/layout_2020/flow/mod.rs
+++ b/components/layout_2020/flow/mod.rs
@@ -7,15 +7,16 @@
use crate::context::LayoutContext;
use crate::flow::float::{FloatBox, FloatContext};
use crate::flow::inline::InlineFormattingContext;
+use crate::formatting_contexts::{IndependentFormattingContext, IndependentLayout};
use crate::fragments::{
AnonymousFragment, BoxFragment, CollapsedBlockMargins, CollapsedMargin, Fragment,
};
-use crate::geom::flow_relative::{Rect, Vec2};
+use crate::geom::flow_relative::{Rect, Sides, Vec2};
use crate::positioned::{
adjust_static_positions, AbsolutelyPositionedBox, AbsolutelyPositionedFragment,
};
use crate::style_ext::{ComputedValuesExt, Position};
-use crate::{relative_adjustement, ContainingBlock, IndependentFormattingContext};
+use crate::{relative_adjustement, ContainingBlock};
use rayon::iter::{IndexedParallelIterator, IntoParallelRefIterator, ParallelIterator};
use rayon_croissant::ParallelIteratorExt;
use servo_arc::Arc;
@@ -50,15 +51,12 @@ pub(crate) enum BlockLevelBox {
},
OutOfFlowAbsolutelyPositionedBox(AbsolutelyPositionedBox),
OutOfFlowFloatBox(FloatBox),
- Independent {
- style: Arc<ComputedValues>,
- contents: IndependentFormattingContext,
- },
+ Independent(IndependentFormattingContext),
}
-pub(super) struct FlowChildren {
+struct FlowLayout {
pub fragments: Vec<Fragment>,
- pub block_size: Length,
+ pub content_block_size: Length,
pub collapsible_margins_in_children: CollapsedBlockMargins,
}
@@ -72,7 +70,7 @@ impl BlockFormattingContext {
containing_block: &ContainingBlock,
tree_rank: usize,
absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
- ) -> FlowChildren {
+ ) -> IndependentLayout {
let mut float_context;
let float_context = if self.contains_floats {
float_context = FloatContext::new();
@@ -80,7 +78,7 @@ impl BlockFormattingContext {
} else {
None
};
- let mut flow_children = self.contents.layout(
+ let flow_layout = self.contents.layout(
layout_context,
containing_block,
tree_rank,
@@ -88,12 +86,16 @@ impl BlockFormattingContext {
float_context,
CollapsibleWithParentStartMargin(false),
);
- flow_children.block_size += flow_children.collapsible_margins_in_children.end.solve();
- flow_children
- .collapsible_margins_in_children
- .collapsed_through = false;
- flow_children.collapsible_margins_in_children.end = CollapsedMargin::zero();
- flow_children
+ assert!(
+ !flow_layout
+ .collapsible_margins_in_children
+ .collapsed_through
+ );
+ IndependentLayout {
+ fragments: flow_layout.fragments,
+ content_block_size: flow_layout.content_block_size +
+ flow_layout.collapsible_margins_in_children.end.solve(),
+ }
}
}
@@ -106,7 +108,7 @@ impl BlockContainer {
absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
float_context: Option<&mut FloatContext>,
collapsible_with_parent_start_margin: CollapsibleWithParentStartMargin,
- ) -> FlowChildren {
+ ) -> FlowLayout {
match self {
BlockContainer::BlockLevelBoxes(child_boxes) => layout_block_level_children(
layout_context,
@@ -135,7 +137,7 @@ fn layout_block_level_children<'a>(
absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
float_context: Option<&mut FloatContext>,
collapsible_with_parent_start_margin: CollapsibleWithParentStartMargin,
-) -> FlowChildren {
+) -> FlowLayout {
fn place_block_level_fragment(fragment: &mut Fragment, placement_state: &mut PlacementState) {
match fragment {
Fragment::Box(fragment) => {
@@ -251,9 +253,9 @@ fn layout_block_level_children<'a>(
tree_rank,
);
- FlowChildren {
+ FlowLayout {
fragments,
- block_size: placement_state.current_block_direction_position,
+ content_block_size: placement_state.current_block_direction_position,
collapsible_margins_in_children: CollapsedBlockMargins {
collapsed_through: placement_state
.next_in_flow_margin_collapses_with_parent_start_margin,
@@ -292,19 +294,29 @@ impl BlockLevelBox {
},
))
},
- BlockLevelBox::Independent { style, contents } => match contents.as_replaced() {
+ BlockLevelBox::Independent(contents) => match contents.as_replaced() {
Ok(replaced) => {
// FIXME
match *replaced {}
},
- Err(contents) => Fragment::Box(layout_in_flow_non_replaced_block_level(
+ Err(non_replaced) => Fragment::Box(layout_in_flow_non_replaced_block_level(
layout_context,
containing_block,
absolutely_positioned_fragments,
- style,
+ &contents.style,
BlockLevelKind::EstablishesAnIndependentFormattingContext,
|containing_block, nested_abspos, _| {
- contents.layout(layout_context, containing_block, tree_rank, nested_abspos)
+ let independent_layout = non_replaced.layout(
+ layout_context,
+ containing_block,
+ tree_rank,
+ nested_abspos,
+ );
+ FlowLayout {
+ fragments: independent_layout.fragments,
+ content_block_size: independent_layout.content_block_size,
+ collapsible_margins_in_children: CollapsedBlockMargins::zero(),
+ }
},
)),
},
@@ -338,7 +350,7 @@ fn layout_in_flow_non_replaced_block_level<'a>(
&ContainingBlock,
&mut Vec<AbsolutelyPositionedFragment<'a>>,
CollapsibleWithParentStartMargin,
- ) -> FlowChildren,
+ ) -> FlowLayout,
) -> BoxFragment {
let cbis = containing_block.inline_size;
let padding = style.padding().percentages_relative_to(cbis);
@@ -397,7 +409,7 @@ fn layout_in_flow_non_replaced_block_level<'a>(
LengthOrAuto::Auto,
);
let mut nested_abspos = vec![];
- let mut flow_children = layout_contents(
+ let mut flow_layout = layout_contents(
&containing_block_for_children,
if style.get_box().position == Position::Relative {
&mut nested_abspos
@@ -409,15 +421,15 @@ fn layout_in_flow_non_replaced_block_level<'a>(
if this_start_margin_can_collapse_with_children.0 {
block_margins_collapsed_with_children
.start
- .adjoin_assign(&flow_children.collapsible_margins_in_children.start);
- if flow_children
+ .adjoin_assign(&flow_layout.collapsible_margins_in_children.start);
+ if flow_layout
.collapsible_margins_in_children
.collapsed_through
{
block_margins_collapsed_with_children
.start
.adjoin_assign(&std::mem::replace(
- &mut flow_children.collapsible_margins_in_children.end,
+ &mut flow_layout.collapsible_margins_in_children.end,
CollapsedMargin::zero(),
));
}
@@ -425,18 +437,18 @@ fn layout_in_flow_non_replaced_block_level<'a>(
if this_end_margin_can_collapse_with_children {
block_margins_collapsed_with_children
.end
- .adjoin_assign(&flow_children.collapsible_margins_in_children.end);
+ .adjoin_assign(&flow_layout.collapsible_margins_in_children.end);
} else {
- flow_children.block_size += flow_children.collapsible_margins_in_children.end.solve();
+ flow_layout.content_block_size += flow_layout.collapsible_margins_in_children.end.solve();
}
block_margins_collapsed_with_children.collapsed_through =
this_start_margin_can_collapse_with_children.0 &&
this_end_margin_can_collapse_with_children &&
- flow_children
+ flow_layout
.collapsible_margins_in_children
.collapsed_through;
let relative_adjustement = relative_adjustement(style, inline_size, block_size);
- let block_size = block_size.auto_is(|| flow_children.block_size);
+ let block_size = block_size.auto_is(|| flow_layout.content_block_size);
let content_rect = Rect {
start_corner: Vec2 {
block: pb.block_start + relative_adjustement.block,
@@ -451,7 +463,7 @@ fn layout_in_flow_non_replaced_block_level<'a>(
AbsolutelyPositionedFragment::in_positioned_containing_block(
layout_context,
&nested_abspos,
- &mut flow_children.fragments,
+ &mut flow_layout.fragments,
&content_rect.size,
&padding,
containing_block_for_children.mode,
@@ -459,7 +471,7 @@ fn layout_in_flow_non_replaced_block_level<'a>(
}
BoxFragment {
style: style.clone(),
- children: flow_children.fragments,
+ children: flow_layout.fragments,
content_rect,
padding,
border,
diff --git a/components/layout_2020/flow/root.rs b/components/layout_2020/flow/root.rs
index a1831c6433a..8df332b90d6 100644
--- a/components/layout_2020/flow/root.rs
+++ b/components/layout_2020/flow/root.rs
@@ -8,6 +8,7 @@ use crate::dom_traversal::{Contents, NodeExt};
use crate::flow::construct::ContainsFloats;
use crate::flow::float::FloatBox;
use crate::flow::{BlockContainer, BlockFormattingContext, BlockLevelBox};
+use crate::formatting_contexts::IndependentFormattingContext;
use crate::fragments::Fragment;
use crate::geom;
use crate::geom::flow_relative::Vec2;
@@ -16,8 +17,9 @@ use crate::replaced::ReplacedContent;
use crate::style_ext::{
Direction, Display, DisplayGeneratingBox, DisplayInside, DisplayOutside, WritingMode,
};
-use crate::{ContainingBlock, DefiniteContainingBlock, IndependentFormattingContext};
+use crate::{ContainingBlock, DefiniteContainingBlock};
use rayon::iter::{IntoParallelRefIterator, ParallelExtend, ParallelIterator};
+use script_layout_interface::wrapper_traits::LayoutNode;
use servo_arc::Arc;
use style::context::SharedStyleContext;
use style::properties::ComputedValues;
@@ -29,10 +31,10 @@ pub struct BoxTreeRoot(BlockFormattingContext);
pub struct FragmentTreeRoot(Vec<Fragment>);
impl BoxTreeRoot {
- pub fn construct<'dom>(
- context: &SharedStyleContext<'_>,
- root_element: impl NodeExt<'dom>,
- ) -> Self {
+ pub fn construct<'dom, Node>(context: &SharedStyleContext<'_>, root_element: Node) -> Self
+ where
+ Node: 'dom + Copy + LayoutNode + Send + Sync,
+ {
let (contains_floats, boxes) = construct_for_root_element(&context, root_element);
Self(BlockFormattingContext {
contains_floats: contains_floats == ContainsFloats::Yes,
@@ -69,31 +71,32 @@ fn construct_for_root_element<'dom>(
}
}
+ let position = box_style.position;
+ let float = box_style.float;
let contents = IndependentFormattingContext::construct(
context,
- &style,
+ style,
display_inside,
Contents::OfElement(root_element),
);
- if box_style.position.is_absolutely_positioned() {
+ if position.is_absolutely_positioned() {
(
ContainsFloats::No,
vec![Arc::new(BlockLevelBox::OutOfFlowAbsolutelyPositionedBox(
- AbsolutelyPositionedBox { style, contents },
+ AbsolutelyPositionedBox { contents },
))],
)
- } else if box_style.float.is_floating() {
+ } else if float.is_floating() {
(
ContainsFloats::Yes,
vec![Arc::new(BlockLevelBox::OutOfFlowFloatBox(FloatBox {
contents,
- style,
}))],
)
} else {
(
ContainsFloats::No,
- vec![Arc::new(BlockLevelBox::Independent { style, contents })],
+ vec![Arc::new(BlockLevelBox::Independent(contents))],
)
}
}
@@ -118,7 +121,7 @@ impl BoxTreeRoot {
};
let dummy_tree_rank = 0;
let mut absolutely_positioned_fragments = vec![];
- let mut flow_children = self.0.layout(
+ let mut independent_layout = self.0.layout(
layout_context,
&initial_containing_block,
dummy_tree_rank,
@@ -129,12 +132,12 @@ impl BoxTreeRoot {
size: initial_containing_block_size,
mode: initial_containing_block.mode,
};
- flow_children.fragments.par_extend(
+ independent_layout.fragments.par_extend(
absolutely_positioned_fragments
.par_iter()
.map(|a| a.layout(layout_context, &initial_containing_block)),
);
- FragmentTreeRoot(flow_children.fragments)
+ FragmentTreeRoot(independent_layout.fragments)
}
}
diff --git a/components/layout_2020/formatting_contexts.rs b/components/layout_2020/formatting_contexts.rs
new file mode 100644
index 00000000000..96294947720
--- /dev/null
+++ b/components/layout_2020/formatting_contexts.rs
@@ -0,0 +1,114 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use crate::context::LayoutContext;
+use crate::dom_traversal::{Contents, NodeExt};
+use crate::flow::BlockFormattingContext;
+use crate::fragments::Fragment;
+use crate::geom::flow_relative::Vec2;
+use crate::positioned::AbsolutelyPositionedFragment;
+use crate::replaced::ReplacedContent;
+use crate::style_ext::{ComputedValuesExt, Direction, DisplayInside, Position, WritingMode};
+use crate::ContainingBlock;
+use servo_arc::Arc;
+use std::convert::TryInto;
+use style::context::SharedStyleContext;
+use style::properties::ComputedValues;
+use style::values::computed::Length;
+
+/// https://drafts.csswg.org/css-display/#independent-formatting-context
+#[derive(Debug)]
+pub(crate) struct IndependentFormattingContext {
+ pub style: Arc<ComputedValues>,
+ contents: IndependentFormattingContextContents,
+}
+
+pub(crate) struct IndependentLayout {
+ pub fragments: Vec<Fragment>,
+ pub content_block_size: Length,
+}
+
+// Private so that code outside of this module cannot match variants.
+// It should got through methods instead.
+#[derive(Debug)]
+enum IndependentFormattingContextContents {
+ Flow(BlockFormattingContext),
+
+ // Not called FC in specs, but behaves close enough
+ Replaced(ReplacedContent),
+ // Other layout modes go here
+}
+
+pub(crate) struct NonReplacedIFC<'a>(NonReplacedIFCKind<'a>);
+
+enum NonReplacedIFCKind<'a> {
+ Flow(&'a BlockFormattingContext),
+}
+
+impl IndependentFormattingContext {
+ pub fn construct<'dom, 'style>(
+ context: &SharedStyleContext<'style>,
+ style: Arc<ComputedValues>,
+ display_inside: DisplayInside,
+ contents: Contents<impl NodeExt<'dom>>,
+ ) -> Self {
+ use self::IndependentFormattingContextContents as Contents;
+ let contents = match contents.try_into() {
+ Ok(non_replaced) => match display_inside {
+ DisplayInside::Flow | DisplayInside::FlowRoot => Contents::Flow(
+ BlockFormattingContext::construct(context, &style, non_replaced),
+ ),
+ },
+ Err(replaced) => Contents::Replaced(replaced),
+ };
+ Self { style, contents }
+ }
+
+ pub fn as_replaced(&self) -> Result<&ReplacedContent, NonReplacedIFC> {
+ use self::IndependentFormattingContextContents as Contents;
+ use self::NonReplacedIFC as NR;
+ use self::NonReplacedIFCKind as Kind;
+ match &self.contents {
+ Contents::Replaced(r) => Ok(r),
+ Contents::Flow(f) => Err(NR(Kind::Flow(f))),
+ }
+ }
+
+ pub fn layout<'a>(
+ &'a self,
+ layout_context: &LayoutContext,
+ containing_block: &ContainingBlock,
+ tree_rank: usize,
+ absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
+ ) -> IndependentLayout {
+ match self.as_replaced() {
+ Ok(replaced) => match *replaced {},
+ Err(ifc) => ifc.layout(
+ layout_context,
+ containing_block,
+ tree_rank,
+ absolutely_positioned_fragments,
+ ),
+ }
+ }
+}
+
+impl<'a> NonReplacedIFC<'a> {
+ pub fn layout(
+ &self,
+ layout_context: &LayoutContext,
+ containing_block: &ContainingBlock,
+ tree_rank: usize,
+ absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
+ ) -> IndependentLayout {
+ match &self.0 {
+ NonReplacedIFCKind::Flow(bfc) => bfc.layout(
+ layout_context,
+ containing_block,
+ tree_rank,
+ absolutely_positioned_fragments,
+ ),
+ }
+ }
+}
diff --git a/components/layout_2020/lib.rs b/components/layout_2020/lib.rs
index c0892553f35..07956417087 100644
--- a/components/layout_2020/lib.rs
+++ b/components/layout_2020/lib.rs
@@ -12,16 +12,13 @@
#[macro_use]
extern crate serde;
-use style::properties::ComputedValues;
-use style::values::computed::{Length, LengthOrAuto};
-use style::Zero;
-
pub mod context;
pub mod data;
pub mod display_list;
mod dom_traversal;
mod element_data;
mod flow;
+mod formatting_contexts;
mod fragments;
mod geom;
mod opaque_node;
@@ -36,94 +33,16 @@ pub use flow::{BoxTreeRoot, FragmentTreeRoot};
use crate::context::LayoutContext;
use crate::dom_traversal::{Contents, NodeExt};
-use crate::flow::{BlockFormattingContext, FlowChildren};
+use crate::flow::BlockFormattingContext;
use crate::geom::flow_relative::Vec2;
use crate::positioned::AbsolutelyPositionedFragment;
use crate::replaced::ReplacedContent;
use crate::style_ext::{ComputedValuesExt, Direction, DisplayInside, Position, WritingMode};
use servo_arc::Arc;
use std::convert::TryInto;
-use style::context::SharedStyleContext;
-
-/// https://drafts.csswg.org/css-display/#independent-formatting-context
-#[derive(Debug)]
-enum IndependentFormattingContext {
- Flow(BlockFormattingContext),
-
- // Not called FC in specs, but behaves close enough
- Replaced(ReplacedContent),
- // Other layout modes go here
-}
-
-enum NonReplacedIFC<'a> {
- Flow(&'a BlockFormattingContext),
-}
-
-impl IndependentFormattingContext {
- fn construct<'dom, 'style>(
- context: &SharedStyleContext<'style>,
- style: &Arc<ComputedValues>,
- display_inside: DisplayInside,
- contents: Contents<impl NodeExt<'dom>>,
- ) -> Self {
- match contents.try_into() {
- Ok(non_replaced) => match display_inside {
- DisplayInside::Flow | DisplayInside::FlowRoot => {
- IndependentFormattingContext::Flow(BlockFormattingContext::construct(
- context,
- style,
- non_replaced,
- ))
- },
- },
- Err(replaced) => IndependentFormattingContext::Replaced(replaced),
- }
- }
-
- fn as_replaced(&self) -> Result<&ReplacedContent, NonReplacedIFC> {
- match self {
- IndependentFormattingContext::Replaced(r) => Ok(r),
- IndependentFormattingContext::Flow(f) => Err(NonReplacedIFC::Flow(f)),
- }
- }
-
- fn layout<'a>(
- &'a self,
- layout_context: &LayoutContext,
- containing_block: &ContainingBlock,
- tree_rank: usize,
- absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
- ) -> FlowChildren {
- match self.as_replaced() {
- Ok(replaced) => match *replaced {},
- Err(ifc) => ifc.layout(
- layout_context,
- containing_block,
- tree_rank,
- absolutely_positioned_fragments,
- ),
- }
- }
-}
-
-impl<'a> NonReplacedIFC<'a> {
- fn layout(
- &self,
- layout_context: &LayoutContext,
- containing_block: &ContainingBlock,
- tree_rank: usize,
- absolutely_positioned_fragments: &mut Vec<AbsolutelyPositionedFragment<'a>>,
- ) -> FlowChildren {
- match self {
- NonReplacedIFC::Flow(bfc) => bfc.layout(
- layout_context,
- containing_block,
- tree_rank,
- absolutely_positioned_fragments,
- ),
- }
- }
-}
+use style::properties::ComputedValues;
+use style::values::computed::{Length, LengthOrAuto};
+use style::Zero;
struct ContainingBlock {
inline_size: Length,
@@ -162,12 +81,3 @@ fn relative_adjustement(
block: adjust(box_offsets.block_start, box_offsets.block_end),
}
}
-
-// FIXME: use std::mem::take when it’s stable.
-// https://github.com/rust-lang/rust/issues/61129
-fn take<T>(x: &mut T) -> T
-where
- T: Default,
-{
- std::mem::replace(x, Default::default())
-}
diff --git a/components/layout_2020/positioned.rs b/components/layout_2020/positioned.rs
index b37a5ed4a70..92bd4c8a4d5 100644
--- a/components/layout_2020/positioned.rs
+++ b/components/layout_2020/positioned.rs
@@ -3,10 +3,11 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::context::LayoutContext;
+use crate::formatting_contexts::IndependentFormattingContext;
use crate::fragments::{AnonymousFragment, BoxFragment, CollapsedBlockMargins, Fragment};
use crate::geom::flow_relative::{Rect, Sides, Vec2};
use crate::style_ext::{ComputedValuesExt, Direction, WritingMode};
-use crate::{ContainingBlock, DefiniteContainingBlock, IndependentFormattingContext};
+use crate::{ContainingBlock, DefiniteContainingBlock};
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
use servo_arc::Arc;
use style::properties::ComputedValues;
@@ -15,7 +16,6 @@ use style::Zero;
#[derive(Debug)]
pub(crate) struct AbsolutelyPositionedBox {
- pub style: Arc<ComputedValues>,
pub contents: IndependentFormattingContext,
}
@@ -49,7 +49,7 @@ impl AbsolutelyPositionedBox {
initial_start_corner: Vec2<Length>,
tree_rank: usize,
) -> AbsolutelyPositionedFragment {
- let style = &self.style;
+ let style = &self.contents.style;
let box_offsets = style.box_offsets();
let box_size = style.box_size();
@@ -130,7 +130,7 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
layout_context: &LayoutContext,
containing_block: &DefiniteContainingBlock,
) -> Fragment {
- let style = &self.absolutely_positioned_box.style;
+ let style = &self.absolutely_positioned_box.contents.style;
let cbis = containing_block.size.inline;
let cbbs = containing_block.size.block;
@@ -274,7 +274,7 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
);
let dummy_tree_rank = 0;
let mut absolutely_positioned_fragments = vec![];
- let mut flow_children = self.absolutely_positioned_box.contents.layout(
+ let mut independent_layout = self.absolutely_positioned_box.contents.layout(
layout_context,
&containing_block_for_children,
dummy_tree_rank,
@@ -286,7 +286,7 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
Anchor::End(end) => cbbs - end - pb.inline_end - margin.inline_end - inline_size,
};
- let block_size = block_size.auto_is(|| flow_children.block_size);
+ let block_size = block_size.auto_is(|| independent_layout.content_block_size);
let block_start = match block_anchor {
Anchor::Start(start) => start + pb.block_start + margin.block_start,
Anchor::End(end) => cbbs - end - pb.block_end - margin.block_end - block_size,
@@ -306,7 +306,7 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
AbsolutelyPositionedFragment::in_positioned_containing_block(
layout_context,
&absolutely_positioned_fragments,
- &mut flow_children.fragments,
+ &mut independent_layout.fragments,
&content_rect.size,
&padding,
containing_block_for_children.mode,
@@ -314,7 +314,7 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
Fragment::Box(BoxFragment {
style: style.clone(),
- children: flow_children.fragments,
+ children: independent_layout.fragments,
content_rect,
padding,
border,
diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs
index e8fdb1cfccd..7ed3d314c39 100644
--- a/components/layout_thread_2020/lib.rs
+++ b/components/layout_thread_2020/lib.rs
@@ -1091,7 +1091,7 @@ impl LayoutThread {
let rayon_pool = rayon_pool.as_ref().unwrap();
let box_tree = if token.should_traverse() {
- driver::traverse_dom(&traversal, token, None);
+ driver::traverse_dom(&traversal, token, Some(rayon_pool));
let shared = DomTraversal::<ServoLayoutElement>::shared_context(&traversal);
let root_node = document.root_element().unwrap().as_node();
diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs
index fe4d3cceaf8..37b2319dfd6 100644
--- a/components/style/properties/properties.mako.rs
+++ b/components/style/properties/properties.mako.rs
@@ -1260,12 +1260,12 @@ impl LonghandId {
LonghandId::Stroke |
LonghandId::CaretColor |
% endif
- % if engine in ["gecko", "servo-2013"]:
LonghandId::BackgroundColor |
LonghandId::BorderTopColor |
LonghandId::BorderRightColor |
LonghandId::BorderBottomColor |
LonghandId::BorderLeftColor |
+ % if engine in ["gecko", "servo-2013"]:
LonghandId::OutlineColor |
% endif
LonghandId::Color
@@ -1315,14 +1315,12 @@ impl LonghandId {
LonghandId::MozScriptLevel |
% endif
- % if engine in ["gecko", "servo-2013"]:
// Needed to compute the first available font, in order to
// compute font-relative units correctly.
LonghandId::FontSize |
LonghandId::FontWeight |
LonghandId::FontStretch |
LonghandId::FontStyle |
- % endif
LonghandId::FontFamily |
// Needed to properly compute the writing mode, to resolve logical
diff --git a/components/style/rule_cache.rs b/components/style/rule_cache.rs
index 24039fb94f7..117f63f9ea2 100644
--- a/components/style/rule_cache.rs
+++ b/components/style/rule_cache.rs
@@ -26,7 +26,9 @@ pub struct RuleCacheConditions {
impl RuleCacheConditions {
/// Sets the style as depending in the font-size value.
pub fn set_font_size_dependency(&mut self, font_size: NonNegativeLength) {
- debug_assert!(self.font_size.map_or(true, |f| f == font_size));
+ if let Some(f) = &self.font_size {
+ debug_assert_eq!(*f, font_size);
+ }
self.font_size = Some(font_size);
}
diff --git a/etc/taskcluster/decision_task.py b/etc/taskcluster/decision_task.py
index 6abdd0d7e11..5be3deef1d3 100644
--- a/etc/taskcluster/decision_task.py
+++ b/etc/taskcluster/decision_task.py
@@ -50,6 +50,7 @@ def tasks(task_for):
android_arm32_release,
android_x86_wpt,
linux_wpt,
+ linux_wpt_layout_2020,
linux_release,
macos_wpt,
]
@@ -72,6 +73,7 @@ def tasks(task_for):
"try-magicleap": [magicleap_dev],
"try-arm": [windows_arm64],
"try-wpt": [linux_wpt],
+ "try-wpt-2020": [linux_wpt_layout_2020],
"try-wpt-mac": [macos_wpt],
"try-wpt-android": [android_x86_wpt],
"try-android": [
@@ -555,26 +557,6 @@ def linux_release():
.find_or_create("build.linux_x64_release" + CONFIG.task_id())
)
-def linux_wpt():
- release_build_task = (
- linux_build_task("Release build, with debug assertions")
- .with_treeherder("Linux x64", "Release+A")
- .with_script("""
- ./mach build --release --with-debug-assertions -p servo
- ./etc/ci/lockfile_changed.sh
- tar -czf /target.tar.gz \
- target/release/servo \
- target/release/build/osmesa-src-*/output \
- target/release/build/osmesa-src-*/out/lib/gallium
- """)
- .with_artifacts("/target.tar.gz")
- .find_or_create("build.linux_x64_release_w_assertions" + CONFIG.task_id())
- )
- def linux_run_task(name):
- return linux_task(name).with_dockerfile(dockerfile_path("run")).with_repo_bundle()
- wpt_chunks("Linux x64", linux_run_task, release_build_task, repo_dir="/repo",
- total_chunks=4, processes=12)
-
def macos_nightly():
return (
@@ -661,16 +643,73 @@ def macos_wpt():
)
+def linux_wpt():
+ linux_wpt_common(total_chunks=4, layout_2020=False)
+
+
+def linux_wpt_layout_2020():
+ linux_wpt_common(total_chunks=1, layout_2020=True)
+
+
+def linux_wpt_common(total_chunks, layout_2020):
+ if layout_2020:
+ name_prefix = "Layout 2020 "
+ build_args = "--with-layout-2020"
+ index_key_suffix = "_2020"
+ else:
+ name_prefix = ""
+ build_args = ""
+ index_key_suffix = ""
+ release_build_task = (
+ linux_build_task(name_prefix + "Release build, with debug assertions")
+ .with_treeherder("Linux x64", "Release+A")
+ .with_script("""
+ time ./mach rustc -V
+ time ./mach fetch
+ ./mach build --release --with-debug-assertions %s -p servo
+ ./etc/ci/lockfile_changed.sh
+ tar -czf /target.tar.gz \
+ target/release/servo \
+ target/release/build/osmesa-src-*/output \
+ target/release/build/osmesa-src-*/out/lib/gallium
+ sccache --show-stats
+ """ % build_args)
+ .with_artifacts("/target.tar.gz")
+ .find_or_create("build.linux_x64%s_release_w_assertions.%s" % (
+ index_key_suffix,
+ CONFIG.task_id(),
+ ))
+ )
+ def linux_run_task(name):
+ return linux_task(name).with_dockerfile(dockerfile_path("run")).with_repo_bundle()
+ wpt_chunks("Linux x64", linux_run_task, release_build_task, repo_dir="/repo",
+ processes=12, total_chunks=total_chunks, layout_2020=layout_2020)
+
+
def wpt_chunks(platform, make_chunk_task, build_task, total_chunks, processes,
- repo_dir, chunks="all"):
+ repo_dir, chunks="all", layout_2020=False):
+ if layout_2020:
+ start = 1 # Skip the "extra" WPT testing, a.k.a. chunk 0
+ name_prefix = "Layout 2020 "
+ job_id_prefix = "2020-"
+ args = "--layout-2020"
+ else:
+ start = 0
+ name_prefix = ""
+ job_id_prefix = ""
+ args = ""
+
if chunks == "all":
- chunks = range(total_chunks + 1)
+ chunks = range(start, total_chunks + 1)
for this_chunk in chunks:
task = (
- make_chunk_task("WPT chunk {:0{width}} / {}".format(
- this_chunk, total_chunks, width=len(str(total_chunks)),
+ make_chunk_task("{}WPT chunk {:0{width}} / {}".format(
+ name_prefix,
+ this_chunk,
+ total_chunks,
+ width=len(str(total_chunks)),
))
- .with_treeherder(platform, "WPT-%s" % this_chunk)
+ .with_treeherder(platform, "%sWPT-%s" % (job_id_prefix, this_chunk))
.with_curl_artifact_script(build_task, "target.tar.gz")
.with_script("tar -xzf target.tar.gz")
.with_index_and_artifacts_expire_in(log_artifacts_expire_in)
@@ -679,6 +718,7 @@ def wpt_chunks(platform, make_chunk_task, build_task, total_chunks, processes,
TOTAL_CHUNKS=str(total_chunks),
THIS_CHUNK=str(this_chunk),
PROCESSES=str(processes),
+ WPT_ARGS=args,
GST_DEBUG="3",
)
)
@@ -722,6 +762,7 @@ def wpt_chunks(platform, make_chunk_task, build_task, total_chunks, processes,
task.with_script("""
./mach test-wpt \
--release \
+ $WPT_ARGS \
--processes $PROCESSES \
--total-chunks "$TOTAL_CHUNKS" \
--this-chunk "$THIS_CHUNK" \
@@ -742,8 +783,12 @@ def wpt_chunks(platform, make_chunk_task, build_task, total_chunks, processes,
for word in script.split()
if word.endswith(".log")
])
- platform_id = platform.replace(" ", "_").lower()
- task.find_or_create("%s_wpt_%s.%s" % (platform_id, this_chunk, CONFIG.task_id()))
+ task.find_or_create("%s_%swpt_%s.%s" % (
+ platform.replace(" ", "_").lower(),
+ job_id_prefix.replace("-", "_"),
+ this_chunk,
+ CONFIG.task_id(),
+ ))
def daily_tasks_setup():
diff --git a/python/servo/command_base.py b/python/servo/command_base.py
index e6b3ec7908b..20c02852d8a 100644
--- a/python/servo/command_base.py
+++ b/python/servo/command_base.py
@@ -321,6 +321,7 @@ class CommandBase(object):
self.config.setdefault("build", {})
self.config["build"].setdefault("android", False)
self.config["build"].setdefault("mode", "")
+ self.config["build"].setdefault("debug-assertions", False)
self.config["build"].setdefault("debug-mozjs", False)
self.config["build"].setdefault("ccache", "")
self.config["build"].setdefault("rustflags", "")
@@ -933,7 +934,7 @@ install them, let us know by filing a bug!")
features.append("webgl-backtrace")
if self.config["build"]["dom-backtrace"]:
features.append("dom-backtrace")
- if with_debug_assertions:
+ if with_debug_assertions or self.config["build"]["debug-assertions"]:
env['RUSTFLAGS'] = env.get('RUSTFLAGS', "") + " -C debug_assertions"
assert "--features" not in cargo_args
diff --git a/servobuild.example b/servobuild.example
index 2070da1a59c..a115f69f055 100644
--- a/servobuild.example
+++ b/servobuild.example
@@ -29,6 +29,9 @@ rustc-with-gold = true
# Set "android = true" or use `mach build --android` to build the Android app.
android = false
+# Enable `debug_assert!` macros in release mode
+debug-assertions = false
+
# Set "debug-mozjs" or use `mach build --debug-mozjs` to build a debug spidermonkey.
debug-mozjs = false
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/anonymous-boxes-inheritance-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/anonymous-boxes-inheritance-001.xht.ini
deleted file mode 100644
index e352ada2c97..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/anonymous-boxes-inheritance-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[anonymous-boxes-inheritance-001.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-001.xht.ini
new file mode 100644
index 00000000000..4823cf93169
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-001.xht.ini
@@ -0,0 +1,2 @@
+[block-in-inline-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-002.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-002.xht.ini
new file mode 100644
index 00000000000..d362d6d33d7
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-002.xht.ini
@@ -0,0 +1,2 @@
+[block-in-inline-002.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-007.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-007.xht.ini
new file mode 100644
index 00000000000..83752913967
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-007.xht.ini
@@ -0,0 +1,2 @@
+[block-in-inline-007.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-001.xht.ini
new file mode 100644
index 00000000000..36bc0e014bb
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-001.xht.ini
@@ -0,0 +1,2 @@
+[block-in-inline-relpos-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-002.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-002.xht.ini
new file mode 100644
index 00000000000..7607acf73b6
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/block-in-inline-relpos-002.xht.ini
@@ -0,0 +1,2 @@
+[block-in-inline-relpos-002.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-001.xht.ini
new file mode 100644
index 00000000000..344e9225521
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-001.xht.ini
@@ -0,0 +1,2 @@
+[box-generation-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-002.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-002.xht.ini
new file mode 100644
index 00000000000..73e2d4c0b4b
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/box-generation-002.xht.ini
@@ -0,0 +1,2 @@
+[box-generation-002.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-008.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-008.xht.ini
new file mode 100644
index 00000000000..dd630be0f54
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-008.xht.ini
@@ -0,0 +1,2 @@
+[containing-block-008.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-010.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-010.xht.ini
new file mode 100644
index 00000000000..af40eef0a5d
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-010.xht.ini
@@ -0,0 +1,2 @@
+[containing-block-010.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-019.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-019.xht.ini
new file mode 100644
index 00000000000..34d11b26c1f
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-019.xht.ini
@@ -0,0 +1,2 @@
+[containing-block-019.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-020.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-020.xht.ini
new file mode 100644
index 00000000000..6ed5cdb642e
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-020.xht.ini
@@ -0,0 +1,2 @@
+[containing-block-020.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-021.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-021.xht.ini
new file mode 100644
index 00000000000..bcb9c73edf7
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-021.xht.ini
@@ -0,0 +1,2 @@
+[containing-block-021.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-022.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-022.xht.ini
new file mode 100644
index 00000000000..3cb914f0bd1
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-022.xht.ini
@@ -0,0 +1,2 @@
+[containing-block-022.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-029.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-029.xht.ini
new file mode 100644
index 00000000000..652b2c6aaeb
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/containing-block-029.xht.ini
@@ -0,0 +1,2 @@
+[containing-block-029.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-006.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-006.xht.ini
new file mode 100644
index 00000000000..a695b3ab39f
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-006.xht.ini
@@ -0,0 +1,2 @@
+[display-006.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-007.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-007.xht.ini
new file mode 100644
index 00000000000..79555399456
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-007.xht.ini
@@ -0,0 +1,2 @@
+[display-007.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-008.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-008.xht.ini
new file mode 100644
index 00000000000..d2e2bf67a12
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-008.xht.ini
@@ -0,0 +1,2 @@
+[display-008.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-009.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-009.xht.ini
new file mode 100644
index 00000000000..06ce0c5ef0a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-009.xht.ini
@@ -0,0 +1,2 @@
+[display-009.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-010.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-010.xht.ini
new file mode 100644
index 00000000000..a973518bec3
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-010.xht.ini
@@ -0,0 +1,2 @@
+[display-010.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-011.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-011.xht.ini
new file mode 100644
index 00000000000..e4f1c95ae8d
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-011.xht.ini
@@ -0,0 +1,2 @@
+[display-011.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-012.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-012.xht.ini
new file mode 100644
index 00000000000..ab4046e2f0a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-012.xht.ini
@@ -0,0 +1,2 @@
+[display-012.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-013.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-013.xht.ini
new file mode 100644
index 00000000000..1062e603d52
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-013.xht.ini
@@ -0,0 +1,2 @@
+[display-013.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-014.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-014.xht.ini
new file mode 100644
index 00000000000..106af9fd3d5
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-014.xht.ini
@@ -0,0 +1,2 @@
+[display-014.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-015.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-015.xht.ini
new file mode 100644
index 00000000000..c8bd43b5722
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-015.xht.ini
@@ -0,0 +1,2 @@
+[display-015.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-change-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-change-001.xht.ini
new file mode 100644
index 00000000000..6b39c7c47cb
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/display-change-001.xht.ini
@@ -0,0 +1,2 @@
+[display-change-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini
new file mode 100644
index 00000000000..1105ba49c29
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-begin-001.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-begin-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini
new file mode 100644
index 00000000000..aa7d59a4027
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-end-001.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-end-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini
new file mode 100644
index 00000000000..608b684db5a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/insert-inline-in-blocks-n-inlines-middle-001.xht.ini
@@ -0,0 +1,2 @@
+[insert-inline-in-blocks-n-inlines-middle-001.xht]
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/box-display/root-box-002.xht.ini b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/root-box-002.xht.ini
new file mode 100644
index 00000000000..98aee50c690
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/box-display/root-box-002.xht.ini
@@ -0,0 +1,2 @@
+[root-box-002.xht]
+ expected: FAIL