mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Refactor parallel dom traversal to be agnostic to the processing steps themselves.
This commit is contained in:
parent
5ad9207a99
commit
947134949a
4 changed files with 262 additions and 327 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue