Flush style sharing cache on parent mismatch.

This commit is contained in:
Nicolas 2016-09-18 19:56:14 -04:00
parent 83f687a7be
commit 5ccce5911f

View file

@ -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
}