diff --git a/components/layout_2020/flow/mod.rs b/components/layout_2020/flow/mod.rs index 189a5aeb436..2395380c5eb 100644 --- a/components/layout_2020/flow/mod.rs +++ b/components/layout_2020/flow/mod.rs @@ -27,7 +27,7 @@ mod float; pub mod inline; mod root; -pub use root::BoxTreeRoot; +pub use root::{BoxTreeRoot, FragmentTreeRoot}; #[derive(Debug)] pub(crate) struct BlockFormattingContext { diff --git a/components/layout_2020/flow/root.rs b/components/layout_2020/flow/root.rs index 994ce29bb16..6e344e1cdc8 100644 --- a/components/layout_2020/flow/root.rs +++ b/components/layout_2020/flow/root.rs @@ -23,6 +23,7 @@ use style::values::computed::{Length, LengthOrAuto}; use style_traits::CSSPixel; pub struct BoxTreeRoot(BlockFormattingContext); +pub struct FragmentTreeRoot(Vec); impl BoxTreeRoot { pub fn construct<'dom>( @@ -95,7 +96,7 @@ fn construct_for_root_element<'dom>( } impl BoxTreeRoot { - fn layout(&self, viewport: geom::Size) -> Vec { + pub fn layout(&self, viewport: geom::Size) -> FragmentTreeRoot { let initial_containing_block_size = Vec2 { inline: Length::new(viewport.width), block: Length::new(viewport.height), @@ -125,6 +126,6 @@ impl BoxTreeRoot { .par_iter() .map(|a| a.layout(&initial_containing_block)), ); - flow_children.fragments + FragmentTreeRoot(flow_children.fragments) } } diff --git a/components/layout_2020/lib.rs b/components/layout_2020/lib.rs index f491411eb3c..b7578713f5d 100644 --- a/components/layout_2020/lib.rs +++ b/components/layout_2020/lib.rs @@ -30,7 +30,7 @@ mod style_ext; pub mod traversal; pub mod wrapper; -pub use flow::BoxTreeRoot; +pub use flow::{BoxTreeRoot, FragmentTreeRoot}; use crate::dom_traversal::{Contents, NodeExt}; use crate::flow::{BlockFormattingContext, FlowChildren}; diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs index 13f6fc79dce..c33449d478a 100644 --- a/components/layout_thread_2020/lib.rs +++ b/components/layout_thread_2020/lib.rs @@ -167,8 +167,11 @@ pub struct LayoutThread { /// The number of Web fonts that have been requested but not yet loaded. outstanding_web_fonts: Arc, - /// The root box tree. - box_tree_root: RefCell>, + /// The root of the box tree. + box_tree_root: RefCell>, + + /// The root of the fragment tree. + fragment_tree_root: RefCell>, /// The document-specific shared lock used for author-origin stylesheets document_shared_lock: Option, @@ -497,6 +500,7 @@ impl LayoutThread { _new_animations_receiver: new_animations_receiver, outstanding_web_fonts: Arc::new(AtomicUsize::new(0)), box_tree_root: Default::default(), + fragment_tree_root: Default::default(), document_shared_lock: None, epoch: Cell::new(Epoch(0)), viewport_size: Size2D::new(Au(0), Au(0)), @@ -1084,7 +1088,12 @@ impl LayoutThread { let shared = DomTraversal::::shared_context(&traversal); let box_tree = BoxTreeRoot::construct(shared, document.root_element().unwrap().as_node()); + let fragment_tree = box_tree.layout(Size2D::new( + self.viewport_size.width.to_f32_px(), + self.viewport_size.height.to_f32_px(), + )); *self.box_tree_root.borrow_mut() = Some(box_tree); + *self.fragment_tree_root.borrow_mut() = Some(fragment_tree); } for element in elements_with_snapshot {