From 7f5536d5bc28856b90ba87f32c63dbf901d8b648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sun, 22 Oct 2017 02:51:00 +0200 Subject: [PATCH] style: Ensure invalidated_self is called at most once per element. MozReview-Commit-ID: 1M0WuAduqun --- .../style/invalidation/element/invalidator.rs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/components/style/invalidation/element/invalidator.rs b/components/style/invalidation/element/invalidator.rs index 164e15c830a..6d29f9b273b 100644 --- a/components/style/invalidation/element/invalidator.rs +++ b/components/style/invalidation/element/invalidator.rs @@ -240,12 +240,18 @@ where debug!(" > descendants: {:?}", descendant_invalidations); debug!(" > siblings: {:?}", sibling_invalidations); + let invalidated_self_from_collection = invalidated_self; + invalidated_self |= self.process_descendant_invalidations( &self_invalidations, &mut descendant_invalidations, &mut sibling_invalidations, ); + if invalidated_self && !invalidated_self_from_collection { + self.processor.invalidated_self(self.element); + } + let invalidated_descendants = self.invalidate_descendants(&descendant_invalidations); let invalidated_siblings = self.invalidate_siblings(&mut sibling_invalidations); @@ -276,12 +282,18 @@ where ); let mut invalidations_for_descendants = InvalidationVector::new(); - any_invalidated |= + let invalidated_sibling = sibling_invalidator.process_sibling_invalidations( &mut invalidations_for_descendants, sibling_invalidations, ); + if invalidated_sibling { + sibling_invalidator.processor.invalidated_self(sibling); + } + + any_invalidated |= invalidated_sibling; + any_invalidated |= sibling_invalidator.invalidate_descendants( &invalidations_for_descendants @@ -351,6 +363,10 @@ where sibling_invalidations, ); + if invalidated_child { + child_invalidator.processor.invalidated_self(child); + } + child_invalidator.invalidate_descendants(&invalidations_for_descendants) }; @@ -718,10 +734,6 @@ where CompoundSelectorMatchingResult::NotMatched => {} } - if invalidated_self { - self.processor.invalidated_self(self.element); - } - SingleInvalidationResult { invalidated_self, matched, } } }