Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1010)

Unified Diff: third_party/WebKit/Source/core/animation/TimingCalculations.h

Issue 2030843002: Web Animations: Account for end delay in after phase active time (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unit test Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)

Powered by Google App Engine
This is Rietveld 408576698