Commit Graph

262 Commits

Author SHA1 Message Date
Brian Birtles
ef4bbaaec8 Bug 1004383 part 3 - Add ElementAnimation::AsTransition virtual method; r=dbaron
Add a method for downcasting from an ElementAnimation to an
ElementPropertyTransition (when the underlying object is an
ElementPropertyTransition).

This, unfortunately, adds a vtable to ElementAnimation but in the long term
I hope we will be able to isolate transition-specific code to a specific kind of
TransitionEffect that hangs off ElementAnimation and put the vtable on
AnimationEffect instead. (The AnimationEffect concept is part of the Web
Animations API.)
2014-05-15 08:38:37 +09:00
Brian Birtles
a6ac636d37 Bug 1004383 part 2 - Rename StyleAnimation to ElementAnimation; r=dholbert
We currently have mozilla::StyleAnimation as well as nsStyleAnimation. This
patch renames StyleAnimation back to ElementAnimation.

Although ElementAnimation is very similar to ElementAnimations, in the near
future we expect to retire ElementAnimations and replace it with a common
AnimationSet-like structure that is covers the features of ElementAnimations and
ElementTransitions.
2014-05-15 08:38:37 +09:00
Brian Birtles
7ed9ae0424 Bug 1004383 part 1 - Put StyleAnimation on the heap; r=dbaron
This patch takes StyleAnimation and makes it ref-counted heap object. This
should allow us to store StyleAnimation and its subclasses (transitions only
currently) in a consistent fashion (an array of base-class pointers).
Furthermore, this will be helpful if we want these things to be pointed to
from Javascript objects that may, for example, preserve their lifetime beyond
that of the element that currently owns them.

This patch also introduces a typedef for an array of refptrs to StyleAnimation
objects (and similarly for the subclass ElementPropertyTransition) to simplify
the code somewhat.
2014-05-15 08:38:37 +09:00
Brian Birtles
de4b68b967 Bug 880596 part 8 - Rename ElementAnimation to StyleAnimation; r=dbaron
We need a basic representation of animations from which we can derive subclasses
to represent specific cases such as transitions. For now we will retrofit
ElementAnimation for that purpose hence renaming it to StyleAnimation.

This patch removes the "using namespace mozilla::layers" line from
AnimationCommon.cpp since the unified build system concatenates several files
together before compiling making using declarations like this leak into other
files potentially creating ambiguities. Previously, when we were calling
ElementAnimation, 'Animation', there were ambiguities between
mozilla::layers::Animation and this new 'Animation' class. In general, it is
probably a good idea to limit the scope of these using declarations so I've kept
that change.
2014-04-03 14:57:28 +09:00
Brian Birtles
38b0706d68 Bug 880596 part 7 - Move ElementAnimation to AnimationCommon; r=dbaron
This patch relocates ElementAnimation from nsAnimationManager.{h,cpp} to
AnimationCommon.{h,cpp} and in the process moves it into the mozilla::css
namespace.
2014-04-03 14:57:28 +09:00
Brian Birtles
35b60c950e Bug 880596 part 3 - Remove ElementPropertyTransition::IsRunningAt and mIsRunningOnCompositor; r=dbaron
Both ElementPropertyTransition and ElementAnimation specify an IsRunningAt
method which have the same purpose but with two subtle differences:

a) ElementPropertyTransition::IsRunningAt checks if the transition is a removed
sentinel and if so returns false. This patch adds a check for a null start time
to IsRunningAt since I think in future we will want to allow null times in
various places to represent, for example, animations that are not connected to
a timeline. (However, ultimately we will probably not allow start times on
*animations* to be null, only on their associated player.)

Should we later use a different mechanism for marking sentinel transitions (e.g.
a boolean flag) this method should still be correct as it checks if aTime is
inside the transition interval before returning true.

b) ElementPropertyTransition::IsRunningAt returns false if the transition is in
the delay phase, that is, waiting to start. This patch changes this behavior so
that transitions are considered running even if they are in the delay phase.
This brings their behavior into line with animations and removes the need for
the ElementPropertyTransition::mIsRunningOnCompositor since it is only used to
determine when a transition in the delay phase has begun.

ElementAnimation::IsRunningAt also handles pause state and iterations but this
logic should still be correct for transitions which, in this area, only use
a subset of the functionality of animations since their pause state is always
playing and their iteration count is 1.
2014-04-03 14:57:27 +09:00
Brian Birtles
64e3b0221f Bug 880596 part 2 - Make ElementPropertyTransition inherit from ElementAnimation; r=dbaron
As part of moving towards more shared data structures for animation, this patch
makes ElementPropertyTransition inherit from ElementAnimation. At the same time
we switch from storing the target property, start/end values, start time, delay,
and timing function on the transition to the corresponding location in
ElementAnimation.

Since nsDisplayList::AddAnimationsAndTransitionsToLayer was already doing this
conversion in order to create animations to pass to the compositor thread, we
can remove the conversion code from there and just use the ElementAnimation data
structures as-is.

A number of assertions are added to verify that transitions are set up as
expected (namely, they have only a single property-animation with a single
segment). As we move to more generic handling of animations and transitions
these assertions should disappear.
2014-04-03 14:57:27 +09:00
Brian Birtles
5715a94824 Bug 880596 part 1 - Separate delay from start time for transitions; r=dbaron
As a first step towards making CSS animations and CSS transitions use the same
data structures, this patch aligns their behavior with regards to start time and
delay handling.

Previously, ElementAnimation objects maintained separate mStartTime and mDelay
members whilst ElementPropertyTransition objects maintained a single mStartTime
property that incorporated the delay. This patch adds an mDelay member to
ElementPropertyTransition and stores the delay and start time separately.
Calculations involving ElementPropertyTransition::mStartTime are adjusted to
incorporate mDelay.
2014-04-03 14:57:27 +09:00
L. David Baron
86a1cffa4e Bug 978712 - Prevent non-running transitions and animations (animations or transitions during their delay period, and animations after they finish) from repeatedly poking layer activity because we think we can run them on the compositor. r=heycam
This changes the behavior of the CanPerformOnCompositorThread methods of
both ElementAnimations and ElementTransitions to check that the
respective animations or transitions are actually running.  This is ok
because:
 - The main caller is nsLayoutUtils::HasAnimationsForCompositor, and all
   of its callers pretty clearly want the more restricted behavior (they're
   concerned with layer activity)
 - The only other callers of these functions are
   nsAnimationManager::FlushAnimations and
   nsTransitionManager::FlushTransitions (determining when to do
   throttling), nsAnimationManager::GetAnimationsForCompositor (whose
   only caller,
   nsDisplayListBuilder::AddAnimationsAndTransitionsToLayer, also checks
   IsRunningAt).  I think these also all want or are fine with having
   the IsRunningAt check.

As to the actual changes:
 - In the animation manager, I think it's a mistake that
   ElementAnimation::IsRunningAt didn't already check
   mIterationDuration, since we throw out animations with a bad
   iteration-duration in ElementAnimations::EnsureStyleRuleFor.  So this
   makes that change as well.
 - In the transition manager, IsRunningAt already checks
   !IsRemovedSentinel().

I've confirmed in gdb on a device that this fixes the repeated
nsIFrame::SchedulePaint calls that were the symptom of this bug.

I believe this patch also makes it so that a short animation of a
property that can't be animated on the compositor doesn't prevent the
entire duration of the animation of a property that can from being
throttled (having the main thread style updates suppressed).
2014-03-06 22:08:57 -08:00
Nicholas Cameron
1f3caff660 Bug 914847. Mini-flush for animations. r=dbaron 2013-10-22 14:14:41 +02:00
Wes Kocher
a5ddf69634 Backed out changeset 87ee0a1865e4 (bug 914847) 2013-10-22 16:55:14 -04:00
Nicholas Cameron
23e681a386 Bug 914847. Mini-flush for animations. r=dbaron 2013-10-22 14:14:41 +02:00
Nicholas Cameron
587398bf4b Bug 878142; be more precise about removing the animation manager from the refresh driver. r=dbaron 2013-06-25 20:58:46 +12:00
Catalin Iacob
f88cdc0744 Bug 798914 (part 5) - Use newly introduced mozilla::MallocSizeOf instead of nsMallocSizeOfFun. r=njn. 2013-06-23 14:03:39 +02:00
Joshua Cranmer
0a834260da Bug 767563 - Add a clang static checker, part 3: Move the MOZ_MUST_OVERRIDE macro to MFBT. r=Waldo 2013-03-23 21:14:43 -05:00
L. David Baron
66aec12b02 Bug 822721: Call CalcStyleDifference and process the style change list resulting from the miniflush we do to update throttled animations prior to seeing if we need to start transitions. r=bzbarsky a=blocking-basecamp
The CalcStyleDifference call is absolutely necessary even if we didn't
need to process the change list, because it causes the new style
context to have cached structs that we might need for a later
comparison.  This is important because, as an optimization, we only
compare structs that have been retrieved.  This optimization requires
that when we replace a style context, we fetch all the structs on the
new style context that had been fetched on the old style context (which
is normally necessary anyway in order to do comparison so we can process
the changes appropriately).

However, actually processing the change list is also necessary to fix
the bug; it's the actual change from the miniflush that matters here.
Based on dholbert's debugging information, I think it's mostly likely
because we were failing to process the UpdateOverflow hint.
2013-01-08 20:37:29 -08:00
Nicholas Cameron
aea2a68ed3 Bug 823460; start throttled transitions with delays; r=dbaron; a=blocking-basecamp 2012-12-23 17:52:13 +13:00
Nicholas Cameron
6edbdb7f5a Bug 780692; throttle OMTA (rollup patch). r=dbaron,bz 2012-12-12 10:12:43 +13:00
Cameron McCormack
1c716ff434 Bug 811581 - Add a base class for all *RuleProcessorData classes. r=bz 2012-11-15 06:09:01 +11:00
Arnaud Sourioux
f15f47d318 Bug 733186: Annotate ~1000 methods with MOZ_OVERRIDE in /layout r=dholbert r=dbaron 2012-09-14 09:10:08 -07:00
David Zbarsky
ffe68dc796 Move mStyleRule and mStyleRuleRefreshTime from ElementAnimations/ElementTransitions to CommonElementAnimationData, no bug, r=dbaron over irc 2012-08-21 21:48:47 -04:00
David Zbarsky
58bc807413 Bug 784239 - Perform async animations even when not all properties can be asyncified r=roc 2012-08-21 21:48:47 -04:00
David Zbarsky
6a56e516b5 Bug 768440 Part 2: Animate CSS Transitions on the compositor r=roc,dbaron 2012-07-31 10:28:22 -07:00
David Zbarsky
c1125ae35c Bug 768440 Part 1: Move ElementTransitions and ElementPropertyTransition to the header r=dbaron 2012-07-31 10:28:21 -07:00
Mark Finkle
b478928a3b Backout 169ff207ed19, a34baed70c1b, f9ccdd490bd7, 39550ed860e6, 2194a2dd66b2, 908eb2e26843, a76e0a267f26 due to mobile viewport bustage (bug 778580) 2012-07-30 14:36:12 -04:00
Aryeh Gregor
8b4a23fc4c Bug 777292 part 2 - Change all nsnull to nullptr 2012-07-30 17:20:58 +03:00
David Zbarsky
be098968f4 Bug 768440 Part 2: Animate CSS Transitions on the compositor r=roc,dbaron 2012-07-27 13:23:45 -07:00
David Zbarsky
584133af68 Bug 768440 Part 1: Move ElementTransitions and ElementPropertyTransition to the header r=dbaron 2012-07-27 13:23:44 -07:00
Ed Morley
4cf7768fb0 Backout 1244b8a8e57a (bug 755084), 32d16d0f87c9 (bug 706179), 8548e016d4a9 (bug 768440), 697f5b87eae9 (bug 768440), 808fc2bd4e8c (bug 755084), 54b1484cd125 (bug 755084), 876726b632c0 (bug 706179) for xul android R3 failures 2012-07-25 16:37:04 +01:00
David Zbarsky
8322d18bd8 Bug 768440 Part 2: Animate CSS Transitions on the compositor r=roc,dbaron 2012-07-25 01:48:10 -07:00
David Zbarsky
916f393393 Bug 768440 Part 1: Move ElementTransitions and ElementPropertyTransition to the header r=dbaron 2012-07-25 01:48:10 -07:00
Matt Brubeck
0e88f3cf5b Back out f4f5189b1d0c, 3b4f0606c547, b8a5a1ab8a5f, 5078933d6954, 7e0260c45de9 (bug 768440, bug 755084, bug 706179) because of reftest failures 2012-07-23 20:25:51 -07:00
David Zbarsky
ae54164998 Bug 768440 Part 2: Animate CSS Transitions on the compositor r=roc,dbaron 2012-07-23 17:34:49 -07:00
David Zbarsky
c6db4c0e62 Bug 768440 Part 1: Move ElementTransitions and ElementPropertyTransition to the header r=dbaron 2012-07-23 17:34:48 -07:00
Gervase Markham
cb6a072c2a Bug 716478 - update licence to MPL 2. 2012-05-21 12:12:37 +01:00
Nicholas Nethercote
a76fc052f5 Bug 705987 - Use mallocSizeOf in the layout memory reporters. r=khuey,bzbarsky 2011-12-08 21:01:52 -08:00
Michael Wu
0fe7772ece Bug 675553 - Switch from PRBool to bool on a CLOSED TREE , r=bsmedberg,khuey,bz,cjones 2011-09-28 23:19:26 -07:00
L. David Baron
9a6736b2c2 Refactor some parts of nsTransitionManager into common base class to be shared with AnimationManager. (Bug 435442, patch 7) r=bzbarsky 2011-04-11 23:18:43 -07:00
Ryan VanderMeulen
d8c0f78619 Bug 586130 - Warning C4099 fixes (layout). r=dholbert a=bsmedberg 2011-01-20 19:49:09 -08:00
Boris Zbarsky
0bd5f683b4 Bug 592698. We might not have a presshell by this point, so null-check it. r=dbaron 2010-09-15 12:40:11 -07:00
Craig Topper
6954d497fb Bug 575901 - DeCOMtaminate nsIStyleRuleProcessor method signatures. r=bz 2010-07-18 23:20:40 +02:00
Boris Zbarsky
0a1730db7c Bug 555627. Make transitions actually work correctly on :before and :after. r=dbaron 2010-06-30 18:54:29 -07:00
Boris Zbarsky
c4765a9c15 Bug 565815. Use Element in the transition manager instead of nsIContent. r=dbaron 2010-05-14 13:04:51 -04:00
Zack Weinberg
bbd7ec0ef6 Bug 494117 preliminary refactor: Search-and-replace 'ReStyle' with 'Restyle' throughout layout. r=roc 2010-03-31 17:43:32 -07:00
Markus Stange
d0cb573e65 Bug 508482 - Window activation status should be a pseudoclass (:-moz-window-inactive) instead of an attribute. r=dbaron, r+sr=jst 2010-03-17 18:10:57 +01:00
Markus Stange
8e573045c0 Backed out changeset e17c076aceea, bug 508482 (:-moz-window-inactive pseudoclass) because of test_righttoleft.xul test failures. 2010-03-17 20:03:53 +01:00
Markus Stange
56f855c121 Bug 508482 - Window activation status should be a pseudoclass (:-moz-window-inactive) instead of an attribute. r=dbaron, r+sr=jst 2010-03-17 18:10:57 +01:00
L. David Baron
d7d690d7e3 Make the transition manager reference-counted. (Bug 531585) r=bzbarsky 2009-12-23 14:10:31 -05:00
Benjamin Smedberg
58bc31f86e Back out all the pieces of bug 531585 (transitioned event for end of CSS transitions) because of timeouts in test_transitions_events.html 2009-12-23 10:15:26 -05:00
L. David Baron
5670d9249a Make the transition manager reference-counted. (Bug 531585) r=bzbarsky 2009-12-23 06:35:45 -05:00