diff --git a/components/layout_2020/dom_traversal.rs b/components/layout_2020/dom_traversal.rs index 1a3ec7f1c98..0038627f88c 100644 --- a/components/layout_2020/dom_traversal.rs +++ b/components/layout_2020/dom_traversal.rs @@ -2,6 +2,7 @@ * 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::element_data::{LayoutBox, LayoutDataForElement}; use crate::geom::physical::Vec2; use crate::replaced::ReplacedContent; @@ -13,7 +14,6 @@ use script_layout_interface::wrapper_traits::{LayoutNode, ThreadSafeLayoutNode}; use servo_arc::Arc as ServoArc; use std::marker::PhantomData as marker; use std::sync::Arc; -use style::context::SharedStyleContext; use style::dom::TNode; use style::properties::ComputedValues; use style::selector_parser::PseudoElement; @@ -66,7 +66,7 @@ where fn traverse_children_of<'dom, Node>( parent_element: Node, - context: &SharedStyleContext, + context: &LayoutContext, handler: &mut impl TraversalHandler<'dom, Node>, ) where Node: NodeExt<'dom>, @@ -88,7 +88,7 @@ fn traverse_children_of<'dom, Node>( fn traverse_element<'dom, Node>( element: Node, - context: &SharedStyleContext, + context: &LayoutContext, handler: &mut impl TraversalHandler<'dom, Node>, ) where Node: NodeExt<'dom>, @@ -121,7 +121,7 @@ fn traverse_element<'dom, Node>( fn traverse_pseudo_element<'dom, Node>( which: WhichPseudoElement, element: Node, - context: &SharedStyleContext, + context: &LayoutContext, handler: &mut impl TraversalHandler<'dom, Node>, ) where Node: NodeExt<'dom>, @@ -146,7 +146,7 @@ fn traverse_pseudo_element<'dom, Node>( fn traverse_pseudo_element_contents<'dom, Node>( pseudo_element_style: &ServoArc, - context: &SharedStyleContext, + context: &LayoutContext, handler: &mut impl TraversalHandler<'dom, Node>, items: Vec, ) where @@ -159,9 +159,10 @@ fn traverse_pseudo_element_contents<'dom, Node>( PseudoElementContentItem::Replaced(contents) => { let item_style = anonymous_style.get_or_insert_with(|| { context + .shared_context() .stylist .style_for_anonymous::( - &context.guards, + &context.shared_context().guards, &PseudoElement::ServoText, &pseudo_element_style, ) @@ -215,7 +216,7 @@ where pub(crate) fn traverse( self, inherited_style: &ServoArc, - context: &SharedStyleContext, + context: &LayoutContext, handler: &mut impl TraversalHandler<'dom, Node>, ) { match self { @@ -230,7 +231,7 @@ where fn pseudo_element_style<'dom, Node>( _which: WhichPseudoElement, _element: Node, - _context: &SharedStyleContext, + _context: &LayoutContext, ) -> Option> where Node: NodeExt<'dom>, @@ -243,7 +244,7 @@ where fn generate_pseudo_element_content<'dom, Node>( _pseudo_element_style: &ComputedValues, _element: Node, - _context: &SharedStyleContext, + _context: &LayoutContext, ) -> Vec where Node: NodeExt<'dom>, @@ -292,7 +293,7 @@ pub(crate) trait NodeExt<'dom>: 'dom + Copy + LayoutNode + Send + Sync { fn first_child(self) -> Option; fn next_sibling(self) -> Option; fn parent_node(self) -> Option; - fn style(self, context: &SharedStyleContext) -> ServoArc; + fn style(self, context: &LayoutContext) -> ServoArc; fn layout_data_mut(&self) -> AtomicRefMut; fn element_box_slot(&self) -> BoxSlot<'dom>; @@ -349,8 +350,8 @@ where TNode::parent_node(&self) } - fn style(self, context: &SharedStyleContext) -> ServoArc { - self.to_threadsafe().style(context) + fn style(self, context: &LayoutContext) -> ServoArc { + self.to_threadsafe().style(context.shared_context()) } fn layout_data_mut(&self) -> AtomicRefMut { diff --git a/components/layout_2020/flow/construct.rs b/components/layout_2020/flow/construct.rs index 5ac85dd47d9..79c44911f47 100644 --- a/components/layout_2020/flow/construct.rs +++ b/components/layout_2020/flow/construct.rs @@ -2,6 +2,7 @@ * 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::{BoxSlot, Contents, NodeExt, NonReplacedContents, TraversalHandler}; use crate::element_data::LayoutBox; use crate::flow::float::FloatBox; @@ -14,13 +15,12 @@ use rayon::iter::{IntoParallelIterator, ParallelIterator}; use rayon_croissant::ParallelIteratorExt; use servo_arc::Arc; use std::convert::TryInto; -use style::context::SharedStyleContext; use style::properties::ComputedValues; use style::selector_parser::PseudoElement; impl BlockFormattingContext { pub fn construct<'dom>( - context: &SharedStyleContext<'_>, + context: &LayoutContext, style: &Arc, contents: NonReplacedContents>, ) -> Self { @@ -71,7 +71,7 @@ enum IntermediateBlockContainer { /// This builder starts from the first child of a given DOM node /// and does a preorder traversal of all of its inclusive siblings. struct BlockContainerBuilder<'dom, 'style, Node> { - context: &'style SharedStyleContext<'style>, + context: &'style LayoutContext<'style>, block_container_style: &'style Arc, @@ -123,11 +123,11 @@ struct BlockContainerBuilder<'dom, 'style, Node> { } impl BlockContainer { - pub fn construct<'dom, 'style>( - context: &SharedStyleContext<'style>, + pub fn construct<'dom>( + context: &LayoutContext, block_container_style: &Arc, contents: NonReplacedContents>, - // intrinsic_sizes_requested: bool, + //intrinsic_sizes_requested: bool, ) -> (BlockContainer, ContainsFloats) { let mut builder = BlockContainerBuilder { context, @@ -510,9 +510,10 @@ where let block_container_style = self.block_container_style; let anonymous_style = self.anonymous_style.get_or_insert_with(|| { context + .shared_context() .stylist .style_for_anonymous::( - &context.guards, + &context.shared_context().guards, &PseudoElement::ServoText, &block_container_style, ) @@ -547,9 +548,9 @@ impl<'dom, Node> IntermediateBlockLevelBox where Node: NodeExt<'dom>, { - fn finish<'style>( + fn finish( self, - context: &SharedStyleContext<'style>, + context: &LayoutContext, ) -> (Arc, ContainsFloats) { match self { IntermediateBlockLevelBox::SameFormattingContextBlock { style, contents } => { @@ -614,9 +615,9 @@ impl<'dom, Node> IntermediateBlockContainer where Node: NodeExt<'dom>, { - fn finish<'style>( + fn finish( self, - context: &SharedStyleContext<'style>, + context: &LayoutContext, style: &Arc, ) -> (BlockContainer, ContainsFloats) { match self { diff --git a/components/layout_2020/flow/root.rs b/components/layout_2020/flow/root.rs index 7c062f12f47..e5681f21f0c 100644 --- a/components/layout_2020/flow/root.rs +++ b/components/layout_2020/flow/root.rs @@ -19,7 +19,6 @@ 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::values::computed::{Length, LengthOrAuto}; use style::Zero; use style_traits::CSSPixel; @@ -28,7 +27,7 @@ pub struct BoxTreeRoot(BlockFormattingContext); pub struct FragmentTreeRoot(Vec); impl BoxTreeRoot { - pub fn construct<'dom, Node>(context: &SharedStyleContext<'_>, root_element: Node) -> Self + pub fn construct<'dom, Node>(context: &LayoutContext, root_element: Node) -> Self where Node: 'dom + Copy + LayoutNode + Send + Sync, { @@ -41,7 +40,7 @@ impl BoxTreeRoot { } fn construct_for_root_element<'dom>( - context: &SharedStyleContext<'_>, + context: &LayoutContext, root_element: impl NodeExt<'dom>, ) -> (ContainsFloats, Vec>) { let style = root_element.style(context); diff --git a/components/layout_2020/formatting_contexts.rs b/components/layout_2020/formatting_contexts.rs index 0517f599852..aa643c6e9c8 100644 --- a/components/layout_2020/formatting_contexts.rs +++ b/components/layout_2020/formatting_contexts.rs @@ -12,7 +12,6 @@ use crate::style_ext::DisplayInside; use crate::ContainingBlock; use servo_arc::Arc; use std::convert::TryInto; -use style::context::SharedStyleContext; use style::properties::ComputedValues; use style::values::computed::Length; @@ -46,8 +45,8 @@ enum NonReplacedIFCKind<'a> { } impl IndependentFormattingContext { - pub fn construct<'dom, 'style>( - context: &SharedStyleContext<'style>, + pub fn construct<'dom>( + context: &LayoutContext, style: Arc, display_inside: DisplayInside, contents: Contents>, diff --git a/components/layout_2020/traversal.rs b/components/layout_2020/traversal.rs index bdc2c095026..97a9874a20b 100644 --- a/components/layout_2020/traversal.rs +++ b/components/layout_2020/traversal.rs @@ -20,6 +20,10 @@ impl<'a> RecalcStyle<'a> { RecalcStyle { context: context } } + pub fn context(&self) -> &LayoutContext<'a> { + &self.context + } + pub fn destroy(self) -> LayoutContext<'a> { self.context } diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs index 77e89950d57..f9cdbac7943 100644 --- a/components/layout_thread_2020/lib.rs +++ b/components/layout_thread_2020/lib.rs @@ -1081,9 +1081,8 @@ impl LayoutThread { let box_tree = if token.should_traverse() { driver::traverse_dom(&traversal, token, Some(rayon_pool)); - let shared = DomTraversal::::shared_context(&traversal); let root_node = document.root_element().unwrap().as_node(); - let box_tree = rayon_pool.install(|| BoxTreeRoot::construct(shared, root_node)); + let box_tree = rayon_pool.install(|| BoxTreeRoot::construct(traversal.context(), root_node)); Some(box_tree) } else { None