aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/matching.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/components/style/matching.rs b/components/style/matching.rs
index 4edf85d1d3c..5a37d0eb328 100644
--- a/components/style/matching.rs
+++ b/components/style/matching.rs
@@ -708,6 +708,7 @@ pub trait ElementMatchMethods : TElement {
_ => return StyleSharingResult::CannotShare,
};
+ let mut should_clear_cache = false;
for (i, &mut (ref mut candidate, ())) in style_sharing_candidate_cache.iter_mut().enumerate() {
let sharing_result = self.share_style_with_candidate_if_possible(parent,
shared_context,
@@ -750,6 +751,11 @@ pub trait ElementMatchMethods : TElement {
// Cache miss, let's see what kind of failure to decide
// whether we keep trying or not.
match miss {
+ // Cache miss because of parent, clear the candidate cache.
+ CacheMiss::Parent => {
+ should_clear_cache = true;
+ break;
+ },
// Too expensive failure, give up, we don't want another
// one of these.
CacheMiss::CommonStyleAffectingAttributes |
@@ -761,6 +767,9 @@ pub trait ElementMatchMethods : TElement {
}
}
}
+ if should_clear_cache {
+ style_sharing_candidate_cache.clear();
+ }
StyleSharingResult::CannotShare
}