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,
{
timing.assertValid();
// All fill modes are supported (the calling code handles them).
if (timing.iterationCount <= 0)
return false;
if (std::isnan(timing.iterationDuration) || !timing.iterationDuration)
if (!timing.iterationCount || !timing.iterationDuration)
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)) {
out.adjustedIterationCount = -1;
} else {
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.
out.scaledTimeOffset = -scaledStartDelay + timeOffset;
out.scaledTimeOffset = -timing.startDelay + timeOffset;
out.playbackRate = timing.playbackRate * playerPlaybackRate;
out.fillMode = timing.fillMode == Timing::FillModeAuto ? Timing::FillModeNone : timing.fillMode;
out.iterationStart = timing.iterationStart;
out.assertValid();
return true;
}
......
......@@ -41,6 +41,15 @@ class WebCompositorAnimationCurve;
class CompositorAnimationsImpl {
private:
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;
double scaledDuration;
double scaledTimeOffset;
......
......@@ -379,7 +379,7 @@ TEST_F(AnimationCompositorAnimationsTest, ConvertTimingForCompositorIterationsAn
EXPECT_DOUBLE_EQ(4.0, m_compositorTiming.adjustedIterationCount);
m_timing.startDelay = 21.0;
EXPECT_FALSE(convertTimingForCompositor(m_timing, m_compositorTiming));
EXPECT_TRUE(convertTimingForCompositor(m_timing, m_compositorTiming));
}
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