From 3e2c44114c339e77b07a303bd02365f109003677 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 17 Jul 2015 11:40:40 +0200 Subject: [PATCH] Move the traversal traits into the traversal module. --- components/layout/construct.rs | 3 ++- components/layout/parallel.rs | 5 +++-- components/layout/sequential.rs | 4 ++-- components/layout/traversal.rs | 29 +++++++++++++++++++++++++++-- components/layout/wrapper.rs | 26 +------------------------- 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/components/layout/construct.rs b/components/layout/construct.rs index cc67cc6c300..746ecef1e6b 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -40,7 +40,8 @@ use table_row::TableRowFlow; use table_rowgroup::TableRowGroupFlow; use table_wrapper::TableWrapperFlow; use text::TextRunScanner; -use wrapper::{PostorderNodeMutTraversal, PseudoElementType, ThreadSafeLayoutNode}; +use traversal::PostorderNodeMutTraversal; +use wrapper::{PseudoElementType, ThreadSafeLayoutNode}; use gfx::display_list::OpaqueNode; use script::dom::characterdata::CharacterDataTypeId; diff --git a/components/layout/parallel.rs b/components/layout/parallel.rs index 748f84d1a0d..6d00c4a4c44 100644 --- a/components/layout/parallel.rs +++ b/components/layout/parallel.rs @@ -12,12 +12,13 @@ use context::{LayoutContext, SharedLayoutContext}; use flow::{Flow, MutableFlowUtils, PreorderFlowTraversal, PostorderFlowTraversal}; use flow; use flow_ref::FlowRef; +use traversal::{PreorderDomTraversal, PostorderDomTraversal}; +use traversal::PostorderNodeMutTraversal; use traversal::{BubbleISizes, AssignISizes, AssignBSizesAndStoreOverflow}; use traversal::{ComputeAbsolutePositions, BuildDisplayList}; use traversal::{RecalcStyleForNode, ConstructFlows}; use wrapper::{layout_node_to_unsafe_layout_node, layout_node_from_unsafe_layout_node, LayoutNode}; -use wrapper::{PostorderNodeMutTraversal, UnsafeLayoutNode}; -use wrapper::{PreorderDomTraversal, PostorderDomTraversal}; +use wrapper::UnsafeLayoutNode; use profile_traits::time::{self, ProfilerMetadata, profile}; use std::mem; diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs index 7ebd8a407e6..b4c8270e804 100644 --- a/components/layout/sequential.rs +++ b/components/layout/sequential.rs @@ -10,12 +10,12 @@ use flow::{PostorderFlowTraversal, PreorderFlowTraversal}; use flow_ref::FlowRef; use fragment::FragmentBorderBoxIterator; use generated_content::ResolveGeneratedContent; +use traversal::{PreorderDomTraversal, PostorderDomTraversal}; +use traversal::PostorderNodeMutTraversal; use traversal::{BubbleISizes, RecalcStyleForNode, ConstructFlows}; use traversal::{AssignBSizesAndStoreOverflow, AssignISizes}; use traversal::{ComputeAbsolutePositions, BuildDisplayList}; use wrapper::LayoutNode; -use wrapper::{PostorderNodeMutTraversal}; -use wrapper::{PreorderDomTraversal, PostorderDomTraversal}; use euclid::point::Point2D; use util::geometry::{Au, ZERO_POINT}; diff --git a/components/layout/traversal.rs b/components/layout/traversal.rs index 603245ecb88..c366d20206b 100644 --- a/components/layout/traversal.rs +++ b/components/layout/traversal.rs @@ -15,8 +15,7 @@ use flow::{PreorderFlowTraversal, PostorderFlowTraversal}; use incremental::{self, BUBBLE_ISIZES, REFLOW, REFLOW_OUT_OF_FLOW, RestyleDamage}; use script::layout_interface::ReflowGoal; use wrapper::{layout_node_to_unsafe_layout_node, LayoutNode}; -use wrapper::{PostorderNodeMutTraversal, ThreadSafeLayoutNode, UnsafeLayoutNode}; -use wrapper::{PreorderDomTraversal, PostorderDomTraversal}; +use wrapper::{ThreadSafeLayoutNode, UnsafeLayoutNode}; use selectors::bloom::BloomFilter; use selectors::Node; @@ -118,6 +117,32 @@ fn insert_ancestors_into_bloom_filter(bf: &mut Box, debug!("[{}] Inserted {} ancestors.", tid(), ancestors); } + +/// A top-down traversal. +pub trait PreorderDomTraversal { + /// The operation to perform. Return true to continue or false to stop. + fn process(&self, node: LayoutNode); +} + +/// A bottom-up traversal, with a optional in-order pass. +pub trait PostorderDomTraversal { + /// The operation to perform. Return true to continue or false to stop. + fn process(&self, node: LayoutNode); +} + +/// A bottom-up, parallelizable traversal. +pub trait PostorderNodeMutTraversal { + /// The operation to perform. Return true to continue or false to stop. + fn process<'a>(&'a mut self, node: &ThreadSafeLayoutNode<'a>) -> bool; + + /// Returns true if this node should be pruned. If this returns true, we skip the operation + /// entirely and do not process any descendant nodes. This is called *before* child nodes are + /// visited. The default implementation never prunes any nodes. + fn should_prune<'a>(&'a self, _node: &ThreadSafeLayoutNode<'a>) -> bool { + false + } +} + /// The recalc-style-for-node traversal, which styles each node and must run before /// layout computation. This computes the styles applied to each node. #[derive(Copy, Clone)] diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index dca07619751..89b45a83512 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -36,6 +36,7 @@ use css::node_style::StyledNode; use incremental::RestyleDamage; use data::{LayoutDataFlags, LayoutDataWrapper, PrivateLayoutData}; use opaque_node::OpaqueNodeMethods; +use traversal::PostorderNodeMutTraversal; use gfx::display_list::OpaqueNode; use script::dom::attr::AttrValue; @@ -1056,19 +1057,6 @@ impl<'le> ThreadSafeLayoutElement<'le> { } } -/// A bottom-up, parallelizable traversal. -pub trait PostorderNodeMutTraversal { - /// The operation to perform. Return true to continue or false to stop. - fn process<'a>(&'a mut self, node: &ThreadSafeLayoutNode<'a>) -> bool; - - /// Returns true if this node should be pruned. If this returns true, we skip the operation - /// entirely and do not process any descendant nodes. This is called *before* child nodes are - /// visited. The default implementation never prunes any nodes. - fn should_prune<'a>(&'a self, _node: &ThreadSafeLayoutNode<'a>) -> bool { - false - } -} - /// Opaque type stored in type-unsafe work queues for parallel layout. /// Must be transmutable to and from LayoutNode. pub type UnsafeLayoutNode = (usize, usize); @@ -1086,15 +1074,3 @@ pub unsafe fn layout_node_from_unsafe_layout_node(node: &UnsafeLayoutNode) -> La let (node, _) = *node; mem::transmute(node) } - -/// A top-down traversal. -pub trait PreorderDomTraversal { - /// The operation to perform. Return true to continue or false to stop. - fn process(&self, node: LayoutNode); -} - -/// A bottom-up traversal, with a optional in-order pass. -pub trait PostorderDomTraversal { - /// The operation to perform. Return true to continue or false to stop. - fn process(&self, node: LayoutNode); -}