Skip to content

Commit

Permalink
Call BoxTreeRoot::construct from layout_thread_2020
Browse files Browse the repository at this point in the history
  • Loading branch information
nox committed Oct 4, 2019
1 parent 9706cd4 commit ec74204
Show file tree
Hide file tree
Showing 12 changed files with 51 additions and 42 deletions.
10 changes: 5 additions & 5 deletions components/layout_2020/dom_traversal.rs
Expand Up @@ -17,7 +17,7 @@ use style::properties::ComputedValues;
use style::selector_parser::PseudoElement;

#[derive(Clone, Copy)]
pub(super) enum WhichPseudoElement {
pub enum WhichPseudoElement {
Before,
After,
}
Expand All @@ -35,12 +35,12 @@ pub(super) enum Contents<Node> {
OfPseudoElement(Vec<PseudoElementContentItem>),
}

pub(super) enum NonReplacedContents<Node> {
pub enum NonReplacedContents<Node> {
OfElement(Node),
OfPseudoElement(Vec<PseudoElementContentItem>),
}

pub(super) enum PseudoElementContentItem {
pub enum PseudoElementContentItem {
Text(String),
Replaced(ReplacedContent),
}
Expand Down Expand Up @@ -252,7 +252,7 @@ where
unimplemented!()
}

pub(super) struct BoxSlot<'dom> {
pub struct BoxSlot<'dom> {
slot: Option<Arc<AtomicRefCell<Option<LayoutBox>>>>,
marker: marker<&'dom ()>,
}
Expand Down Expand Up @@ -284,7 +284,7 @@ impl Drop for BoxSlot<'_> {
}
}

pub(crate) trait NodeExt<'dom>: 'dom + Copy + LayoutNode + Send + Sync {
pub 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>;
Expand Down
4 changes: 2 additions & 2 deletions components/layout_2020/element_data.rs
Expand Up @@ -8,7 +8,7 @@ use atomic_refcell::AtomicRefCell;
use servo_arc::Arc;

#[derive(Default)]
pub(crate) struct LayoutDataForElement {
pub struct LayoutDataForElement {
pub(super) self_box: Arc<AtomicRefCell<Option<LayoutBox>>>,
pub(super) pseudo_elements: Option<Box<PseudoElementBoxes>>,
}
Expand All @@ -19,7 +19,7 @@ pub(super) struct PseudoElementBoxes {
pub after: Arc<AtomicRefCell<Option<LayoutBox>>>,
}

pub(super) enum LayoutBox {
pub enum LayoutBox {
DisplayContents,
BlockLevel(Arc<BlockLevelBox>),
InlineLevel(Arc<InlineLevelBox>),
Expand Down
4 changes: 2 additions & 2 deletions components/layout_2020/flow/construct.rs
Expand Up @@ -123,7 +123,7 @@ struct BlockContainerBuilder<'dom, 'style, Node> {
}

impl BlockContainer {
pub fn construct<'dom, 'style>(
pub(crate) fn construct<'dom, 'style>(
context: &SharedStyleContext<'style>,
block_container_style: &Arc<ComputedValues>,
contents: NonReplacedContents<impl NodeExt<'dom>>,
Expand Down Expand Up @@ -646,7 +646,7 @@ where
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum ContainsFloats {
pub enum ContainsFloats {
No,
Yes,
}
Expand Down
2 changes: 1 addition & 1 deletion components/layout_2020/flow/float.rs
Expand Up @@ -7,7 +7,7 @@ use servo_arc::Arc;
use style::properties::ComputedValues;

#[derive(Debug)]
pub(crate) struct FloatBox {
pub struct FloatBox {
pub style: Arc<ComputedValues>,
pub contents: IndependentFormattingContext,
}
Expand Down
8 changes: 4 additions & 4 deletions components/layout_2020/flow/inline.rs
Expand Up @@ -16,12 +16,12 @@ use style::values::computed::Length;
use style::Zero;

#[derive(Debug, Default)]
pub(crate) struct InlineFormattingContext {
pub struct InlineFormattingContext {
pub(super) inline_level_boxes: Vec<Arc<InlineLevelBox>>,
}

#[derive(Debug)]
pub(crate) enum InlineLevelBox {
pub enum InlineLevelBox {
InlineBox(InlineBox),
TextRun(TextRun),
OutOfFlowAbsolutelyPositionedBox(AbsolutelyPositionedBox),
Expand All @@ -34,7 +34,7 @@ pub(crate) enum InlineLevelBox {
}

#[derive(Debug)]
pub(crate) struct InlineBox {
pub struct InlineBox {
pub style: Arc<ComputedValues>,
pub first_fragment: bool,
pub last_fragment: bool,
Expand All @@ -43,7 +43,7 @@ pub(crate) struct InlineBox {

/// https://www.w3.org/TR/css-display-3/#css-text-run
#[derive(Debug)]
pub(crate) struct TextRun {
pub struct TextRun {
pub parent_style: Arc<ComputedValues>,
pub text: String,
}
Expand Down
8 changes: 4 additions & 4 deletions components/layout_2020/flow/mod.rs
Expand Up @@ -25,22 +25,22 @@ use style::Zero;
mod construct;
mod float;
pub mod inline;
mod root;
pub mod root;

#[derive(Debug)]
pub(crate) struct BlockFormattingContext {
pub struct BlockFormattingContext {
pub contents: BlockContainer,
pub contains_floats: bool,
}

#[derive(Debug)]
pub(crate) enum BlockContainer {
pub enum BlockContainer {
BlockLevelBoxes(Vec<Arc<BlockLevelBox>>),
InlineFormattingContext(InlineFormattingContext),
}

#[derive(Debug)]
pub(crate) enum BlockLevelBox {
pub enum BlockLevelBox {
SameFormattingContextBlock {
style: Arc<ComputedValues>,
contents: BlockContainer,
Expand Down
13 changes: 2 additions & 11 deletions components/layout_2020/flow/root.rs
Expand Up @@ -22,17 +22,8 @@ use style::properties::ComputedValues;
use style::values::computed::{Length, LengthOrAuto};
use style_traits::CSSPixel;

// FIXME
// impl crate::dom::Document {
// pub(crate) fn layout(
// &self,
// viewport: crate::geom::Size<crate::geom::CssPx>,
// ) -> Vec<Fragment> {
// BoxTreeRoot::construct(self).layout(viewport)
// }
// }

struct BoxTreeRoot(BlockFormattingContext);
#[derive(Debug)]
pub struct BoxTreeRoot(BlockFormattingContext);

impl BoxTreeRoot {
pub fn construct<'dom>(
Expand Down
23 changes: 12 additions & 11 deletions components/layout_2020/lib.rs
Expand Up @@ -11,8 +11,18 @@
#[macro_use]
extern crate serde;

use crate::dom_traversal::{Contents, NodeExt};
use crate::flow::{BlockFormattingContext, FlowChildren};
use crate::geom::flow_relative::Vec2;
use crate::positioned::AbsolutelyPositionedFragment;
use crate::replaced::ReplacedContent;
use crate::style_ext::{ComputedValuesExt, Direction, Position, WritingMode};
use servo_arc::Arc;
use std::convert::TryInto;
use style::context::SharedStyleContext;
use style::properties::ComputedValues;
use style::values::computed::{Length, LengthOrAuto};
use style::values::specified::box_::DisplayInside;
use style::Zero;

pub mod context;
Expand All @@ -30,20 +40,11 @@ pub mod style_ext;
pub mod traversal;
pub mod wrapper;

use crate::dom_traversal::{Contents, NodeExt};
use crate::flow::{BlockFormattingContext, FlowChildren};
use crate::geom::flow_relative::Vec2;
use crate::positioned::AbsolutelyPositionedFragment;
use crate::replaced::ReplacedContent;
use crate::style_ext::{ComputedValuesExt, Direction, Position, WritingMode};
use servo_arc::Arc;
use std::convert::TryInto;
use style::context::SharedStyleContext;
use style::values::specified::box_::DisplayInside;
pub use crate::flow::root::BoxTreeRoot;

/// https://drafts.csswg.org/css-display/#independent-formatting-context
#[derive(Debug)]
enum IndependentFormattingContext {
pub enum IndependentFormattingContext {
Flow(BlockFormattingContext),

// Not called FC in specs, but behaves close enough
Expand Down
2 changes: 1 addition & 1 deletion components/layout_2020/positioned.rs
Expand Up @@ -13,7 +13,7 @@ use style::values::computed::{Length, LengthOrAuto, LengthPercentage, LengthPerc
use style::Zero;

#[derive(Debug)]
pub(crate) struct AbsolutelyPositionedBox {
pub struct AbsolutelyPositionedBox {
pub style: Arc<ComputedValues>,
pub contents: IndependentFormattingContext,
}
Expand Down
2 changes: 1 addition & 1 deletion components/layout_2020/replaced.rs
Expand Up @@ -6,7 +6,7 @@ use crate::dom_traversal::NodeExt;
use style::context::SharedStyleContext;

#[derive(Debug)]
pub(super) enum ReplacedContent {
pub enum ReplacedContent {
// Not implemented yet
}

Expand Down
7 changes: 7 additions & 0 deletions components/layout_thread_2020/dom_wrapper.rs
Expand Up @@ -109,6 +109,13 @@ pub struct ServoLayoutNode<'a> {
chain: PhantomData<&'a ()>,
}

// Those are supposed to be sound, but they aren't because the entire system
// between script and layout so far has been designed to work around their
// absence. Switching the entire thing to the inert crate infra will help.

unsafe impl Send for ServoLayoutNode<'_> {}
unsafe impl Sync for ServoLayoutNode<'_> {}

impl<'ln> Debug for ServoLayoutNode<'ln> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
if let Some(el) = self.as_element() {
Expand Down
10 changes: 10 additions & 0 deletions components/layout_thread_2020/lib.rs
Expand Up @@ -45,6 +45,7 @@ use layout::query::{
process_text_index_request,
};
use layout::traversal::RecalcStyle;
use layout::BoxTreeRoot;
use layout_traits::LayoutThreadFactory;
use libc::c_void;
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
Expand Down Expand Up @@ -166,6 +167,9 @@ pub struct LayoutThread {
/// The number of Web fonts that have been requested but not yet loaded.
outstanding_web_fonts: Arc<AtomicUsize>,

/// The root box tree.
box_tree_root: RefCell<Option<BoxTreeRoot>>,

/// The document-specific shared lock used for author-origin stylesheets
document_shared_lock: Option<SharedRwLock>,

Expand Down Expand Up @@ -492,6 +496,7 @@ impl LayoutThread {
new_animations_sender: new_animations_sender,
_new_animations_receiver: new_animations_receiver,
outstanding_web_fonts: Arc::new(AtomicUsize::new(0)),
box_tree_root: Default::default(),
document_shared_lock: None,
epoch: Cell::new(Epoch(0)),
viewport_size: Size2D::new(Au(0), Au(0)),
Expand Down Expand Up @@ -1075,6 +1080,11 @@ impl LayoutThread {

if token.should_traverse() {
driver::traverse_dom(&traversal, token, None);

let shared = DomTraversal::<ServoLayoutElement>::shared_context(&traversal);
let box_tree =
BoxTreeRoot::construct(shared, document.root_element().unwrap().as_node());
*self.box_tree_root.borrow_mut() = Some(box_tree);
}

for element in elements_with_snapshot {
Expand Down

0 comments on commit ec74204

Please sign in to comment.