Pass a callback to recalc_style_at to avoid traversing children twice.

MozReview-Commit-ID: DIHXaVNzbFM
This commit is contained in:
Bobby Holley 2017-07-12 17:46:21 -07:00
parent e534ec9e47
commit b7de96e702
6 changed files with 166 additions and 188 deletions

View file

@ -52,14 +52,10 @@ pub fn traverse_dom<E, D>(traversal: &D,
while let Some(WorkItem(node, depth)) = discovered.pop_front() {
let mut children_to_process = 0isize;
let traversal_data = PerLevelTraversalData { current_dom_depth: depth };
traversal.process_preorder(&traversal_data, &mut context, node);
if let Some(el) = node.as_element() {
traversal.traverse_children(&mut context, el, |_context, kid| {
children_to_process += 1;
discovered.push_back(WorkItem(kid, depth + 1))
});
}
traversal.process_preorder(&traversal_data, &mut context, node, |n| {
children_to_process += 1;
discovered.push_back(WorkItem(n, depth + 1));
});
traversal.handle_postorder_traversal(&mut context, root.as_node().opaque(),
node, children_to_process);