aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2015-11-20 11:52:49 -0800
committerMartin Robinson <mrobinson@igalia.com>2015-11-20 11:57:58 -0800
commit90e2f7bfbf7bd83efec7f85828fac66687f5e752 (patch)
treece532e0aae79cd03dfac77b7a0920697e67c259f
parent2be0cb7827c6553b7dfa4d641bf3a1c72372ad3b (diff)
downloadservo-90e2f7bfbf7bd83efec7f85828fac66687f5e752.tar.gz
servo-90e2f7bfbf7bd83efec7f85828fac66687f5e752.zip
Clean up restyle damage after it no longer applies
BUBBLE_ISIZES and REPAINT can become "stuck" on in the default Servo configuration once they are activated. This is solved by removing these damage bits after they no longer apply. There isn't a good way to test this, other than noting that it doesn't break any existing CSS tests. This will become more important in the future as the REPAINT bit is used to implement display list patching.
-rw-r--r--components/layout/construct.rs5
-rw-r--r--components/layout/traversal.rs3
2 files changed, 5 insertions, 3 deletions
diff --git a/components/layout/construct.rs b/components/layout/construct.rs
index 32f540e1d36..c2427b63b69 100644
--- a/components/layout/construct.rs
+++ b/components/layout/construct.rs
@@ -27,7 +27,7 @@ use fragment::{InlineAbsoluteHypotheticalFragmentInfo, TableColumnFragmentInfo};
use fragment::{InlineBlockFragmentInfo, SpecificFragmentInfo, UnscannedTextFragmentInfo};
use fragment::{WhitespaceStrippingResult};
use gfx::display_list::OpaqueNode;
-use incremental::{RECONSTRUCT_FLOW, RestyleDamage};
+use incremental::{BUBBLE_ISIZES, RECONSTRUCT_FLOW, RestyleDamage};
use inline::{FIRST_FRAGMENT_OF_ELEMENT, InlineFlow, InlineFragmentNodeFlags};
use inline::{InlineFragmentNodeInfo, LAST_FRAGMENT_OF_ELEMENT};
use list_item::{ListItemFlow, ListStyleTypeContent};
@@ -1697,7 +1697,8 @@ impl FlowConstructionUtils for FlowRef {
/// properly computed. (This is not, however, a memory safety problem.)
fn finish(&mut self) {
if !opts::get().bubble_inline_sizes_separately {
- flow_ref::deref_mut(self).bubble_inline_sizes()
+ flow_ref::deref_mut(self).bubble_inline_sizes();
+ flow::mut_base(flow_ref::deref_mut(self)).restyle_damage.remove(BUBBLE_ISIZES);
}
}
}
diff --git a/components/layout/traversal.rs b/components/layout/traversal.rs
index 3a1fcf38bc6..95a21c1f854 100644
--- a/components/layout/traversal.rs
+++ b/components/layout/traversal.rs
@@ -10,7 +10,7 @@ use css::matching::{ApplicableDeclarations, ElementMatchMethods, MatchMethods, S
use flow::{PostorderFlowTraversal, PreorderFlowTraversal};
use flow::{self, Flow};
use gfx::display_list::OpaqueNode;
-use incremental::{self, BUBBLE_ISIZES, REFLOW, REFLOW_OUT_OF_FLOW, RestyleDamage};
+use incremental::{self, BUBBLE_ISIZES, REFLOW, REFLOW_OUT_OF_FLOW, REPAINT, RestyleDamage};
use script::layout_interface::ReflowGoal;
use selectors::bloom::BloomFilter;
use std::cell::RefCell;
@@ -390,6 +390,7 @@ impl<'a> PostorderFlowTraversal for BuildDisplayList<'a> {
#[inline]
fn process(&self, flow: &mut Flow) {
flow.build_display_list(self.layout_context);
+ flow::mut_base(flow).restyle_damage.remove(REPAINT);
}
#[inline]