aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/sequential.rs
diff options
context:
space:
mode:
authorBobby Holley <bobbyholley@gmail.com>2015-12-30 17:02:38 -0800
committerBobby Holley <bobbyholley@gmail.com>2016-01-04 09:38:04 -0800
commit947134949adc908d6a0414f423914025355ad931 (patch)
tree06680a0a22a2478a33fe0f3778f578ba9027642a /components/layout/sequential.rs
parent5ad9207a99295284f1525844b734f189d1a25255 (diff)
downloadservo-947134949adc908d6a0414f423914025355ad931.tar.gz
servo-947134949adc908d6a0414f423914025355ad931.zip
Refactor parallel dom traversal to be agnostic to the processing steps themselves.
Diffstat (limited to 'components/layout/sequential.rs')
-rw-r--r--components/layout/sequential.rs32
1 files changed, 13 insertions, 19 deletions
diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs
index 5f33e5f352c..310560e2fa7 100644
--- a/components/layout/sequential.rs
+++ b/components/layout/sequential.rs
@@ -14,39 +14,33 @@ use fragment::FragmentBorderBoxIterator;
use generated_content::ResolveGeneratedContent;
use traversal::PostorderNodeMutTraversal;
use traversal::{AssignBSizesAndStoreOverflow, AssignISizes};
-use traversal::{BubbleISizes, ConstructFlows, RecalcStyleForNode};
-use traversal::{BuildDisplayList, ComputeAbsolutePositions};
-use traversal::{PostorderDomTraversal, PreorderDomTraversal};
+use traversal::{BubbleISizes, BuildDisplayList, ComputeAbsolutePositions};
+use traversal::{DomTraversal, DomTraversalContext};
use util::opts;
use wrapper::LayoutNode;
-pub fn traverse_dom_preorder<'le, N>(root: N,
- shared_layout_context: &SharedLayoutContext)
- where N: LayoutNode<'le> {
- fn doit<'le, N>(node: N,
- recalc_style: RecalcStyleForNode,
- construct_flows: ConstructFlows)
- where N: LayoutNode<'le> {
- recalc_style.process(node);
+pub fn traverse_dom_preorder<'ln, N, T>(root: N,
+ shared_layout_context: &SharedLayoutContext)
+ where N: LayoutNode<'ln>,
+ T: DomTraversal<'ln, N> {
+ fn doit<'a, 'ln, N, T>(context: &'a DomTraversalContext<'a>, node: N)
+ where N: LayoutNode<'ln>, T: DomTraversal<'ln, N> {
+ T::process_preorder(context, node);
for kid in node.children() {
- doit(kid, recalc_style, construct_flows);
+ doit::<N, T>(context, kid);
}
- construct_flows.process(node);
+ T::process_postorder(context, node);
}
let layout_context = LayoutContext::new(shared_layout_context);
- let recalc_style = RecalcStyleForNode {
- layout_context: &layout_context,
- root: root.opaque(),
- };
- let construct_flows = ConstructFlows {
+ let traversal_context = DomTraversalContext {
layout_context: &layout_context,
root: root.opaque(),
};
- doit::<'le, N>(root, recalc_style, construct_flows);
+ doit::<N, T>(&traversal_context, root);
}
pub fn resolve_generated_content(root: &mut FlowRef, shared_layout_context: &SharedLayoutContext) {