Chromium Code Reviews| Index: third_party/WebKit/Source/core/animation/TimingCalculations.h |
| diff --git a/third_party/WebKit/Source/core/animation/TimingCalculations.h b/third_party/WebKit/Source/core/animation/TimingCalculations.h |
| index 0ba2110c7be33af19adaad3654af7704d4927e03..c9f550b18ec87d95064d2edee8c51776f138e270 100644 |
| --- a/third_party/WebKit/Source/core/animation/TimingCalculations.h |
| +++ b/third_party/WebKit/Source/core/animation/TimingCalculations.h |
| @@ -89,7 +89,7 @@ static inline double calculateActiveTime(double activeDuration, Timing::FillMode |
| return nullValue(); |
| case AnimationEffect::PhaseAfter: |
| if (fillMode == Timing::FillModeForwards || fillMode == Timing::FillModeBoth) |
| - return activeDuration; |
| + return std::max(0.0, std::min(activeDuration, activeDuration + specified.endDelay)); |
| return nullValue(); |
| case AnimationEffect::PhaseNone: |
| ASSERT(isNull(localTime)); |
| @@ -125,7 +125,8 @@ static inline bool endsOnIterationBoundary(double iterationCount, double iterati |
| return !fmod(iterationCount + iterationStart, 1); |
| } |
| -static inline double calculateIterationTime(double iterationDuration, double repeatedDuration, double scaledActiveTime, double startOffset, const Timing& specified) |
| +// TODO(alancutter): Align this function with current Web Animations spec text. |
|
suzyh_UTC10 (ex-contributor)
2016/07/25 00:51:09
Let's start making sure all our TODOs have bugs at
alancutter (OOO until 2018)
2016/07/25 01:44:32
Done.
|
| +static inline double calculateIterationTime(double iterationDuration, double repeatedDuration, double scaledActiveTime, double startOffset, AnimationEffect::Phase phase, const Timing& specified) |
| { |
| ASSERT(iterationDuration > 0); |
| ASSERT(repeatedDuration == multiplyZeroAlwaysGivesZero(iterationDuration, specified.iterationCount)); |
| @@ -141,7 +142,17 @@ static inline double calculateIterationTime(double iterationDuration, double rep |
| return iterationDuration; |
| ASSERT(std::isfinite(scaledActiveTime)); |
| - return fmod(scaledActiveTime, iterationDuration); |
| + double iterationTime = fmod(scaledActiveTime, iterationDuration); |
| + |
| + // This implements step 3 of |
| + // http://w3c.github.io/web-animations/#calculating-the-simple-iteration-progress |
| + if (iterationTime == 0 |
| + && phase == AnimationEffect::PhaseAfter |
| + && repeatedDuration != 0 |
| + && scaledActiveTime != 0) |
| + return iterationDuration; |
| + |
| + return iterationTime; |
| } |
| static inline double calculateCurrentIteration(double iterationDuration, double iterationTime, double scaledActiveTime, const Timing& specified) |