Commit Graph

33 Commits

Author SHA1 Message Date
Hiroyuki Ikezoe
d1664a42bd Bug 1473172 - Call MostRecentRefreshTimeUpdated when we start observering the refresh driver for DocumentTimeline. r=birtles
There seem race conditions that we do a paint process when we started observing
the refresh driver but the first tick hasn't happened yet.

MozReview-Commit-ID: KRP8WR644q1
2018-07-05 10:44:42 +09:00
Hiroyuki Ikezoe
733662687a Bug 1472076 - Update animations when the refresh driver's time changed due to the active timer changes. r=birtles
Normally the refresh driver's time changes in nsRefreshDriver::Tick, and then
DocumentTimeline::WillRefresh is called for the change.  But nsRefreshDriver
sometimes updates its own time when their timer changes to the active one.
This patch lets DocumentTimeline update animations in response to the refresh
driver's time updates.  And thus this patch prevents animation state and
relevant stuff inconsistencies such as an animation has been finished without
proper processes, e.g. without invalidating frame for the animation.

MozReview-Commit-ID: 42p5BWITQN0
2018-07-03 10:59:55 +09:00
Jeff Gilbert
70a22b2878 Bug 1470325 - s/FooBinding/Foo_Binding/g - r=qdot
MozReview-Commit-ID: JtTcLL5OPF0
2018-06-26 17:05:01 -07:00
Olli Pettay
c6028c1403 bug 1457867, store DOMEventTargetHelper objects in global object as a linked list, r=bkelly 2018-05-04 19:25:05 +03:00
Olli Pettay
8d2a7b0ad2 Bug 1193394 - Part 1: Microtasks and promises scheduling. r=bevis 2017-11-17 11:01:27 +08:00
Csoregi Natalia
a7fb1721fe Backed out 7 changesets (bug 1193394) for browser-chrome failures on browser_ext_popup_background.js. CLOSED TREE
Backed out changeset 9683f24ff8ec (bug 1193394)
Backed out changeset 0e7140a7c841 (bug 1193394)
Backed out changeset a0e26f6b2784 (bug 1193394)
Backed out changeset 29e1fceaf48d (bug 1193394)
Backed out changeset b8632bbbd273 (bug 1193394)
Backed out changeset a54ef2d8f896 (bug 1193394)
Backed out changeset 55c94c05c57f (bug 1193394)
2018-03-01 16:29:02 +02:00
Olli Pettay
6a1afb366a Bug 1193394 - Part 1: Microtasks and promises scheduling. r=bevis 2017-11-17 11:01:27 +08:00
Hiroyuki Ikezoe
b1da8534e8 Bug 1417354 - Introduce nsIDocument::GetPresContext(). r=smaug
It would be convenient to get nsPresContext from nsIDocument.

MozReview-Commit-ID: Ei6V3UE8XGr
2018-02-21 07:00:10 +09:00
Hiroyuki Ikezoe
0430096918 Bug 1416966 - Perform a micro task checkpoint in DocumentTimeline::WillRefresh. r=bevis,birtles
MozReview-Commit-ID: Kd1Il7COZZY
2017-12-12 18:44:05 +09:00
Andrew McCreight
84ee98de3c Bug 1391005 - Eliminate NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED. r=peterv
Replace it with NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION, because it
has been the same for a while.

MozReview-Commit-ID: 5agRGFyUry1
2017-08-29 16:02:48 -07:00
Boris Chiou
03a6d773f0 Bug 1317209 - Part 4: Don't ref-count nsDOMNavigationTiming in DocumentTimeline. r=heycam
nsDOMNavigationTiming is not thread-safe ref-counted, so it's better not to
put it into RefPtr because we might call those functions from servo side.
Actually, nsDOMNavigationTiming is held by the document, and the document
must still live in these functions.

MozReview-Commit-ID: AyZ4k749btm
2017-01-13 17:34:38 +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
Brian Birtles
579a715b48 Bug 1302973 - Store timelines on document; r=smaug
MozReview-Commit-ID: KHtAq0VgPZW
2016-10-09 22:36:56 +09:00
Mantaroh Yoshinaga
368c04a185 Bug 1302038 part 2 - Add DocumentTimelineOptions dictionary. r=birtles,smaug
MozReview-Commit-ID: 6i0PafTmFFo
2016-09-28 16:56:24 +09:00
Brian Birtles
af7cb89259 Bug 1291665 - Unregister from refresh driver in DocumentTimeline::Unlink; r=hiro 2016-08-17 09:53:22 +09:00
Mantaroh Yoshinaga
c5c77200dc Bug 1267510 part 3 - Add DocumentTimeline constructor. r=birtles
MozReview-Commit-ID: CqqDlHQsm0p
2016-06-29 11:13:45 +09:00
Mantaroh Yoshinaga
a564cdda59 Bug 1267510 part 2 - Add origin time invariant to DocumentTimeline. r=birtles
MozReview-Commit-ID: Kf7PzzAH9Tj
2016-06-29 10:59:35 +09:00
Wes Kocher
4a174f9993 Backed out 8 changesets (bug 1267510) for causing unacceptably frequent failures in animation mochitests a=backout
Backed out changeset 2a2c42608ff0 (bug 1267510)
Backed out changeset 4cdb7f5b6f7c (bug 1267510)
Backed out changeset e89ec30077a0 (bug 1267510)
Backed out changeset 884243ce4287 (bug 1267510)
Backed out changeset 130a231c5acc (bug 1267510)
Backed out changeset 1ace442f6123 (bug 1267510)
Backed out changeset 058ad3199edb (bug 1267510)
Backed out changeset a7d18185f28d (bug 1267510)
2016-06-27 11:49:06 -07:00
Mantaroh Yoshinaga
6d3e405fd0 Bug 1267510 part 3 - Add DocumentTimeline constructor. r=birtles
MozReview-Commit-ID: CqqDlHQsm0p
2016-06-27 08:09:32 +09:00
Mantaroh Yoshinaga
a6c7487853 Bug 1267510 part 2 - Add origin time invariant to DocumentTimeline. r=birtles
MozReview-Commit-ID: Kf7PzzAH9Tj
2016-06-27 08:09:31 +09:00
Mantaroh Yoshinaga
5a88756318 Bug 1277272 - Remove RefreshObserver when removing animation from timeline. r=birtles
MozReview-Commit-ID: DGSHye0lmdm
2016-06-23 13:09:03 +09:00
Brian Birtles
2c3af55323 Bug 1232829 - Detach obsolete DocumentTimeline from refresh driver when the document is reset; r=smaug 2015-12-22 10:08:19 +09:00
Olli Pettay
667a66a404 Bug 1223445 - KeyframeEffectReadOnly objects end up keeping lots of other objects alive too long, r=birtles 2015-11-16 19:44:55 +02:00
Nathan Froyd
4e6d8f6705 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
2015-10-18 01:24:48 -04:00
Brian Birtles
ba49d8ae87 Bug 1195180 part 8 - Tick animations from their timeline; r=heycam 2015-09-28 12:38:41 +09:00
Brian Birtles
d1c5719f66 Bug 1195180 part 7 - Store animations in an array; r=heycam
Currently AnimationTimeline stores animations in a hashmap which means that
when we go to iterate over those animations to tick them we will visit them
in an order that is non-deterministic.

Although many of the observable effects of ticking an animation (e.g. CSS
animation/transition events, mutation observer events) are later sorted so that
the result does not depend on the order in which animations are ticked, this is
not true for in all cases. In particular, the order in which Animation.finished
promises are resolved will vary depending on the order in which animations are
ticked. Likewise, for Animation finish events.

Furthermore, it seems generally desirable to have a deterministic order for
visiting animations in order to aid reproducing bugs.

To achieve this, this patch switches the storage of animations in
AnimationTimeline to use an array instead. However, when adding animations
we need to determine if the animation to add already exists. To this end we
also maintain a hashmap of the animations so we can quickly determine if
the animation to add is a duplicate or not.
2015-09-28 12:38:41 +09:00
Brian Birtles
201fce1336 Bug 1195180 part 6 - Lazily remove animations from timelines; r=heycam
Now that DocumentTimeline observes the refresh driver we can use regular
ticks to remove unnecessary animations.

We do this because in a subsequent patch, in order to provide deterministic
enumeration order when ticking animations, we will store animations in an array.
Removing an arbitrary element from an nsTArray is O(n) since we have to search
for the array index first, or O(log n) if we keep the array sorted. If we
destroy a subtree containing n animations, the operation effectively becomes
O(n^2), or, if we keep the array sorted, O(n log n). By destroying during a
tick when we are already iterating over the array, however, we will be able
to do this much more efficiently.

Whether an animation is newly associated with a timeline, or is disassociated
from a timeline, or if it merely has its timing updated, the behavior
implemented in this patch is to simply make sure we are observing the refresh
driver and deal with the animation on the next tick.

It might seem that we could be a lot more clever about this and, for example, if
an animation reports NeedsTicks() == false, not start observing the refresh
driver. There are various edge cases however that need to be taken into account.
For example, if a CSS animation is finished (IsRelevant() == false so that
animation will have been removed from the timeline), and paused
(NeedsTicks() == false), and we seek it back to the point where it is relevant
again, we actually need to observe the refresh driver so that it can dispatch an
animationstart event on the next tick. A test case in a subsequent patch tests
this specific situation.

We could possibly add logic to detect if we need to fire events on the next tick
but the complexity does not seem warranted given that even if we unnecessarily
start observing the refresh driver, we will stop watching it on the next tick.

This patch removes some rather lengthy comments from
AnimationTiming::UpdateTiming. This is, in part, because of the behavior
described above that makes these comments no longer relevant. Other parts are
removed because the Web Animations specification has been updated such that a
timeline becoming inactive now pauses the animation[1] so that the issue
regarding detecting timelines becoming active/inactive no longer applies
since animations attached to an inactive timeline remain "relevant".

[1] https://w3c.github.io/web-animations/#responding-to-a-newly-inactive-timeline
2015-09-28 12:38:41 +09:00
Brian Birtles
d894d8e06c Bug 1195180 part 5 - Synchronize refresh driver observing with presshell creation/teardown; r=heycam 2015-09-28 12:38:40 +09:00
Brian Birtles
6eb2767f38 Bug 1195180 part 4 - Unregister from refresh observer when there are no animations needing ticks; r=heycam 2015-09-28 12:38:40 +09:00
Brian Birtles
49ced0513a Bug 1195180 part 3 - Add flag to record if DocumentTimeline is observing the refresh driver; r=heycam 2015-09-28 12:38:40 +09:00
Brian Birtles
2f5374941f Bug 1195180 part 2 - Make DocumentTimeline inherit from nsARefreshObserver; r=heycam 2015-09-28 12:38:40 +09:00
Andrew McCreight
92010d3e4c Bug 1152551, part 2 - Fix mode lines in dom/. r=jst 2015-05-03 15:32:37 -04:00
Brian Birtles
c2050e93b3 Bug 1152171 part 2 - Rename AnimationTimeline to DocumentTimeline; r=smaug
And then re-add AnimationTimeline as an abstract super-interface of
DocumentTimeline.
2015-04-10 10:34:22 +09:00