diff --git a/components/style/data.rs b/components/style/data.rs index 6c02f54305d..f1b92fae139 100644 --- a/components/style/data.rs +++ b/components/style/data.rs @@ -239,7 +239,7 @@ impl ElementData { element: E, shared_context: &SharedStyleContext, stack_limit_checker: Option<&StackLimitChecker>, - nth_index_cache: Option<&mut NthIndexCache>, + nth_index_cache: &mut NthIndexCache, ) -> InvalidationResult { // In animation-only restyle we shouldn't touch snapshot at all. if shared_context.traversal_flags.for_animation_only() { diff --git a/components/style/invalidation/element/collector.rs b/components/style/invalidation/element/collector.rs index 49430fd1b13..600d26757e2 100644 --- a/components/style/invalidation/element/collector.rs +++ b/components/style/invalidation/element/collector.rs @@ -71,12 +71,12 @@ impl<'a, 'b: 'a, E: TElement> StateAndAttrInvalidationProcessor<'a, 'b, E> { cut_off_inheritance: bool, element: E, data: &'a mut ElementData, - nth_index_cache: Option<&'a mut NthIndexCache>, + nth_index_cache: &'a mut NthIndexCache, ) -> Self { let matching_context = MatchingContext::new_for_visited( MatchingMode::Normal, None, - nth_index_cache, + Some(nth_index_cache), VisitedHandlingMode::AllLinksVisitedAndUnvisited, shared_context.quirks_mode(), ); diff --git a/components/style/traversal.rs b/components/style/traversal.rs index da7750d1ff0..6a99d597d1b 100644 --- a/components/style/traversal.rs +++ b/components/style/traversal.rs @@ -10,6 +10,7 @@ use dom::{NodeInfo, OpaqueNode, TElement, TNode}; use invalidation::element::restyle_hints::RestyleHint; use matching::{ChildCascadeRequirement, MatchMethods}; use selector_parser::PseudoElement; +use selectors::NthIndexCache; use sharing::StyleSharingTarget; use smallvec::SmallVec; use style_resolver::{PseudoElementResolution, StyleResolverForElement}; @@ -153,11 +154,12 @@ pub trait DomTraversal : Sync { if !traversal_flags.for_animation_only() { // Invalidate our style, and that of our siblings and // descendants as needed. - // - // FIXME(emilio): an nth-index cache could be worth here, even - // if temporary? - let invalidation_result = - data.invalidate_style_if_needed(root, shared_context, None, None); + let invalidation_result = data.invalidate_style_if_needed( + root, + shared_context, + None, + &mut NthIndexCache::default(), + ); if invalidation_result.has_invalidated_siblings() { let actual_root = root.traversal_parent() @@ -802,7 +804,7 @@ where child, &context.shared, Some(&context.thread_local.stack_limit_checker), - Some(&mut context.thread_local.nth_index_cache) + &mut context.thread_local.nth_index_cache, ); } diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 894e66579bb..35ca8d0f2fd 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -6,7 +6,7 @@ use cssparser::{Parser, ParserInput}; use cssparser::ToCss as ParserToCss; use env_logger::LogBuilder; use malloc_size_of::MallocSizeOfOps; -use selectors::Element; +use selectors::{Element, NthIndexCache}; use selectors::matching::{MatchingContext, MatchingMode, matches_selector}; use servo_arc::{Arc, ArcBorrow, RawOffsetArc}; use std::cell::RefCell; @@ -4478,15 +4478,13 @@ pub extern "C" fn Servo_ProcessInvalidations( let mut data = data.as_mut().map(|d| &mut **d); if let Some(ref mut data) = data { - // FIXME(emilio): an nth-index cache could be worth here, even - // if temporary? - // - // Also, ideally we could share them across all the elements? + // FIXME(emilio): Ideally we could share the nth-index-cache across all + // the elements? let result = data.invalidate_style_if_needed( element, &shared_style_context, None, - None, + &mut NthIndexCache::default(), ); if result.has_invalidated_siblings() {