зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #19426 - style: Require an nth-index cache for invalidation (from emilio:cache-invalidation); r=xidorn
Source-Repo: https://github.com/servo/servo Source-Revision: 95aac490a5150fd1a354f25c61b01ee0406a1e84 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : ca65470776263fe2a7f0bb65ad54a64034c956d5
This commit is contained in:
Родитель
6c6269e554
Коммит
a1ac90919c
|
@ -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() {
|
||||
|
|
|
@ -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(),
|
||||
);
|
||||
|
|
|
@ -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<E: TElement> : 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,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
Загрузка…
Ссылка в новой задаче