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
This commit is contained in:
Emilio Cobos Álvarez 2017-06-12 04:56:31 +02:00
parent 36bac58863
commit 6b0f4c0410
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C

View file

@ -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<E>(&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 {:?}",