WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 79819
[chromium] Add impl-thread support for animation-timing-function
https://bugs.webkit.org/show_bug.cgi?id=79819
Summary
[chromium] Add impl-thread support for animation-timing-function
vollick
Reported
2012-02-28 11:50:08 PST
Add support for animation-timing-function as per
http://www.w3.org/TR/css3-transitions/
on the impl-thread
Attachments
Patch
(50.38 KB, patch)
2012-02-28 12:09 PST
,
vollick
no flags
Details
Formatted Diff
Diff
Patch
(48.80 KB, patch)
2012-02-28 18:39 PST
,
vollick
no flags
Details
Formatted Diff
Diff
Patch
(48.89 KB, patch)
2012-02-29 12:49 PST
,
vollick
no flags
Details
Formatted Diff
Diff
Show Obsolete
(2)
View All
Add attachment
proposed patch, testcase, etc.
vollick
Comment 1
2012-02-28 12:09:16 PST
Created
attachment 129305
[details]
Patch
Nat Duca
Comment 2
2012-02-28 14:34:14 PST
Comment on
attachment 129305
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=129305&action=review
Dumb question --- if we had N-step cubic bezier curves, could we convert this bizarreness with the per-frame Can you pull out the const-correctness changes to UnitBezier to a separate patch? Can we call CCTimingFunction -> CCTimingCurve?
> Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:-47 > - if (!keyframes.size())
can we at least put an early-check for the keyframe being at the end to make the common case fast?
> Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:47 > + OwnPtr<Keyframe> popKeyframe = keyframe;
also, do we have unit tests that insert keyframes out of order and verify that the keyframes are sorted?
> Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:59 > +PassOwnPtr<CCTimingFunction> cloneTimingFunction(const CCTimingFunction* timingFunction)
This smells funny that you're allowed to clone a null timing function. I'd rather ASSERT(timingFunction) and guard against null in the callers.
> Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:64 > + OwnPtr<CCAnimationCurve> curve = timingFunction->clone();
Virtuals can override return type and save you this mess, or so people far smarter than I tell me.
> Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:112 > + return CCFloatKeyframe::create(time(), value(), cloneTimingFunction(timingFunction()));
avoid passing null to the clone, i think
> Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:77 > + // FIXME: add support for steps timing function.
is this noted on the "modes we need to eventually support"? Can this be implemented as a specific set of cubic bezier segments?
> Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:82 > + case TimingFunction::CubicBezierFunction: {
Is this double-bracing in keeping with wk style? Smells funny.
> Source/WebKit/chromium/tests/CCKeyframedAnimationCurveTest.cpp:218 > }
do we need tests for the cubic bezier curve itself?
vollick
Comment 3
2012-02-28 18:39:05 PST
Created
attachment 129374
[details]
Patch
vollick
Comment 4
2012-02-28 18:53:14 PST
(In reply to
comment #2
)
> (From update of
attachment 129305
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=129305&action=review
> > Dumb question --- if we had N-step cubic bezier curves, could we convert this bizarreness with the per-frame
My goal was to closely match
http://www.w3.org/TR/css3-animations/
. In this document, each keyframe save the last one can be associated with a timing function, and I've tried to do the same thing. This approach also simplifies CCKeyframed*AnimationCurve -- I just have to resample using the timing function before interpolating two keyframes.
> > Can you pull out the const-correctness changes to UnitBezier to a separate patch?
Done.
> > Can we call CCTimingFunction -> CCTimingCurve? >
It does clash a bit with the other *Curve class names, but I was trying to match
http://www.w3.org/TR/css3-animations/
which uses this jargon.
> > Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:-47 > > - if (!keyframes.size()) > > can we at least put an early-check for the keyframe being at the end to make the common case fast? >
Done.
> > Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:47 > > + OwnPtr<Keyframe> popKeyframe = keyframe; > > also, do we have unit tests that insert keyframes out of order and verify that the keyframes are sorted? >
Added.
> > Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:59 > > +PassOwnPtr<CCTimingFunction> cloneTimingFunction(const CCTimingFunction* timingFunction) > > This smells funny that you're allowed to clone a null timing function. I'd rather ASSERT(timingFunction) and guard against null in the callers. >
Done.
> > Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:64 > > + OwnPtr<CCAnimationCurve> curve = timingFunction->clone(); > > Virtuals can override return type and save you this mess, or so people far smarter than I tell me. >
I would love to do this, but it turns out that covariant return type tricks won't work with smart pointers :(
http://stackoverflow.com/questions/5969996/covariant-return-type-with-template-container
> > Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:112 > > + return CCFloatKeyframe::create(time(), value(), cloneTimingFunction(timingFunction())); > > avoid passing null to the clone, i think
Done.
> > > Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:77 > > + // FIXME: add support for steps timing function. > > is this noted on the "modes we need to eventually support"? >
Wasn't mentioned here
http://www.w3.org/TR/css3-animations/#animation-timing-function_tag
, so I didn't include in the list.
> Can this be implemented as a specific set of cubic bezier segments?
Yes, that's a possibility.
> > > Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:82 > > + case TimingFunction::CubicBezierFunction: { > > Is this double-bracing in keeping with wk style? Smells funny. >
Removed.
> > Source/WebKit/chromium/tests/CCKeyframedAnimationCurveTest.cpp:218 > > } > > do we need tests for the cubic bezier curve itself?
I didn't think so since it's implemented in terms of UnitBezier. I have a very basic test in CCKeyframedAnimationCurveTest that checks that the curve is nonlinear when it should be and that it takes on sane values.
James Robinson
Comment 5
2012-02-29 12:19:30 PST
Comment on
attachment 129374
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=129374&action=review
R=me. Several naming nits cos that's how we roll :)
> Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.cpp:47 > +void insertKeyframe(PassOwnPtr<Keyframe> keyframe, Vector<OwnPtr<Keyframe> >& keyframes) > { > - if (!keyframes.size()) > - return true; > - > - for (size_t i = 0; i < keyframes.size() - 1; ++i) { > - if (keyframes[i].time > keyframes[i+1].time) > - return false; > + OwnPtr<Keyframe> popKeyframe = keyframe;
nit: the naming here is reversed from what we normally do, although I think the logic is correct. the normal idiom is to name the parameter of type PassOwnPtr<> "popFoo" and then create a local called "foo" and never use the PassOwnPtr<> value again.
http://www.webkit.org/coding/RefPtr.html
has an example using PassRefPtr. this looks like the code is manipulating the PassOwnPtr<> value, which doesn't work since it's nulled out after assignment into a local OwnPtr<> would you mind swapping the names?
> Source/WebCore/platform/graphics/chromium/cc/CCTimingFunction.cpp:32 > +const double kEpsilon = 1e-6;
nit: in WebKit, constants are named the same way as other variables - there's no "k" prefix
> Source/WebCore/platform/graphics/chromium/cc/CCTimingFunction.cpp:75 > +PassOwnPtr<CCTimingFunction> CCEaseTimingFunction::create()
nit: it probably wouldn't hurt to put a link to the section of the CSS spec that defines these seemingly magical numbers (I see you have one in the header)
> Source/WebCore/platform/graphics/chromium/cc/CCTimingFunction.h:53 > + virtual float getValue(double t) const;
nit: in headers please expand the variable name out to 'time' just to be extra clear
vollick
Comment 6
2012-02-29 12:49:56 PST
Created
attachment 129492
[details]
Patch
WebKit Review Bot
Comment 7
2012-02-29 19:34:48 PST
Comment on
attachment 129492
[details]
Patch Clearing flags on attachment: 129492 Committed
r109297
: <
http://trac.webkit.org/changeset/109297
>
WebKit Review Bot
Comment 8
2012-02-29 19:34:53 PST
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug