Commit graph

203 commits

Author SHA1 Message Date
Hiroyuki Ikezoe
ee457cf7c3 Bug 1350754 - Convert pseudo nsIAtom to CSSPseudoElementType in Gecko_UpdateAnimations(). r=heycam
MozReview-Commit-ID: 38ZyRyxB73z

--HG--
extra : rebase_source : 01c971c2db8779f92d5845fa09047cb7eae43c7d
2017-03-27 19:43:13 +09:00
Hiroyuki Ikezoe
de29155c66 Bug 1350754 - Use ServoComputedValuesWithParent for nsAnimationManager::UpdateAnimations(). r=birtles
MozReview-Commit-ID: GkLoACgqVON

--HG--
extra : rebase_source : 1f47c5d5a73d4b343c677980af299e068ebebd84
2017-03-27 19:43:09 +09:00
Hiroyuki Ikezoe
d28fbf09bc Bug 1344603 - Make Stop{Animations|Transitions}ForElement as a member function of CommonAnimationManager. r=boris
MozReview-Commit-ID: LSSpWYjoPn9

--HG--
extra : rebase_source : c87ec78281b37f1cb32e38969c22fddc228d28f8
2017-03-06 13:19:09 +09:00
Hiroyuki Ikezoe
b6b41abea1 Bug 1340322 - Part 12: Add another variant of nsAnimationManager::UpdateAnimations for stylo. r=birtles
This function updates CSS Animations with servo's computed values.

In bug 1341985, this function will be called with null servo's computed values
in the case where the target element is in display:none subtree.

MozReview-Commit-ID: GzOYy57hYho

--HG--
extra : rebase_source : 5dd10dc6181222ce2a531fc6e837102d7694bf40
2017-03-06 09:54:06 +09:00
Hiroyuki Ikezoe
fccd7b4c32 Bug 1340322 - Part 9: Templatize functions that will be used with servo's computed values. r=birtles
MozReview-Commit-ID: 8d5wHBhF4y9

--HG--
extra : rebase_source : 767bd65e2e57e6e991c0725bb6b86a7cb4f427dc
2017-03-06 09:51:16 +09:00
Hiroyuki Ikezoe
d0ed1e91e7 Bug 1340322 - Part 8: Split off some processes that will be used for servo's computed values in UpdateAnimations(). r=birtles
MozReview-Commit-ID: LkWqhGsMCPf

--HG--
extra : rebase_source : 1b492da4269e92bd09fe392b85b5a91758119b0e
2017-03-06 09:50:09 +09:00
Hiroyuki Ikezoe
70c0e758be Bug 1340322 - Part 3: Make BuildAnimations static function. r=birtles
This function will be also a template function.

MozReview-Commit-ID: 4SbzEw8YzIZ

--HG--
extra : rebase_source : 24be2923cddf3aff82b84fb7d3c757f83fb42716
2017-03-06 09:48:36 +09:00
Hiroyuki Ikezoe
924ac7a4ab Bug 1340322 - Part 2: Use NonOwningAnimationTarget instead of Element and aStyleContext()->GetPseudoType(). r=birtles
MozReview-Commit-ID: JOBBGUs8kJd

--HG--
extra : rebase_source : bf94f9abf25805a25db1961371babbf70cb76a8a
2017-03-06 09:47:22 +09:00
Mantaroh Yoshinaga
f0550caaae Bug 1302648 part 5 - Queue animationcancel when animation status is idle. r=birtles
MozReview-Commit-ID: DRjWboQwR0A

--HG--
extra : rebase_source : 17a92668519bdf7a4d7c58c97bd8f23b889767a7
2017-02-10 12:32:44 +09:00
Mantaroh Yoshinaga
fa7dee3362 Bug 1302648 part 4 - Call UpdateTiming() after removing the animation from the timeline. r=birtles
We will need to remove animation from timeline before calling Animation::UpdateTiming() in order to fire the cancel event.
In bug 1264125, we request one more tick after calling Animation::Cancel(), however we won't need to call this request if we apply this changeset.

MozReview-Commit-ID: h0dxUdtgkl

--HG--
extra : rebase_source : ac96209b28fdc781bf3787d348f2ae989e695640
2017-02-10 12:32:44 +09:00
Mantaroh Yoshinaga
2658cfcde7 Bug 1302648 part 3 - Change order of releasing owning element when cancel animation. r=birtles
The first step of Animation::Cancel(), it will release owning element.
However we will use owning element for queueing the CSS-Animations event, So we will need to release owning element after calling Animation::Cancel() in order to fire the animationcancel event.

MozReview-Commit-ID: ATqkIGkqREx

--HG--
extra : rebase_source : 9b04dc59349d1203d5f8604516fcc6765cf3d5a7
2017-02-10 12:32:44 +09:00
Mantaroh Yoshinaga
3ad37c274f Bug 1308099 part 1 - Rename AnimationPhase::Null to AnimationPhase::Idle. r=hiro
In Web Animations specification, if the animation effect is in none of the any phase, it define as 'Idle' phase. [1]
But, in the gecko, it defined as 'Null' phase.

So we will need to use 'Idle' phase for consistency.

[1] https://w3c.github.io/web-animations/#idle-phase

MozReview-Commit-ID: FlPpYOqdM4X

--HG--
extra : rebase_source : ec294c84f9c77a42d6128e3d43380b80fc130513
2017-01-25 15:43:57 +09:00
Mantaroh Yoshinaga
70e5e7e4ef Bug 1202333 part 2 - Update the CSSTransition::QueueEvents to specification. r=birtles
MozReview-Commit-ID: BxkZ359g7JR

--HG--
extra : rebase_source : b832f1e85ae022291bf3999cd3d49dfe2ba6a6a0
2016-12-20 15:57:20 +09:00
Mantaroh Yoshinaga
cf59836bae Bug 1287983 part 6 - Integrate ElapsedTimeToTimeStamp function to the Animation class. r=birtles
MozReview-Commit-ID: 43AGaTYQoqn

--HG--
extra : rebase_source : 728380db2c6f3e035d05b6c746d2c0f08a1369b7
2016-10-19 15:16:52 +09:00
Hiroyuki Ikezoe
c0a4f2e768 Bug 1304922 - Part 3: Request restyle for layer when CSS animation's index is changed. r=birtles
In the case when the animation index is changed, we have to update the layer
because the index affects composite order.
Currently UpdateCascadeResult() does it but the function will check
only which cascade level wins in the cascade level and request restyle
only when the winner is changed, e.g. when a CSS animation overrides a
CSS transition, etc. So we should call request restyle respectively when the index
is changed inside each Animation class.

MozReview-Commit-ID: KcEFyBpALDA

--HG--
extra : rebase_source : c2d0b49b5d383021518e66ff349a3302d552ca96
2016-10-05 14:26:29 +09:00
Hiroyuki Ikezoe
af7c75acf9 Bug 1300701 - Notify changedAnimations to mutation observer when priority of CSS animations on an element is changed. r=birtles
MozReview-Commit-ID: GXv4c2DiRij

--HG--
extra : rebase_source : 770933f3a0832dfb05417c39697716b30185adba
2016-09-12 15:04:33 +09:00
Tetsuharu OHZEKI
34d28e65df Bug 1259676 - part3: rename from 'InternalAnimationEvent.pseudoElement' to 'InternalAnimationEvent.mPseudoElement'. r=masayuki
MozReview-Commit-ID: GBJtFdobipj

--HG--
extra : rebase_source : 528abb3d04e52547e6c4e13ea396e080406008b1
2016-03-26 13:37:20 +09:00
Tetsuharu OHZEKI
3aeb31cf0f Bug 1259676 - part2: rename from 'InternalAnimationEvent.elapsedTime' to 'InternalAnimationEvent.mElapsedTime'. r=masayuki
MozReview-Commit-ID: 4n5YQwxLeAx

--HG--
extra : rebase_source : 6c29d53092c7d1f84ef2ad38f44380c7579df270
2016-03-26 13:37:19 +09:00
Tetsuharu OHZEKI
693106452d Bug 1259676 - part1: rename from 'InternalAnimationEvent.animationName' to 'InternalAnimationEvent.mAnimationName'. r=masayuki
MozReview-Commit-ID: DK5Q477WoXu

--HG--
extra : rebase_source : 59f061c7835b6e2359ca937a06cf3890871a70ea
2016-03-26 13:37:19 +09:00
Brian Birtles
065446fdcd Bug 1239945 part 7 - Move GetAnimationCollection to AnimationCollection; r=dholbert
By moving GetAnimationCollection to AnimationCollection itself, we can remove
a bunch of virtual methods on the animation managers, simplify call sites,
and provide better type safety by ensuring a correspondence between element
property names and concrete animation types.

One change in behavior, however, is that in doing this we can no longer
add any newly-created AnimationCollection to the corresponding manager's linked
list of collections inside GetAnimationCollection. Instead we take a bool
outparam to indicate if a new collection was created and leave managing the
linked list to the manager. This is just a temporary measure, however, since
by the end of this patch series will will eliminate this linked list altogether
along with this flag.

MozReview-Commit-ID: 1jsc4QcmVDg
2016-03-09 12:55:39 +09:00
Brian Birtles
dd4f27f03e Bug 1239945 part 6 - Templatize AnimationCollection based on the concrete type of Animation stored; r=dholbert
This patch templatizes the type of Animation stored in an AnimationCollection.
This allows us to remove a number AsCSSAnimation() calls in nsAnimationManager.

This patch also removes the AnimationPtrArray typedef. In its place we
introduce OwningCSSAnimationPtrArray and OwningCSSTransitionPtrArray but we
don't use these as widely. There was some comment previously that the typedefs
in animation code make it hard to read, particularly when these typedefs don't
make it clear if the data type is an owning reference or not.

In doing this we need to templatize CommonAnimationManager as well and move the
implementation of its (few) methods to the header file. We may be able to
remove the need for templatizing CommonAnimationManager later in this patch
series depending on how we ultimately decide to handle the lifetime of
AnimationCollection objects.

CommonAnimationManager::GetAnimationCollection is a bit messy but this will be
significantly tidied up in subsequent patches in this series.

MozReview-Commit-ID: 3ywatY53pRR
2016-03-09 12:55:39 +09:00
Brian Birtles
d06f85599d Bug 1239945 part 1 - Drop a number of animation manager/collection-related methods that are unused (and in some cases undefined); r=dholbert 2016-02-24 13:41:16 +09:00
Hiroyuki Ikezoe
07c3358f3c Bug 1242872 - Part 7: Eliminate creation of temporary animations. r=dbaron
This patch removes a loop for the new temporary animation collection in
CheckAnimationRule.  The old collection is passed to CSSAnimationBuilder,
and CSSAnimationBuilder removes each animation which matches to new animation
name in it.
:birtles took care of storing animations in AnimationCollection in reverse order.
Thanks so much!

MozReview-Commit-ID: KmlnjFptKdv
2016-02-19 14:10:43 +09:00
Hiroyuki Ikezoe
67a3778e18 Bug 1242872 - Part 2: Set timeline in CSSAnimationBuilder::Build. r=dbaron
MozReview-Commit-ID: 6bisME1VK0d
2016-02-19 09:16:15 +09:00
Hiroyuki Ikezoe
ed1cf18658 Bug 1242872 - Part 1: Introduce CSSAnimationBuilder to factor a bunch of stuff in BuildAnimations and CheckAnimationRule out. r=dbaron
MozReview-Commit-ID: 7921De3IVA6
2016-02-19 09:16:15 +09:00
Boris Chiou
e436478f26 Bug 1244049 - Part 2: Replace nsCSSPseudoElements::Type with CSSPseudoElementType. r=dbaron
Also, try to use forward declaraions for CSSPseudoElementType;

--HG--
extra : rebase_source : c00eb9753e8f618a33aa711538ac45c0132b353c
2016-02-17 21:37:00 +01:00
Brian Birtles
c3fe45107c Bug 1246046 part 1 - Get the animation rule in nsStyleSet::GetContext even if there are no CSS animations; r=heycam
Without this patch, when we have script-generated animations but *no* CSS
animations, nsStyleSet::GetContext will not use the updated animation rule.
2016-02-15 16:08:33 +09:00
Carsten "Tomcat" Book
106a8ed3ab Bug 1244250 - r=mats 2016-02-10 14:17:05 +01:00
Brian Birtles
6fb8992111 Bug 1235112 - Move animation style rule processors to EffectCompositor; r=heycam 2016-01-15 15:15:47 +09:00
Boris Chiou
deee95a0d8 Bug 1214536 - Part 7: Rename AnimationTiming as TimingParams. r=birtles, r=smaug
1. struct AnimationTiming -> struct TimingParams
2. AnimationEffectReadOnly::TimingAsObject() -> AnimationEffectReadOnly::Timing()
3. KeyframeEffectReadOnly::Timing() -> KeyframeEffectReadOnly::SpecifiedTiming()
2016-01-13 18:41:00 +01:00
Boris Chiou
fa79443f12 Bug 1214536 - Part 5: Add AnimationEffectTimingReadOnly interface. r=birtles, r=smaug
1. Add AnimationEffectTimingReadOnly.webidl.
2. Add AnimationEffectTimingReadOnly cpp files.
3. Use AnimationEffectTimingReadOnly as KeyframeEffectReadOnly::mTiming.

--HG--
extra : rebase_source : 0e9c112b70ae56f2bcdf162374388857518fc124
extra : amend_source : 0aebf0e9daac77542d913e4ad6a07c75e21a93b5
2016-01-13 18:37:00 +01:00
Nigel Babu
0ce7a5f39e Backed out 5 changesets (bug 1235112, bug 1237467) for nsRuleNode::Transition crashes
Backed out changeset ac21baf87df2 (bug 1235112)
Backed out changeset c47a6e0a6d95 (bug 1237467)
Backed out changeset 7609ca218902 (bug 1237467)
Backed out changeset d63ca2677bd5 (bug 1237467)
Backed out changeset 5a3d7e16b1e0 (bug 1237467)

--HG--
extra : commitid : LONozKsGtli
2016-01-14 11:35:06 +05:30
Brian Birtles
02e4c93ce9 Bug 1234095 - Rework sorting to handle to script-generated animations; r=heycam 2016-01-14 10:24:24 +09:00
Brian Birtles
32bf08d255 Bug 1235112 - Move animation style rule processors to EffectCompositor; r=heycam 2016-01-14 08:02:39 +09:00
Brian Birtles
8cc58f3707 Bug 1238660 part 2 - Preserve "wins in cascade" state when updating animations; r=hiro
When updating animations, we shouldn't unnecessarily clobber the "wins in
cascade" state of their properties since this can lead to unnecessary restyles
when we then decide we need to update the cascade.
2016-01-13 13:38:16 +09:00
Brian Birtles
2a70c0a477 Bug 1232577 part 12 - Move the remainder of RequestRestyle from AnimationCollection to EffectCompositor; r=heycam
This also allows us to remove all references to AnimationCollection and the
animation managers from Animation.
2016-01-13 07:54:54 +09:00
Brian Birtles
741d976ea1 Bug 1228229 part 10 - Remove no-longer-used cascade functions; r=dbaron
--HG--
extra : rebase_source : 3cdff84fefbc24796abf2d765f6f40062dd7941f
2016-01-06 11:04:05 +09:00
Hiroyuki Ikezoe
29ee5a579b Bug 1219543 - Part 2: Avoid the period that mIsRunningOnCompositor is false between restyling and building display list. r=bbirtles
Without this fix, mIsRunningOnCompositor will be unpredictable in
MutationObserver callbacks.

For example:

 mIsRunningOnCompositor will be false if the micro task for
 the MutationObserver is processed before building display list.

 mIsRunningOnCompositor will be true if there is no room to process
 the micro task before building display list.
2015-12-20 14:17:00 +01:00
Nathan Froyd
01583602a9 Bug 1207245 - part 6 - rename nsRefPtr<T> to RefPtr<T>; r=ehsan; a=Tomcat
The bulk of this commit was generated with a script, executed at the top
level of a typical source code checkout.  The only non-machine-generated
part was modifying MFBT's moz.build to reflect the new naming.

CLOSED TREE makes big refactorings like this a piece of cake.

 # The main substitution.
find . -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
    xargs perl -p -i -e '
 s/nsRefPtr\.h/RefPtr\.h/g; # handle includes
 s/nsRefPtr ?</RefPtr</g;   # handle declarations and variables
'

 # Handle a special friend declaration in gfx/layers/AtomicRefCountedWithFinalize.h.
perl -p -i -e 's/::nsRefPtr;/::RefPtr;/' gfx/layers/AtomicRefCountedWithFinalize.h

 # Handle nsRefPtr.h itself, a couple places that define constructors
 # from nsRefPtr, and code generators specially.  We do this here, rather
 # than indiscriminantly s/nsRefPtr/RefPtr/, because that would rename
 # things like nsRefPtrHashtable.
perl -p -i -e 's/nsRefPtr/RefPtr/g' \
     mfbt/nsRefPtr.h \
     xpcom/glue/nsCOMPtr.h \
     xpcom/base/OwningNonNull.h \
     ipc/ipdl/ipdl/lower.py \
     ipc/ipdl/ipdl/builtin.py \
     dom/bindings/Codegen.py \
     python/lldbutils/lldbutils/utils.py

 # In our indiscriminate substitution above, we renamed
 # nsRefPtrGetterAddRefs, the class behind getter_AddRefs.  Fix that up.
find . -name '*.cpp' -o -name '*.h' -o -name '*.idl' | \
    xargs perl -p -i -e 's/nsRefPtrGetterAddRefs/RefPtrGetterAddRefs/g'

if [ -d .git ]; then
    git mv mfbt/nsRefPtr.h mfbt/RefPtr.h
else
    hg mv mfbt/nsRefPtr.h mfbt/RefPtr.h
fi

--HG--
rename : mfbt/nsRefPtr.h => mfbt/RefPtr.h
2015-10-18 01:24:48 -04:00
Brian Birtles
0ea5e5c7c8 Bug 1208938 part 2 - Remove Animation::HasEndEventToQueue; r=heycam 2015-10-07 14:30:28 +09:00
Brian Birtles
60a5523a6a Bug 1195180 part 10 - Remove refresh driver observing machinery from CommonAnimationManager; r=heycam
This patch removes a lot of code involved with observing the refresh driver from
nsAnimationManager and nsTransitionManager now that we no longer need to do
this.

The one piece it does not remove, however, is
AnimationCollection::mNeedsRefreshes since this flag actually serves a secondary
purpose in telling us when the animation style has not changed and so does
not need to be updated. A subsequent patch in this series will rename this
and update the code that makes use of it.
2015-09-28 12:38:41 +09:00
Brian Birtles
183dc5eeee Bug 1183461 part 7 - Add EventInfoComparator and sort events; r=heycam
This patch also reworks the dispatch of events in nsRefreshDriver. Previously
the refresh driver would dispatch the transition events for all subdocuments
then the animation events. This arrangement is complicated and not obviously
necessary. This patch simplifies this arrangement by dispatching transition
events and animation events for each document before proceeding to
subdocuments.

--HG--
extra : rebase_source : ed9147de4a4b5f36e444bdab82e45ee2143e5be8
2015-09-15 14:05:49 +09:00
Brian Birtles
bbfbefa427 Bug 1183461 part 6 - Store the generating animation on the event; r=heycam
In order to sort between events that have the same timestamp we use the
sort order of the corresponding animations so we need to store a pointer
to the animation along with the event.

--HG--
extra : rebase_source : 2767157135abd5a094d856410cd9c70e46a33b68
2015-09-15 14:05:44 +09:00
Brian Birtles
7f47d861c6 Bug 1183461 part 5 - Store event TimeStamp along with event info; r=heycam
--HG--
extra : rebase_source : b0c580b684a49744c435bee26cca062012c87ef5
2015-09-15 14:04:53 +09:00
Brian Birtles
8874d11c24 Bug 1183461 part 4 - Add CSSAnimation::ElapsedTimeToTimeStamp; r=heycam
The elapsedTime member reported on AnimationEvents measures the time from
the *end* of the delay phase (i.e. the beginning of the active interval) to
when the event occurred. However, the AnimationTimeToTimeStamp method
introduced in the previous patch expects a time relative to the animation's
start time (i.e. the *start* of the delay phase). This patch adds a method
that performs the necessary conversion from an elapsedTime to an animation
time before calling AnimationTimeToTimeStamp. It also provides extra handling
for cases such as when the animation's start time has not yet been resolved or
when animation effect has disappeared.

--HG--
extra : rebase_source : 594f3f12bab3febe592d09b57be72b2ec09b47cf
2015-09-15 14:04:08 +09:00
Brian Birtles
ccaa539dfb Bug 1183461 part 2 - Reorder the parameters to EventInfo constructors; r=heycam
This patch lines up the parameters of AnimationEventInfo and
TransitionEventInfo constructors so that they are more logical and consistent.
Specifically, it groups the element and pseudo type together since they
form a logical pair denoting the event target. For AnimationEventInfo this
patch also places the type of event before the common event parameters since
the event type seems to be more significant.

This patch also performs some miscelleaneous housekeeping: removing some
unnecessary namespace prefixes, whitespace fixes, and making
TransitionEventInfo use the same concrete type to store the target element
as AnimationEventInfo (dom::Element instead of nsIContent).

--HG--
extra : rebase_source : ce6935f74f31dffadce4d0e7d4fa8859ec213740
2015-09-15 14:04:05 +09:00
Brian Birtles
d135283802 Bug 1183461 part 1 - Move InitialAdvance to CSSAnimation; r=heycam
Currently we define a helper method, InitialAdvance, on KeyframeEffectReadOnly.
However, this method is only used for filling out the elapsedTime member of
AnimationEvents (which are generated by CSS animations). This patch moves this
method to CSSAnimation since it is unneeded for other types of Animations.

--HG--
extra : rebase_source : 9ab3b81a8272c004aabf26fea557c9a2f5d76caf
2015-09-15 14:03:24 +09:00
Brian Birtles
1bb17c4634 Bug 1203009 part 5 - Remove IsUsingCustomCompositeOrder; r=heycam 2015-09-15 13:32:12 +09:00
Brian Birtles
25e9bf79fe Bug 1203009 part 4 - Implement new composite ordering; r=heycam 2015-09-15 11:20:56 +09:00
Brian Birtles
96b49a1126 Bug 1203009 part 3 - Add mNeedsNewAnimationIndexWhenRun flag to CSSAnimation and CSSTransition; r=heycam
In the new composite order arrangement CSSAnimations and CSSTransition have the
following life-cycle:

1. Animation created by markup
   => composite order determined by markup
      (e.g. CSS animations use tree order and animation-name order;
            CSS transitions use transition trigger order)

2. Animation cancelled by changing markup
   => composite order is undefined

3. Animation is played again using the API
   => composite order is defined by when the animation is first played.
      Another way of saying this is that, at the point when the animation is
      played, it is appended to the "global animation list".

4. Animation is subsequently cancelled / played => no change

We need a way to know when we are going from 2 to 3. It would seem like we
could do that by setting mAnimationIndex to some sentinel value while it is
in 2. However, even when in 2, although the spec doesn't define the composite
order animations at this point (from an API point of view you can't access these
objects and they don't contribute to style so it doesn't need to be defined), we
sometimes will need to establish an order.

This can happen, for example, when an animation queues events and then is later
cancelled before the events are dispatched. Because we sort events based on
their associated animation at the time of dispatch (for performance reasons) we
need a deterministic order for these idle animations.

We do that (in a subsequent patch in this series) by setting mAnimationIndex
when we transition from 1 to 2. That is, these idle animations are effectively
ordered by when they became idle (which always happens in a deterministic
fashion).
2015-09-15 11:20:33 +09:00