Commit Graph

161 Commits

Author SHA1 Message Date
Brian Birtles
569fad078e Bug 1355348 - Move IsFlattenedTreeDescendantOf helper to nsContentUtils; r=heycam
In the next patch in this series we would like to use this functionality in
nsSMILController as well so this patch moves it to somewhere we can share it.

MozReview-Commit-ID: 1IzWoCCw4aD
2017-04-26 13:00:10 +09:00
Emilio Cobos Álvarez
7e1330401f Bug 1355351: Simplify nsLayoutUtils callers, and make child iterators notice display: contents pseudos. r=heycam
This also happens to fix other bugs, like making display: contents pseudos
animatable, which weren't before.

MozReview-Commit-ID: LhwTPNbFvSZ
2017-04-19 12:53:57 +02:00
Boris Chiou
8e97c6a574 Bug 1341372 - Part 1: Let animation-only restyle include css-transition. r=heycam,hiro
Animation-only restyle should include both Animation and Transition
cascade levels.

MozReview-Commit-ID: Jo1sb5fGUC0
2017-04-17 14:22:28 +08:00
Boris Chiou
68f83f15a6 Bug 1343753 - Part 6: Move mAnimationGeneration into RestyleManager. r=birtles
So stylo can also use mAnimationGeneration.

MozReview-Commit-ID: KTc8vs2RKMm
2017-03-09 17:15:08 +08:00
Cameron McCormack
ce964757b3 Bug 1351535 - Part 5: Add EffectCompositor method to pre-traverse within a specific subtree. r=hiro
It's not great that we traverse up the tree looking for the subtree root for
each animating element that is in mElementsToRestyle.  An alternative could
be to traverse the entire subtree and build a hash set of the elements
within it, so that each test in the mElementsToRestyle loop can be done
quickly.  I suspect that most of the time looking up the tree for
each animation will be quicker, but it does have worse worst case behavior.

MozReview-Commit-ID: FWoQ7fD9YZC
2017-04-04 19:12:54 +08:00
Hiroyuki Ikezoe
7a8ce7e445 Bug 1350754 - Templatize EffectCompositor::UpdateEffectProperties. r=birtles
We will use this function for stylo computed values as well.

MozReview-Commit-ID: IxDg4EZARi3
2017-03-27 19:43:04 +09:00
Hiroyuki Ikezoe
e30da15110 Bug 1344966 - Post eRestyle_CSSAnimations instead of eRestyle_Self and eRestyle_Subtree. r=heycam
MozReview-Commit-ID: 7azwzIPc45X
2017-03-27 06:17:08 +09:00
Hiroyuki Ikezoe
f8aeb7ad55 Bug 1340958 - Drop AnimationRule and ServoAnimationRule. r=boris
MozReview-Commit-ID: ClnvyShHpsN
2017-03-17 13:24:42 +09:00
Hiroyuki Ikezoe
7cc9990018 Bug 1340958 - Put computed values into AnimationValueMap instead of hashtable in gecko. r=heycam
Before this patch, we store each computed values in a hashtable,
nsRefPtrHashtable<nsUint32HashKey, RawServoAnimationValue>, for all
KeyframeEffectReadOnly on an element, and convert the ServoAnimationValues of
the hashtable into an nsTArray<ServoAnimationValue*> and then convert
the ServoAnimationValues of the nsTArray into PropertyDeclarationBlock
in rust.  This way was really inefficient.
In this patch, we store the computed values into AnimationValueMap and
convert all AnimationValue in the map into PropertyDeclarationBlock
after EffectCompositor::GetAnimationRule.

MozReview-Commit-ID: EJ2Kl65fVeF
2017-03-17 13:23:21 +09:00
Hiroyuki Ikezoe
d65d560c39 Bug 1340958 - Templatize ComposeStyle. r=birtles
Later in this patch series we will replace ServoAnimationRule with a hashmap.
At that point, we would like to pass the hashmap to ComposeStyle. In order
to achieve that, this patch templatizes the 'animation rule' parameter of
ComposeStyle in both Animation and KeyframeEffectReadOnly so that it can
represent a hashmap instead.

MozReview-Commit-ID: H5bMxjN3W8n
2017-03-17 13:22:13 +09:00
Hiroyuki Ikezoe
aab08dd5f9 Bug 1340958 - Do not call EffectCompositor::GetServoAnimationRule for print preview. r=heycam
The only one caller of GetServoAnimationRule is Gecko_GetAnimationRule.
There is no risk that pres context is destroyed in Gecko_GetAnimationRule.

MozReview-Commit-ID: 52pxbCiCNoJ
2017-03-17 12:48:34 +09:00
Hiroyuki Ikezoe
cf65f136ac Bug 1347806 - Fix pseudo nsIAtom for ::before and ::after. r=birtles
cssPseudoElementBeforeProperty and cssPseudoElementAfterProperty are for
CSSPseudoElement.

MozReview-Commit-ID: 3WETv4QeC5
2017-03-16 14:01:44 +09:00
Boris Chiou
145c1a6575 Bug 1339704 - Part 2 - Filter out unwanted CascadeLevel::Transitions. r=birtles,hiro
We always call TElement::get_animation_rules() for both cascade levels while
there are animations or transitions, so we want to handle the following cases:
1. Have both CascadeLevel::Animations and CascadeLevel::Transitions:
  * We use EffectSet::mPropertiesForAnimationsLevel to filter out
    CascadeLevel::Transitions because transitions are suppressed when both
    are presented.
2. Have CascadeLevel::Animations, but don't have CascadeLevel::Transitions:
  * We also use EffectSet::mPropertiesForAnimationsLevel to filter out
    the unwanted CascadeLevel::Transitions.
3. Don't Have CascadeLevel::Animations, but have CascadeLevel::Transitions:
  * EffectSet::mPropertiesForAnimationsLevel doesn't work for this case.
    In Gecko, mElementsToRestyle can help us to filter out the unwanted
    CascadeLevel::Animations, However, mElementsToRestyle is cleared in
    Pre-Traversal, so now we rely on the cascade ordering of transitions to
    override animations. I think we still need to optimize this eventually.
4. No animations:
  * EffectSet helps us to check if there is any animations/transitions.

Therefore, we need to call MaybeUpdateCascadeResults(), which updates
mPropertiesForAnimationsLevel, in Pre-Traversal.

MozReview-Commit-ID: IHYw56EX7Ta
2017-03-13 21:09:50 +08:00
Boris Chiou
aad2d0b3f5 Bug 1339704 - Part 1 - Rename nsCSSPropertyIDSet::Invert as Inverse. r=hiro
This makes it more obvious that the object is not being modified but a
new object is being returned.

MozReview-Commit-ID: A6dH8f12h5A
2017-03-14 11:30:20 +08:00
BharatR123
72f593ede3 Bug 1302888 - Replace GetPresContext() with nsContentUtils::GetContextForContent() to obtain nsPresContext* in dom/animation r=hiro
Edited all function calls in KeyFrameEffectReadOnly.cpp and one function call in EffectCompositor.cpp

MozReview-Commit-ID: BzSHLZna4xX
2017-03-13 20:39:49 +05:30
Hiroyuki Ikezoe
f85a661e97 Bug 1341985 - Trigger the second traversal for updating CSS animations in the case of Servo_ResolveStyleLazily. r=heycam
MozReview-Commit-ID: 7E4unP9M7FQ
2017-03-10 11:53:19 +09:00
Hiroyuki Ikezoe
d9c3518720 Bug 1341985 - Trigger the second traversal for updating CSS animations. r=birtles,heycam
The restyle request during restyling is a result of creating/updating/removing
CSS animations that will come from a SequentialTask which will be implemented
in a subsequent patch.

MozReview-Commit-ID: JoAqvcN3y51
2017-03-10 11:53:19 +09:00
Hiroyuki Ikezoe
500774de7b Bug 1344619 - Part 7: Drop EffectCompositor::ClearElementsToRestyle. r=birtles
MozReview-Commit-ID: DlTj2OR0wI0
2017-03-09 05:20:17 +09:00
Hiroyuki Ikezoe
2648271681 Bug 1344619 - Part 5: Introduce EffectCompositor::PreTraverse() for an element. r=birtles
MozReview-Commit-ID: KCLkwIE8LTM
2017-03-09 05:20:17 +09:00
Hiroyuki Ikezoe
a351785413 Bug 1344619 - Part 2: Introduce EffectCompositor::PreTraverse(). r=birtles
MozReview-Commit-ID: 6ijDJttB9eo
2017-03-09 05:20:17 +09:00
Hiroyuki Ikezoe
0388ff334b Bug 1344619 - Part 1: Introduce WillCompose() to update various state that we need to update as the result of ComposeStyle(). r=birtles
MozReview-Commit-ID: JznBR3OghKG
2017-03-09 05:20:17 +09:00
Hiroyuki Ikezoe
3c41587983 Bug 1341987 - Part 3: Update the last refresh time for transform only when we send transform animations to the compositor. r=birtles
We don't need to update the time during composing style, we just need to
update when transform animations are sent to the compositor. The most
recent refresh time of nsRefreshDriver should be the same in either side.
If the time is skewed, that means we skip composing style, if it happened
that's another bug.

MozReview-Commit-ID: Dxtuocf1ml1
2017-02-27 11:34:46 +09:00
Hiroyuki Ikezoe
bce3f36bb2 Bug 1341987 - Part 2: Drop cascade level from last refresh time for transform. r=birtles
We no longer need separate time for cascade levels respectively since we do
send all type of animations on the same element to the compositor regardless
of cascade level.

MozReview-Commit-ID: 7cGQGE3yHvm
2017-02-27 11:30:56 +09:00
Hiroyuki Ikezoe
42243bd080 Bug 1341987 - Part 1: Rename AnimationRuleRefreshTime to LastTransformSyncTime. r=birtles
It's just for transform animations on the compositor.

MozReview-Commit-ID: 288CcG4kko4
2017-02-27 11:29:27 +09:00
Cameron McCormack
87f3ad6dfb Bug 1297899 - Part 6: Move RestyleManagerHandle functionality into RestyleManager. r=bholley
MozReview-Commit-ID: 7lsti0bGzNr
2017-02-13 11:21:33 +08:00
Hiroyuki Ikezoe
a6db5ea712 Bug 1331704 - Part 3: Drop all of unused stuff. r=birtles a=abillings
MozReview-Commit-ID: BWAC0iZLw6t
2017-02-11 19:11:45 +09:00
Sebastian Hengst
0a388f09bd Backed out changeset 0077d103e862 (bug 1331704) 2017-02-11 11:32:10 +01:00
Hiroyuki Ikezoe
db4e65d866 Bug 1331704 - Part 3: Drop all of unused stuff. r=birtles a=abillings
MozReview-Commit-ID: BWAC0iZLw6t
2017-02-11 19:11:45 +09:00
Cameron McCormack
c6a66bcfd8 Bug 1334735 - Part 2: Add separate flag to track need to flush throttled animations. r=bz,birtles
MozReview-Commit-ID: 6Vi3laKcbmG
2017-02-10 10:42:28 +08:00
Cameron McCormack
334e0fe231 Bug 1334735 - Part 1: Move need style/flush flags from document to pres shell. r=bz
MozReview-Commit-ID: 2Amf9yGRiJA
2017-02-10 10:42:27 +08:00
Hiroyuki Ikezoe
eb36bd1a03 Bug 1334982 - Convert animation restyle hints only if we are not in process of restyling. r=heycam
MozReview-Commit-ID: 4pWeWhGaTJv
2017-01-31 16:37:39 +09:00
Boris Chiou
8019f824cb Bug 1324691 - Part 1: Use warnings instead of assertions for unsupported OMTA. r=heycam
Make FindAnimationsForCompositor return false because we don't support
OMTA, and use warnings, instead of assertions, because animations sill
work.

We call RequestRestyle(Layer) not only for OMTA but also for
non-compositor-driven animations, so just skip the animation generation part,
and use warnings, instead of assertions.

MozReview-Commit-ID: LNw5aC8jOvh
2017-01-26 15:27:44 +08:00
Boris Chiou
1f024d5ff3 Bug 1317209 - Part 5: Trigger composeStyle if there is an animation. r=heycam
1. Add one new FFI, Gecko_GetAnimationRule, which will try
   to update the animation rule and retrieve a ServoAnimationRule
   from EffectSet.
2. Add GetServoAnimationRule, which calls Animation::ComposeStyle and updates
   mElementsToRestyle.
3. There is no eRestyle_{CSSAnimations|CSSTransitions}, so we use
   eRestyle_Self and eRestyle_Subtree for stylo.

MozReview-Commit-ID: 9RpJurPSFMk
2017-01-24 15:27:56 +08:00
Boris Chiou
9bb79bff75 Bug 1317209 - Part 1: Introduce ServoAnimationRule and implement uncompute FFI. r=heycam,manishearth
1. Introduce ServoAnimationRule, which is an equivalent of AnimValuesStyleRule.
2. Wrap ServoAnimationRule and AnimValuesStyleRule into a struct, and
   use it as the parameter of Animation::ComposeStyle and
   KeyframeEffectReadOnly::ComposeStyle.
3. Uncompute the RawServoAnimationValues in ServoAnimationRule when we
   need it.

MozReview-Commit-ID: HahXDYBCAhH
2017-01-24 15:19:18 +08:00
Hiroyuki Ikezoe
6044c74e91 Bug 1330190 - Part 2: Add a new function named ResolveStyleWithoutAnimation. r=heycam
Unlike the other one this function does not need an old nsStyleContext.
This function just resolves style without all animation data in the first place.
The existing ResolveStyleWithoutAnimation is renamed to
ResolveStyleByRemovingAnimation.

MozReview-Commit-ID: 1RmCQNw0MmW
2017-01-16 16:57:13 +09:00
Hiroyuki Ikezoe
09f4791ea1 Bug 1322382 - Add EffectCompositor::GetBaseStyle for nsIFrame. r=birtles
Currently this function is used when an nsIFrame is generated by reframing. In
reframing, we call EffectCompositor::UpdateEffectProperties, as a result, we
have to clear the base style that we resolved once. So, for such cases, we need
to re-resolve the base style with the style context that is associated with the
nsIFrame.

MozReview-Commit-ID: F90OuF44SPI
2016-12-10 09:16:33 +09:00
Brian Birtles
3f905c79ce Bug 1301305 - Notify animations when they should synchronize with geometric animations; r=hiro
MozReview-Commit-ID: 9Ploi5UwseA
2016-12-02 10:21:11 +09:00
Brian Birtles
adb08b5c74 Bug 1301305 - Factor out check for main-thread synchronization to a method on Animation; r=hiro
This should be easier to read and provide us a convenient place to check for
other cases where we need to synchronize with the main thread (such as the
change introduced in this bug where we synchronize with other animations
started at the same time).

MozReview-Commit-ID: 8iuA7P4ycwM
2016-12-02 10:13:06 +09:00
Hiroyuki Ikezoe
d6f70f8d26 Bug 1305325 - Part 11: Cache non-animated base values. r=birtles
This patch adds a hashtable to store the non-animated base style of each
property in EffectSet class if the following conditions are met.

1) the effect is the lowest priority of the effect
2) the effect is additive or accumulative

The styles are stored as StyleAnimationValue objects since it's handy class to
store a CSS value for different properties.

MozReview-Commit-ID: 1MZV7MnqzfI
2016-12-04 08:07:40 +09:00
Hiroyuki Ikezoe
d8041fa2b6 Bug 1305325 - Part 9: Send animations even if it's paused, finished or zero playback rate. r=birtles.
If all of animations on an element are paused, finished or zero playback rate,
we don't send those animations to the compositor.
Also in this change, we send zero active duration animations to the compositor
in the same way as normail animations.

MozReview-Commit-ID: CHjv6Buy5fa
2016-12-02 15:34:13 +09:00
Hiroyuki Ikezoe
24bd60c4e9 Bug 1305325 - Part 4: Add a function that returns the resolved base style on an element for a given property with nsStyleContext. r=birtles
MozReview-Commit-ID: FPzyX9fxxx3
2016-11-16 06:30:57 +09:00
Hiroyuki Ikezoe
bfbe5cdf92 Bug 1318697 - Part 1: Skip composing styles for properties depending on cascade level. r=birtles
When we are composing style for the Animations level of the cascade,
if we have transitions-level animations, we *also* need to compose them if we
have animations-level animations that build on top of them using additive or
accumulative composite modes.

However, we should not build those transitions-level animations unless they will
be built on or overridden by a regular animations-level animation. Otherwise
we will end up with transitions-level animations in the animations-level and
while transitions-level will override the animations-level in the cascade,
once the transition finishes there will be nothing to remove the cached
animations-level animation rule.

MozReview-Commit-ID: LaRabzDSsO5
2016-11-29 15:04:17 +09:00
Cameron McCormack
3bd168f1a5 Bug 1319336 - Add some assertions and early returns to animation code to make stylo tests progress further. r=birtles
MozReview-Commit-ID: 14rghu0zYG1
2016-11-24 12:45:51 +08:00
Nathan Froyd
844a073368 Bug 1311068 - remove InitializerList.h; r=botond
We needed this polyfill for <initializer_list> when some of our C++
standard libraries did not support said header.  They all do now, so the
polyfill is redundant.
2016-10-19 00:33:14 -04:00
Hiroyuki Ikezoe
3f94f938ab Bug 1223658 - Part 5: Send animations to compositor even though it's in delay phase. r=birtles
To send animations to compositor in the delay phase we need to
modify Animation::IsPlaying returning true in the delay phase.

Note about background-position-in-delay.html:
After this patch, background-position animation also creates an active layer
from its delay phase.

Also note about test cases in test_animations_omta.html:
After landing bug 1279071, getOMTAStyle() returns the style value only
specified by animations, also in this patch we don't apply any opacity or
transform values in the delay phase, as a result we can't tell animating
value during delay phase on the compositor.

MozReview-Commit-ID: ILYKig3c08d
2016-10-14 19:14:12 +09:00
Hiroyuki Ikezoe
0d6fbdaea1 Bug 1278136 - Part 5: Create a stacking context for opacity/transform animations even if it's in delay phase and even if the property is overridden by !important rules. r=birtles
This patch introduces a new functions named HasEffectiveAnimationOfProperty.
This function checks that a given CSS property is overridden by !important
rules.
On the other hand, now KeyframeEffetReadOnly::HasAnimationOfProperty() does
just check that the effect has a given CSS property.  This is used to create
a stacking context because we should create a stacking context for opacity or
transform animations even if the property is overridden by !important rules.

Note about no-stacking-context-(opacity|transform)-removing-animation-in-delay.html
Before this patch we don't create any stacking context for animations overridden
by !important rules, but after this patch we do create a stacking context for
such animations.  As a result, in the test case we did paint a stacking context
in the first rAF callback and then in the second rAF callback we did clear the
painted stacking context. Unfortunately sometimes the second rAF callback was
called prior to clear the stacking context on the compositor because of
compositor delay. To avoid this situation, we have to wait for MozAfterPaint
instead of rAF callback.

MozReview-Commit-ID: AG1Y0IgoB3U
2016-10-13 16:54:25 +09:00
Hiroyuki Ikezoe
0ce2732c78 Bug 1307295 - Do not request restyle for animations on orphaned element. r=birtles
Also we skip to update the cascade and compose style for orphaned elements if
the animation reqeusted restyle but the target element has been removed from
document before a subsequent tick.

MozReview-Commit-ID: 3I6uyvuSPO5
2016-10-12 15:58:53 +09:00
Hiroyuki Ikezoe
293dcb19aa Bug 1304922 - Part 9: Early return from FindAnimationsForCompositor() if we have neither transitions and animations level effect for a given property. r=birtles
MozReview-Commit-ID: 8BZkKA2Jcs1
2016-10-05 14:53:58 +09:00
Hiroyuki Ikezoe
e0b5695bf6 Bug 1304922 - Part 7: Drop mWinsInCascade. r=birtles
MozReview-Commit-ID: 1q4glZenZNa
2016-10-05 14:48:05 +09:00
Hiroyuki Ikezoe
70a6a0cd0c Bug 1304922 - Part 6: Introduce mPropertiesWithImportantRules and mPropertiesForAnimationsLevel and use it to detect conditions that we need to update layers. r=birtles
This patch also makes composite order lowest to highest, as a result we also
need to replace mWinsInCascade checks with the the properties.
The mWinsInCascade membed itself will be removed in a subsequent patch.

Now we call RequestRestyle(Layer) respectively for transition and animation,
so a test case in test_restyles.html works as expected.

And now lower-priority animations are also sent to the compositor so this patch
fixed some tests in test_running_on_compositor.html and
test_animation_performance_warning.html

MozReview-Commit-ID: BchUsJbmatg
2016-10-05 14:42:56 +09:00