From 6b0f4c04108b02490f3ed7db23b21222fdb50cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 12 Jun 2017 04:56:31 +0200 Subject: [PATCH] style: Move one-off checks out of the recursive invalidation function. There isn't a need to pay the cost for them multiple times. Bug: 1372068 MozReview-Commit-ID: 3K2mRcWTheJ --- components/style/invalidation/stylesheets.rs | 39 +++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/components/style/invalidation/stylesheets.rs b/components/style/invalidation/stylesheets.rs index c1014d0383b..4ac69f8fa02 100644 --- a/components/style/invalidation/stylesheets.rs +++ b/components/style/invalidation/stylesheets.rs @@ -116,12 +116,37 @@ impl StylesheetInvalidationSet { where E: TElement, { if let Some(e) = document_element { - self.process_invalidations_in_subtree(e); + self.process_invalidations(e); } self.invalid_scopes.clear(); self.fully_invalid = false; } + fn process_invalidations(&self, element: E) -> bool + where E: TElement, + { + { + let mut data = match element.mutate_data() { + Some(data) => data, + None => return false, + }; + + if self.fully_invalid { + debug!("process_invalidations: fully_invalid({:?})", + element); + data.ensure_restyle().hint.insert(StoredRestyleHint::subtree()); + return true; + } + } + + if self.invalid_scopes.is_empty() { + debug!("process_invalidations: empty invalidation set"); + return false; + } + + self.process_invalidations_in_subtree(element) + } + /// Process style invalidations in a given subtree, that is, look for all /// the relevant scopes in the subtree, and mark as dirty only the relevant /// ones. @@ -148,18 +173,6 @@ impl StylesheetInvalidationSet { } } - if self.fully_invalid { - debug!("process_invalidations_in_subtree: fully_invalid({:?})", - element); - data.ensure_restyle().hint.insert(StoredRestyleHint::subtree()); - return true; - } - - if self.invalid_scopes.is_empty() { - debug!("process_invalidations_in_subtree: empty invalidation set"); - return false; - } - for scope in &self.invalid_scopes { if scope.matches(element) { debug!("process_invalidations_in_subtree: {:?} matched {:?}",