All elements end up with AFFECTED_BY_STATE right now, presumably due to the UA
sheet, and some non-TS pseudo-classes we've added, which means that we currently
never insert anything into the cache.
MozReview-Commit-ID: 5IU4qrjeJFy
1. We need to call get_after_change_style, which is the computed styles
without transition rules, while process_animations.
2. If we have after-change style, we may replace the new computed values with
after-change style, according to whether we really need to update
transitions.
3. There are some cases we don't update transitions, so we need to early
return. might_needs_transitions_update() will check it first and it
will filter out most common cases.
4. needs_transitions_update() will check each property and existing running
transitions to make sure we really don't need to update transitions.
The logic of this function is similar with that of
nsTransitionManager::DoUpdateTransitions().
MozReview-Commit-ID: 2ccdPjgrxKz
It is possible to call get_after_change_style if there is no transition
rule. In order to avoid cloning the token computed values, we just return None.
The caller can use this Option to know which computed values should be
used.
MozReview-Commit-ID: 7fcgSVEtXWh
We will add another function, needs_update_transitions, to check if we need
to update transitions, so factor this out.
MozReview-Commit-ID: 5LYkyi4aDri
I wanted to add an environmental variable to disable the style sharing
cache for gecko, but the current pattern involves lazy_static!, which
involves an atomic operation on lookup, which is a bit hot to do each
time we try to share styles. This makes that work happen once per
process.
style: Refactor the selectors crate to remove ad-hoc logic.
Also refactors a lot of the restyle hint code to use these new hooks, and removes a lot of hacks in servo that shouldn't be needed because of correct handling of restyles due to attribute changes.
I just smoketested this, so going for a full try run now.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/16293)
<!-- Reviewable:end -->
Also, simplify all the pre-snapshot attribute hacks in the script and style
code.
MozReview-Commit-ID: 6c9ipeb7Tnr
Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
The current mechanism requires threading a lot of this state through a bunch of
callsites that are several layers of abstraction above the code that actually
uses this vector (which is only compiled for servo). Putting it in
CurrentElementInfo gets it nicely out of the way.
MozReview-Commit-ID: 9PLBKcJreN0
This is necessary in order to make the computation of eager pseudos depend on
the primary ComputedValues, which we want to do for ::first-letter/::first-line.
This also fixes a bug where the behavior of EagerPseudoStyles::is_empty was reversed
in both the implementation and the callsite.
MozReview-Commit-ID: EXBxclyHWXu
This simplifies things by avoiding the computation of MatchResults when we
don't need them.
We continue to compute rule_nodes_changed, even though we don't use it
for the moment, since we will need it soon for various incremental restyle
optimizations.
MozReview-Commit-ID: 4qsUYaD5Bs2
The UpdateAnimationsTasks is a bitflags and each bit is generated from
Gecko's UpdateAnimationsTasks (enum class) values for matching values
between C++ and Rust. For this reason, the bitflags is annotated as
(feature = "gecko"), as a result update_animations() which uses this bitflags
also became gecko-only function.
We need a scope to restore rule_node_changed that were borrowed by the closure.
This closure function will be used for animation-only restyles as well.
A new function, cascade_with_rules, takes StrongRuleNode
and computes cascading result values with the StrongRuleNode.
This new function will be used for getting after-change-style
for CSS Transitions.