diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-07-15 15:07:51 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-15 15:07:51 -0700 |
commit | 17f99e2a7bb0d7eec167eac952f12a7feafd647d (patch) | |
tree | 159601ac041c10f5c48b6dfb01c883b4504ffa89 /components/layout/traversal.rs | |
parent | 98836ff30d6c13a49902b7a15324ea94ee062046 (diff) | |
parent | b7de96e7025c7336ff34ec779d3dfceb268d647d (diff) | |
download | servo-17f99e2a7bb0d7eec167eac952f12a7feafd647d.tar.gz servo-17f99e2a7bb0d7eec167eac952f12a7feafd647d.zip |
Auto merge of #17741 - bholley:trim_traversal_fat, r=emilio
Trim some fat from the traversal
https://bugzilla.mozilla.org/show_bug.cgi?id=1380877
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17741)
<!-- Reviewable:end -->
Diffstat (limited to 'components/layout/traversal.rs')
-rw-r--r-- | components/layout/traversal.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/components/layout/traversal.rs b/components/layout/traversal.rs index cf75a47bbf8..f821b4a2806 100644 --- a/components/layout/traversal.rs +++ b/components/layout/traversal.rs @@ -12,6 +12,7 @@ use flow::{CAN_BE_FRAGMENTED, Flow, ImmutableFlowUtils, PostorderFlowTraversal}; use script_layout_interface::wrapper_traits::{LayoutNode, ThreadSafeLayoutNode}; use servo_config::opts; use style::context::{SharedStyleContext, StyleContext}; +use style::data::ElementData; use style::dom::{NodeInfo, TElement, TNode}; use style::selector_parser::RestyleDamage; use style::servo::restyle_damage::{BUBBLE_ISIZES, REFLOW, REFLOW_OUT_OF_FLOW, REPAINT}; @@ -53,8 +54,11 @@ impl<'a, E> DomTraversal<E> for RecalcStyleAndConstructFlows<'a> E::ConcreteNode: LayoutNode, E::FontMetricsProvider: Send, { - fn process_preorder(&self, traversal_data: &PerLevelTraversalData, - context: &mut StyleContext<E>, node: E::ConcreteNode) { + fn process_preorder<F>(&self, traversal_data: &PerLevelTraversalData, + context: &mut StyleContext<E>, node: E::ConcreteNode, + note_child: F) + where F: FnMut(E::ConcreteNode) + { // FIXME(pcwalton): Stop allocating here. Ideally this should just be // done by the HTML parser. unsafe { node.initialize_data() }; @@ -62,7 +66,7 @@ impl<'a, E> DomTraversal<E> for RecalcStyleAndConstructFlows<'a> if !node.is_text_node() { let el = node.as_element().unwrap(); let mut data = el.mutate_data().unwrap(); - recalc_style_at(self, traversal_data, context, el, &mut data); + recalc_style_at(self, traversal_data, context, el, &mut data, note_child); } } @@ -70,13 +74,13 @@ impl<'a, E> DomTraversal<E> for RecalcStyleAndConstructFlows<'a> construct_flows_at(&self.context, node); } - fn text_node_needs_traversal(node: E::ConcreteNode) -> bool { + fn text_node_needs_traversal(node: E::ConcreteNode, parent_data: &ElementData) -> bool { // Text nodes never need styling. However, there are two cases they may need // flow construction: // (1) They child doesn't yet have layout data (preorder traversal initializes it). // (2) The parent element has restyle damage (so the text flow also needs fixup). node.get_raw_data().is_none() || - node.parent_node().unwrap().to_threadsafe().restyle_damage() != RestyleDamage::empty() + parent_data.restyle.damage != RestyleDamage::empty() } fn shared_context(&self) -> &SharedStyleContext { |