Commit df55c349 authored by samli@chromium.org's avatar samli@chromium.org

Animation: Composite animations with any start delay specified

BUG=423211

Review URL: https://codereview.chromium.org/653833002

git-svn-id: svn://svn.chromium.org/blink/trunk@183647 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 79610d38
...@@ -261,39 +261,23 @@ bool CompositorAnimationsImpl::convertTimingForCompositor(const Timing& timing, ...@@ -261,39 +261,23 @@ bool CompositorAnimationsImpl::convertTimingForCompositor(const Timing& timing,
{ {
timing.assertValid(); timing.assertValid();
// All fill modes are supported (the calling code handles them). if (!timing.iterationCount || !timing.iterationDuration)
if (timing.iterationCount <= 0)
return false;
if (std::isnan(timing.iterationDuration) || !timing.iterationDuration)
return false; return false;
// All directions are supported.
// Now attempt an actual conversion
out.scaledDuration = timing.iterationDuration;
ASSERT(out.scaledDuration > 0);
double scaledStartDelay = timing.startDelay;
if (scaledStartDelay > 0 && scaledStartDelay > out.scaledDuration * timing.iterationCount)
return false;
out.direction = timing.direction;
if (!std::isfinite(timing.iterationCount)) { if (!std::isfinite(timing.iterationCount)) {
out.adjustedIterationCount = -1; out.adjustedIterationCount = -1;
} else { } else {
out.adjustedIterationCount = timing.iterationCount; out.adjustedIterationCount = timing.iterationCount;
ASSERT(out.adjustedIterationCount > 0);
} }
out.scaledDuration = timing.iterationDuration;
out.direction = timing.direction;
// Compositor's time offset is positive for seeking into the animation. // Compositor's time offset is positive for seeking into the animation.
out.scaledTimeOffset = -scaledStartDelay + timeOffset; out.scaledTimeOffset = -timing.startDelay + timeOffset;
out.playbackRate = timing.playbackRate * playerPlaybackRate; out.playbackRate = timing.playbackRate * playerPlaybackRate;
out.fillMode = timing.fillMode == Timing::FillModeAuto ? Timing::FillModeNone : timing.fillMode; out.fillMode = timing.fillMode == Timing::FillModeAuto ? Timing::FillModeNone : timing.fillMode;
out.iterationStart = timing.iterationStart; out.iterationStart = timing.iterationStart;
out.assertValid();
return true; return true;
} }
......
...@@ -41,6 +41,15 @@ class WebCompositorAnimationCurve; ...@@ -41,6 +41,15 @@ class WebCompositorAnimationCurve;
class CompositorAnimationsImpl { class CompositorAnimationsImpl {
private: private:
struct CompositorTiming { struct CompositorTiming {
void assertValid() const
{
ASSERT(scaledDuration > 0);
ASSERT(std::isfinite(scaledTimeOffset));
ASSERT(adjustedIterationCount > 0 || adjustedIterationCount == -1);
ASSERT(std::isfinite(playbackRate) && playbackRate);
ASSERT(iterationStart >= 0);
}
Timing::PlaybackDirection direction; Timing::PlaybackDirection direction;
double scaledDuration; double scaledDuration;
double scaledTimeOffset; double scaledTimeOffset;
......
...@@ -379,7 +379,7 @@ TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationsAn ...@@ -379,7 +379,7 @@ TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationsAn
EXPECT_DOUBLE_EQ(4.0, m_compositorTiming.adjustedIterationCount); EXPECT_DOUBLE_EQ(4.0, m_compositorTiming.adjustedIterationCount);
m_timing.startDelay = 21.0; m_timing.startDelay = 21.0;
EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming)); EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
} }
TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorPlaybackRate) TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorPlaybackRate)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment