Commit Graph

166 Commits

Author SHA1 Message Date
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
BharatR123
f22cec0a62 Bug 1302637 - Animation::PostUpdate() calls KeyframeEffectReadonly::RequestRestyle() r=hiro
Also removed the function GetPresContext() in KeyframeEffectReadOnly.cpp
and KeyframeEffectReadOnly.h

MozReview-Commit-ID: AJCgxQ05yVQ
2017-03-14 22:03:22 +05:30
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
Michael Layzell
227013f950 Bug 1331434 - Part 9: Return after ErrorResult::Throw in /dom, r=ehsan
MozReview-Commit-ID: CWjx4L8LTr9
2017-03-07 19:06:48 -05:00
Mantaroh Yoshinaga
1831b55c4b 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
2017-02-10 12:32:44 +09: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
Cameron McCormack
5f9911da79 Bug 1328832 - Part 2: Rename mozFlushType to mozilla::FlushType and make it an enum class. r=bzbarsky
MozReview-Commit-ID: D3fIngSHSsl
2017-01-05 15:31:56 +08:00
Hiroyuki Ikezoe
dd61e4a549 Bug 1322291 - Part 2: Make sure that the base style is set even if additive or accumulates animations are in the delay phase. r=birtles
Before this patch we skipped KeyframeEffectReadOnly::ComposeStyle() for
animations that are not in effect.
After this patch we call KeyframeEffectReadOnly::ComposeStyle() even if the
animation is not in-effect state in order to prepare the base style for
properties that can be run on the compositor because the in-effect animation
will be sent to the compositor and might be composed onto the base style on the
compositor after the animation gets out of its delay phase.

MozReview-Commit-ID: FuAZv4jqVMJ
2016-12-21 13:52:21 +09:00
Mantaroh Yoshinaga
2381e8946b Bug 1264125 part 6 - Queue CSS related event when setting null target effect. r=birtles
MozReview-Commit-ID: 6KILkmNInbm
2016-12-20 16:03:29 +09:00
Mantaroh Yoshinaga
0adb32af09 Bug 1264125 part 5 - Call the queueing events when canceling transition via Style or Script. r=birtles
MozReview-Commit-ID: 5qWef4xCZXX
2016-12-20 16:03:29 +09:00
Brian Birtles
7a412e0389 Bug 1301305 - Add a member to track if an animation needs to be synchronized with geometric animations or not; r=hiro
Note that in this patch, the mSyncWithGeometricAnimations member is never set
to true since no one calls NotifyGeometricAnimationsStartingThisFrame yet.

MozReview-Commit-ID: GSTQmfkSdoy
2016-12-02 10:19:10 +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
Brian Birtles
994abf9736 Bug 1301305 - Add AnimationEffectReadOnly::AffectsGeometry() helper to identify effects that animate geometric properties; r=hiro
MozReview-Commit-ID: 7Q6wvm7ddxy
2016-12-02 10:04:08 +09:00
Mantaroh Yoshinaga
0249279370 Bug 1287983 part 6 - Integrate ElapsedTimeToTimeStamp function to the Animation class. r=birtles
MozReview-Commit-ID: 43AGaTYQoqn
2016-10-19 15:16:52 +09:00
Hiroyuki Ikezoe
c2817650ed Bug 1223658 - Part 2: Pass delay property to compositor. r=birtles
The check of negative elapsedDuration is basically no longer valid since
animation delay is not factored into start time any more.  But still we have
somtimes met negative elapsedDuration sice we use a previous vsync time stamp
for async animations to make the animations more sync.  This is not a problem
in most cases but makes two reftests intermitent failure because both of them
used steps(1, start), the steps(1, start) composed different results in the
before phase and in the active phase. To avoid this difference this patch
replace the steps(1, start) with steps(1, end).

Once we incorpolate playbackRate into GetCurrentOrPendingStartTime, we don't
need to call AnimationTimeToTimeStamp for deviding delay by playbackRate since
the time passed to AnimationTimeToTimeStamp does not contain delay any more.

MozReview-Commit-ID: IVE2IFfNgm0
2016-10-14 19:14:01 +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
Jan de Mooij
b402a91ead Bug 1302448 part 1 - Rename CycleCollectedJSRuntime to CycleCollectedJSContext. r=mccr8 2016-09-14 15:47:32 +02:00
Michael Layzell
f2f13378b5 Bug 1018486 - Part 1: Changes in dom/, r=baku
MozReview-Commit-ID: 4tCUM4KRe81
2016-09-07 10:50:35 -04:00
Boris Chiou
1110beab2b Bug 1298742 - Part 2: Make sure UpdateRelevance() is called before NotifyAnimationTimingUpdated. r=hiro
MozReview-Commit-ID: Ki0Aqhgl1dO
2016-08-29 16:22:46 +08:00
Yusuke Endho
1067f641ca Bug 1297000 - Modify comparison of zero TimeDuration to use TimeDuration object rather than converting to milliseconds; r=birtles
MozReview-Commit-ID: DIccqtDb91u
2016-08-27 16:53:33 +09:00
Boris Chiou
a04aa27237 Bug 1049975 - Part 11: Fix mutation observer when setting effects. r=birtles
MozReview-Commit-ID: 3td2343LFxX
2016-08-16 20:00:35 +08:00
Boris Chiou
b5fe9f732c Bug 1049975 - Part 9: Implement writable Animation effect. r=birtles
MozReview-Commit-ID: 1dwHpcYJto3
2016-07-13 18:44:19 +08:00
Boris Chiou
5a4e23303f Bug 1049975 - Part 8: Use AnimationEffectReadOnly as the argument type of Animation constructor. r=birtles,smaug
MozReview-Commit-ID: 2qoZQuQAweF
2016-08-16 16:48:55 +08:00
Boris Chiou
ac350393aa Bug 1049975 - Part 7: Add SetEffectNoUpdate. r=birtles
Use SetEffectNoUpdate() for the procedure of setting effect, and let SetEffect()
also calls PostUpdate(), so we can use SetEffectNoUpdate() if we don't want to
call RequestRestyle(RestyleType::layer).

MozReview-Commit-ID: CaWA34UebpH
2016-08-24 14:36:14 +08:00
Boris Chiou
e0121643a0 Bug 1049975 - Part 6: Factor out the procedure of resetting an animation's pending tasks. r=birtles
Both Cancel() and SetEffect() need the procedure of "Reset an animation's
pending tasks", so factor it out and then we can reuse it.

MozReview-Commit-ID: C7Q5kF9aPrV
2016-07-15 17:17:25 +08:00
Boris Chiou
1ef0babead Bug 1049975 - Part 4: Merge two Animation::SetEffect()s. r=birtles
This is a pre-patch for part 5, which is trying to make our code closer to the
spec. Some methods in KeyframeEffectReadOnly belong to AnimationEffectReadOnly,
so first, use AsKeyframeEffect() to access those keyframe-related methods, and
then add virtual methods for timing-related methods to AnimationEffectReadOnly.

MozReview-Commit-ID: 1srA1f8JYeN
2016-07-25 16:56:34 +08:00
Boris Chiou
3256990eb3 Bug 1049975 - Part 1: Support null effect. r=birtles
MozReview-Commit-ID: 7ougqvbIVuD
2016-07-12 11:42:49 +08:00
Brian Birtles
2ae3ed9fc9 Bug 1295842 part 2 - Don't overwrite the hold time when the previous current time is less than zero; r=hiro
This implements the spec change here: ee1577c959

MozReview-Commit-ID: 8XKaocLbrmL
2016-08-19 11:35:16 +09:00
Jonathan Chan
fafebb61e5 Bug 1293739 - Part 2: Rename nsCSSPropertySet to nsCSSPropertyIDSet. r=dholbert
The previous patch in this series renamed nsCSSProperty to nsCSSPropertyID.
This patch renames nsCSSPropertySet to nsCSSPropertyIDSet accordingly.

This patch is generated by the following commands (note: if you're running
using OS X's sed, which accepts slightly different flags, you'll have to
specify an actual backup suffix in -i, or use gsed from Homebrew):

  hg stat -c \
  | cut -c 3-  \
  | tr '\n' '\0' \
  | xargs -0 -P 8 gsed --follow-symlinks 's/\bnsCSSPropertySet\b/nsCSSPropertyIDSet/g' -i''

Then:

  hg mv layout/style/nsCSSPropertySet.h layout/style/nsCSSPropertyIDSet.h

... and finally, manually renaming nsCSSPropertySet in the include guard in
nsCSSPropertyIDSet.h.

MozReview-Commit-ID: ASUNs7FWbKP
2016-08-09 16:28:21 -07:00
Nathan Froyd
68a263d7f1 Bug 1283616 - part 2 - micro-optimize inserting microtask runnables into the queue; r=khuey
We can save an AddRef/Release pair by passing in the reference to the queue.
2016-07-05 18:49:06 -04:00
Mantaroh Yoshinaga
634872ed0f Bug 1178662 part 7 - Remove relationship of timeline and animation when setting new timeline. r=birtles
If we run following code, content process will crash.
------
anim1.timeline = timeline;
anim2.timeline = document.timeline;
anim2.timeline = timeline;
------

The AnimationTimeline has LinkedList variant. (called mAnimationOrder) And Animation is sub-class of LinkedListElement.
We will create the relationship of AnimationTimeline and Animation when calling the AnimationTimeline::NotifyAnimationUpdated. However we didn't remove these relation ship when setting new timeline.
So we should remove these relationship when setting new timeline object.

MozReview-Commit-ID: RDyranduTA
2016-05-31 09:42:38 +09:00
Mantaroh Yoshinaga
0f31746998 Bug 1178662 part 4 - Implement the setting timeline procedure. r=birtles
This is implementation of 'Setting the timeline of an animation'.[1]

[1] https://w3c.github.io/web-animations/#setting-the-timeline

MozReview-Commit-ID: A5YMXhkxHjr
2016-05-31 09:42:37 +09:00
Mantaroh Yoshinaga
4318ab3b7b Bug 1178662 part 3 - Separate SetTimeline function in order to call from style. r=birtles
MozReview-Commit-ID: 9KbsbPuAMW7
2016-05-31 09:42:37 +09:00
Mantaroh Yoshinaga
97b5275049 Bug 1178662 part 2 - Rename *NoUpdate function in Animation. r=birtles
MozReview-Commit-ID: 6P8pze62IYq
2016-05-31 09:42:37 +09:00
Daisuke Akatsuka
ce327bb9f0 Bug 1272211 - Part 1: Make timeline argument of Animation constructor default to the document timeline of the active document. r=birtles, r=smaug
MozReview-Commit-ID: KUsQF5bryg8
2016-05-30 09:01:11 +09:00
Mantaroh Yoshinaga
3d0258c958 Bug 1096776 part 2 - Modify animation in order to support null timeline. r=birtles
MozReview-Commit-ID: 5iKUtNuqKeX
2016-05-23 08:23:14 +09:00
Mantaroh Yoshinaga
0a1f58bf84 Bug 1271515 - Remove unnecessary #include from Animation.cpp. r=birtles
MozReview-Commit-ID: GMPuMboBUJu
2016-05-10 12:24:35 +09:00
Kyle Huey
b972c94d0f Bug 1268313: Part 7 - Move NS_NewRunnableMethod and friends to mozilla::NewRunnableMethod. r=froydnj 2016-05-05 01:45:00 -07:00
Carsten "Tomcat" Book
aadd508ffe Backed out changeset 85ce8cb0639a (bug 1268313) 2016-04-29 14:21:16 +02:00
Kyle Huey
e62a0823c9 Bug 1268313: Part 7 - Move NS_NewRunnableMethod and friends to mozilla::NewRunnableMethod. r=froydnj 2016-04-28 14:08:25 -07:00
Boris Chiou
4ada7b9d4f Bug 1067769 - Part 6: Rename NonOwningAnimationTarget.h to AnimationTarget.h. r=birtles
MozReview-Commit-ID: ErAaPe6ttjc
2016-04-28 23:22:43 +08:00
Brian Birtles
f53683eb9c Bug 1267893 part 4 - Make setting the start time set 'did seek' to true; r=hiro
Based on changes to the spec: 8bf2b102de

MozReview-Commit-ID: GXllrLuyh8
2016-04-27 11:34:05 +09:00
Brian Birtles
2436b2898f Bug 1245000 part 4 - Enable the Animation constructor when Element.animate is enabled; r=bz
This also makes the constructor slightly more presentable with regards to its
current limitations.
2016-04-22 13:41:59 +09:00
Hiroyuki Ikezoe
7f71f434f4 Bug 1263063 - Part 6: Use TimingParams::EndTime() instead of re-calculation ComputedTiming each time. r=dholbert
MozReview-Commit-ID: 9pT06LXoU4V
2016-04-14 19:39:44 +09:00
Eddy Bruel
e5db48a881 Bug 1229769 - We should be able to use DOM promises in the worker debugger;r=khuey 2016-03-24 16:12:00 +01:00
Boris Chiou
1413622bf7 Bug 1249219 - Part 4: Use NonOwningAnimationTarget as the returned value of some animation target getters. r=birtles
Use NonOwningAnimationTarget as the returned type of
1. KeyframeEffectReadOnly::GetTarget()
2. nsNodeUtils::GetTargetForAnimation(...)
2016-03-21 16:49:50 +08:00
Brian Birtles
afd2c8a361 Bug 1249212 part 7 - Calculate the endTime in GetComputedTimingAt; r=boris
Currently endTime is calculated when getComputedTiming() is called. As a
result, the value returned there doesn't necessarily reflect what we are using
in the model. It would be more simple, consistent and useful if we simply
calculate this as part of GetComputedTimingAt and use it both internally and in
the result to getComputedTiming().
2016-02-19 08:37:32 +09:00
Boris Chiou
32cdf253b7 Bug 1244049 - Part 2: Replace nsCSSPseudoElements::Type with CSSPseudoElementType. r=dbaron
Also, try to use forward declaraions for CSSPseudoElementType;
2016-02-17 21:37:00 +01:00
Brian Birtles
c7c02e7d51 Bug 1240228 - Don't update an effect's timing when tweaking its animation's hold time; r=heycam
In some circumstances when composing style, we tweak the time of the animation
before telling the effect to compose style. This is to avoid visual flicker in
certain situations where the main thread progress is being synchronized with an
animation running on the compositor.

In the past, effects would store their latest sample time locally so when
tweaking the animation time, we would need to call UpdateEffect() after tweaking
the time, and then again after restoring it as otherwise the style composed by
the effect would not reflect the adjusted time.

Now, however, effect's always query their animation for the time so this is no
longer necessary. Furthermore, the actions triggered by UpdateEffect are not
desirable in this case because they can, amongst other things, cause the
associated EffectSet to be destroyed and recreated.

Specifically, Animation::UpdateEffect() calls
KeyframeEffectReadOnly::NotifyAnimationTimingUpdated() which:

  * Calls UpdateTargetRegistration which can trigger EffectSet
    destruction/creation which is undesirable in this case because we intend to
    restore whatever changes we make to the Animation's state and deleting and
    recreating the EffectSet will cause any pointers to it to dangle.

  * Cause us to possibly reset the "is running on compositor" status.
    This too is undesirable since we intend to restore the state of the
    Animation immediately after tweaking the hold time so we don't want to
    act as if any state has changed.

  * Similarly for marking the cascade as possibly needing an update or
    requesting a restyle.

In summary, all the actions performed by NotifyAnimationTimingUpdated are
unnecessary and undesirable in this situation where we are temporarily tweaking
an Animation's current time only to restore it immediately afterwards since the
actions are all involved with recognizing actual changes in state.
2016-01-19 08:05:08 +09:00