diff --git a/components/style/sharing/mod.rs b/components/style/sharing/mod.rs index 8046d2339e6..ec818add99c 100644 --- a/components/style/sharing/mod.rs +++ b/components/style/sharing/mod.rs @@ -430,11 +430,16 @@ impl SharingCacheBase { } impl SharingCache { - fn insert(&mut self, el: E, validation_data_holder: &mut StyleSharingTarget) { - self.entries.insert(StyleSharingCandidate { - element: el, - validation_data: validation_data_holder.take_validation_data(), - }); + fn insert( + &mut self, + element: E, + validation_data_holder: Option<&mut StyleSharingTarget>, + ) { + let validation_data = match validation_data_holder { + Some(v) => v.take_validation_data(), + None => ValidationData::default(), + }; + self.entries.insert(StyleSharingCandidate { element, validation_data }); } fn lookup(&mut self, mut is_match: F) -> Option @@ -544,7 +549,7 @@ impl StyleSharingCache { pub fn insert_if_possible(&mut self, element: &E, style: &ComputedValues, - validation_data_holder: &mut StyleSharingTarget, + validation_data_holder: Option<&mut StyleSharingTarget>, dom_depth: usize) { let parent = match element.traversal_parent() { Some(element) => element, diff --git a/components/style/traversal.rs b/components/style/traversal.rs index f7009f04abf..2823abddec8 100644 --- a/components/style/traversal.rs +++ b/components/style/traversal.rs @@ -646,6 +646,10 @@ where traversal_data.current_dom_depth); context.thread_local.bloom_filter.assert_complete(element); + debug_assert_eq!( + context.thread_local.bloom_filter.matching_depth(), + traversal_data.current_dom_depth + ); // This is only relevant for animations as of right now. important_rules_changed = true; @@ -679,8 +683,8 @@ where .insert_if_possible( &element, new_styles.primary.style(), - &mut target, - context.thread_local.bloom_filter.matching_depth(), + Some(&mut target), + traversal_data.current_dom_depth, ); new_styles @@ -709,15 +713,25 @@ where let cascade_inputs = ElementCascadeInputs::new_from_element_data(data); - let mut resolver = - StyleResolverForElement::new( - element, - context, - RuleInclusion::All, - PseudoElementResolution::IfApplicable - ); + let new_styles = { + let mut resolver = + StyleResolverForElement::new( + element, + context, + RuleInclusion::All, + PseudoElementResolution::IfApplicable + ); - resolver.cascade_styles_with_default_parents(cascade_inputs) + resolver.cascade_styles_with_default_parents(cascade_inputs) + }; + context.thread_local.sharing_cache.insert_if_possible( + &element, + new_styles.primary.style(), + None, + traversal_data.current_dom_depth, + ); + + new_styles } };