diff options
author | behara.ms <behara.ms@samsung.com> | 2014-11-11 21:09:08 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-12 05:09:29 +0000 |
commit | 71ff07f3e8b5d1861877cefc046bcea53125c7f7 (patch) | |
tree | 5663ad8b541bfa8669fa530ff43a683cfb5956df | |
parent | b70363420dbfe0825e96e3d025fb0bacb26ff2f4 (diff) | |
download | chromium_src-71ff07f3e8b5d1861877cefc046bcea53125c7f7.zip chromium_src-71ff07f3e8b5d1861877cefc046bcea53125c7f7.tar.gz chromium_src-71ff07f3e8b5d1861877cefc046bcea53125c7f7.tar.bz2 |
Make cc::Animation::TrimTimeToCurrentIteration and
cc::AnimationCurve::Duration use TimeTicks/TimeDelta to represent time.
This patch adds a new file time_util.h which adds new class TimeUtil.
This TimeUtil class holds helper functions to operate on TimeDelta
in double because base::TimeDelta class doesnot allow
multiply/divide operations in double.
Review URL: https://codereview.chromium.org/693883004
Cr-Commit-Position: refs/heads/master@{#303790}
23 files changed, 742 insertions, 408 deletions
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index e9ef9e2..0b59c7e 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn @@ -64,6 +64,7 @@ component("cc") { "base/switches.h", "base/tiling_data.cc", "base/tiling_data.h", + "base/time_util.h", "base/unique_notifier.cc", "base/unique_notifier.h", "base/util.h", diff --git a/cc/animation/animation.cc b/cc/animation/animation.cc index e49cf1e..f5abfa0 100644 --- a/cc/animation/animation.cc +++ b/cc/animation/animation.cc @@ -9,6 +9,7 @@ #include "base/debug/trace_event.h" #include "base/strings/string_util.h" #include "cc/animation/animation_curve.h" +#include "cc/base/time_util.h" namespace { @@ -154,17 +155,18 @@ bool Animation::IsFinishedAt(base::TimeTicks monotonic_time) const { return false; return run_state_ == Running && iterations_ >= 0 && - iterations_ * curve_->Duration() / std::abs(playback_rate_) <= - (monotonic_time + time_offset_ - start_time_ - total_paused_time_) - .InSecondsF(); + TimeUtil::Scale(curve_->Duration(), + iterations_ / std::abs(playback_rate_)) <= + (monotonic_time + time_offset_ - start_time_ - total_paused_time_); } bool Animation::InEffect(base::TimeTicks monotonic_time) const { - return ConvertToActiveTime(monotonic_time) >= 0 || + return ConvertToActiveTime(monotonic_time) >= base::TimeDelta() || (fill_mode_ == FillModeBoth || fill_mode_ == FillModeBackwards); } -double Animation::ConvertToActiveTime(base::TimeTicks monotonic_time) const { +base::TimeDelta Animation::ConvertToActiveTime( + base::TimeTicks monotonic_time) const { base::TimeTicks trimmed = monotonic_time + time_offset_; // If we're paused, time is 'stuck' at the pause time. @@ -181,56 +183,60 @@ double Animation::ConvertToActiveTime(base::TimeTicks monotonic_time) const { needs_synchronized_start_time()) trimmed = base::TimeTicks() + time_offset_; - return (trimmed - base::TimeTicks()).InSecondsF(); + return (trimmed - base::TimeTicks()); } -double Animation::TrimTimeToCurrentIteration( +base::TimeDelta Animation::TrimTimeToCurrentIteration( base::TimeTicks monotonic_time) const { // Check for valid parameters DCHECK(playback_rate_); DCHECK_GE(iteration_start_, 0); - double active_time = ConvertToActiveTime(monotonic_time); - double start_offset = iteration_start_ * curve_->Duration(); + base::TimeDelta active_time = ConvertToActiveTime(monotonic_time); + base::TimeDelta start_offset = + TimeUtil::Scale(curve_->Duration(), iteration_start_); // Return start offset if we are before the start of the animation - if (active_time < 0) + if (active_time < base::TimeDelta()) return start_offset; - // Always return zero if we have no iterations. if (!iterations_) - return 0; + return base::TimeDelta(); // Don't attempt to trim if we have no duration. - if (curve_->Duration() <= 0) - return 0; + if (curve_->Duration() <= base::TimeDelta()) + return base::TimeDelta(); - double repeated_duration = iterations_ * curve_->Duration(); - double active_duration = repeated_duration / std::abs(playback_rate_); + base::TimeDelta repeated_duration = + TimeUtil::Scale(curve_->Duration(), iterations_); + base::TimeDelta active_duration = + TimeUtil::Scale(repeated_duration, 1.0 / std::abs(playback_rate_)); // Check if we are past active duration if (iterations_ > 0 && active_time >= active_duration) active_time = active_duration; // Calculate the scaled active time - double scaled_active_time; + base::TimeDelta scaled_active_time; if (playback_rate_ < 0) scaled_active_time = - (active_time - active_duration) * playback_rate_ + start_offset; + TimeUtil::Scale((active_time - active_duration), playback_rate_) + + start_offset; else - scaled_active_time = active_time * playback_rate_ + start_offset; + scaled_active_time = + TimeUtil::Scale(active_time, playback_rate_) + start_offset; // Calculate the iteration time - double iteration_time; + base::TimeDelta iteration_time; if (scaled_active_time - start_offset == repeated_duration && fmod(iterations_ + iteration_start_, 1) == 0) iteration_time = curve_->Duration(); else - iteration_time = fmod(scaled_active_time, curve_->Duration()); + iteration_time = TimeUtil::Mod(scaled_active_time, curve_->Duration()); // Calculate the current iteration int iteration; - if (scaled_active_time <= 0) + if (scaled_active_time <= base::TimeDelta()) iteration = 0; else if (iteration_time == curve_->Duration()) iteration = ceil(iteration_start_ + iterations_ - 1); diff --git a/cc/animation/animation.h b/cc/animation/animation.h index 7856497..80c0763 100644 --- a/cc/animation/animation.h +++ b/cc/animation/animation.h @@ -142,7 +142,8 @@ class CC_EXPORT Animation { // Takes the given absolute time, and using the start time and the number // of iterations, returns the relative time in the current iteration. - double TrimTimeToCurrentIteration(base::TimeTicks monotonic_time) const; + base::TimeDelta TrimTimeToCurrentIteration( + base::TimeTicks monotonic_time) const; scoped_ptr<Animation> CloneAndInitialize(RunState initial_run_state) const; @@ -169,7 +170,7 @@ class CC_EXPORT Animation { int group_id, TargetProperty target_property); - double ConvertToActiveTime(base::TimeTicks monotonic_time) const; + base::TimeDelta ConvertToActiveTime(base::TimeTicks monotonic_time) const; scoped_ptr<AnimationCurve> curve_; diff --git a/cc/animation/animation_curve.h b/cc/animation/animation_curve.h index 57c42c7..c03feb8 100644 --- a/cc/animation/animation_curve.h +++ b/cc/animation/animation_curve.h @@ -6,6 +6,7 @@ #define CC_ANIMATION_ANIMATION_CURVE_H_ #include "base/memory/scoped_ptr.h" +#include "base/time/time.h" #include "cc/base/cc_export.h" #include "cc/output/filter_operations.h" #include "ui/gfx/transform.h" @@ -30,7 +31,7 @@ class CC_EXPORT AnimationCurve { virtual ~AnimationCurve() {} - virtual double Duration() const = 0; + virtual base::TimeDelta Duration() const = 0; virtual CurveType Type() const = 0; virtual scoped_ptr<AnimationCurve> Clone() const = 0; diff --git a/cc/animation/animation_unittest.cc b/cc/animation/animation_unittest.cc index b1592d6..2522f19 100644 --- a/cc/animation/animation_unittest.cc +++ b/cc/animation/animation_unittest.cc @@ -41,166 +41,257 @@ scoped_ptr<Animation> CreateAnimation(double iterations) { TEST(AnimationTest, TrimTimeZeroIterations) { scoped_ptr<Animation> anim(CreateAnimation(0)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeOneIteration) { scoped_ptr<Animation> anim(CreateAnimation(1)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeOneHalfIteration) { scoped_ptr<Animation> anim(CreateAnimation(1.5)); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.9, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.9))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.9, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.9)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeInfiniteIterations) { scoped_ptr<Animation> anim(CreateAnimation(-1)); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeReverse) { scoped_ptr<Animation> anim(CreateAnimation(-1)); anim->set_direction(Animation::Reverse); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); + EXPECT_EQ( + 1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateInfiniteIterations) { scoped_ptr<Animation> anim(CreateAnimation(-1)); anim->set_direction(Animation::Alternate); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateOneIteration) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_direction(Animation::Alternate); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateTwoIterations) { scoped_ptr<Animation> anim(CreateAnimation(2)); anim->set_direction(Animation::Alternate); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateTwoHalfIterations) { scoped_ptr<Animation> anim(CreateAnimation(2.5)); anim->set_direction(Animation::Alternate); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.50))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.50)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateReverseInfiniteIterations) { scoped_ptr<Animation> anim(CreateAnimation(-1)); anim->set_direction(Animation::AlternateReverse); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateReverseOneIteration) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_direction(Animation::AlternateReverse); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateReverseTwoIterations) { scoped_ptr<Animation> anim(CreateAnimation(2)); anim->set_direction(Animation::AlternateReverse); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeStartTime) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_start_time(TicksFromSecondsF(4)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeStartTimeReverse) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_start_time(TicksFromSecondsF(4)); anim->set_direction(Animation::Reverse); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(6.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeTimeOffset) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); anim->set_start_time(TicksFromSecondsF(4)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeTimeOffsetReverse) { @@ -208,20 +299,28 @@ TEST(AnimationTest, TrimTimeTimeOffsetReverse) { anim->set_time_offset(TimeDelta::FromMilliseconds(4000)); anim->set_start_time(TicksFromSecondsF(4)); anim->set_direction(Animation::Reverse); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeNegativeTimeOffset) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeNegativeTimeOffsetReverse) { @@ -229,103 +328,149 @@ TEST(AnimationTest, TrimTimeNegativeTimeOffsetReverse) { anim->set_time_offset(TimeDelta::FromMilliseconds(-4000)); anim->set_direction(Animation::Reverse); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(5.0)).InSecondsF()); } TEST(AnimationTest, TrimTimePauseResume) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.5)); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0)); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5))); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); + EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)) + .InSecondsF()); } TEST(AnimationTest, TrimTimePauseResumeReverse) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_direction(Animation::Reverse); anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); anim->SetRunState(Animation::Paused, TicksFromSecondsF(0.25)); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); anim->SetRunState(Animation::Running, TicksFromSecondsF(1024.0)); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.75))); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.75)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeSuspendResume) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); anim->Suspend(TicksFromSecondsF(0.5)); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); anim->Resume(TicksFromSecondsF(1024)); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5))); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); + EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.5)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeSuspendResumeReverse) { scoped_ptr<Animation> anim(CreateAnimation(1)); anim->set_direction(Animation::Reverse); anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); anim->Suspend(TicksFromSecondsF(0.75)); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); anim->Resume(TicksFromSecondsF(1024)); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.25))); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.0)) + .InSecondsF()); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1024.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeZeroDuration) { scoped_ptr<Animation> anim(CreateAnimation(0, 0)); anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); } TEST(AnimationTest, TrimTimeStarting) { scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); anim->SetRunState(Animation::Starting, TicksFromSecondsF(0.0)); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); anim->set_start_time(TicksFromSecondsF(1.0)); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeNeedsSynchronizedStartTime) { scoped_ptr<Animation> anim(CreateAnimation(1, 5.0)); anim->SetRunState(Animation::Running, TicksFromSecondsF(0.0)); anim->set_needs_synchronized_start_time(true); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); anim->set_time_offset(TimeDelta::FromMilliseconds(2000)); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); anim->set_start_time(TicksFromSecondsF(1.0)); anim->set_needs_synchronized_start_time(false); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(3.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); } TEST(AnimationTest, IsFinishedAtZeroIterations) { @@ -437,223 +582,362 @@ TEST(AnimationTest, RunStateChangesIgnoredWhileSuspended) { TEST(AnimationTest, TrimTimePlaybackNormal) { scoped_ptr<Animation> anim(CreateAnimation(1, 1, 1)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackSlow) { scoped_ptr<Animation> anim(CreateAnimation(1, 1, 0.5)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)).InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackFast) { scoped_ptr<Animation> anim(CreateAnimation(1, 4, 2)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); + EXPECT_EQ( + 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); + EXPECT_EQ( + 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); + EXPECT_EQ( + 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackNormalReverse) { scoped_ptr<Animation> anim(CreateAnimation(1, 2, -1)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackSlowReverse) { scoped_ptr<Animation> anim(CreateAnimation(1, 2, -0.5)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); - EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3))); - EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); + EXPECT_EQ(1.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(1.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); + EXPECT_EQ(0.75, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) + .InSecondsF()); + EXPECT_EQ( + 0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3)).InSecondsF()); + EXPECT_EQ(0.25, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)).InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackFastReverse) { scoped_ptr<Animation> anim(CreateAnimation(1, 2, -2)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0)).InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackFastInfiniteIterations) { scoped_ptr<Animation> anim(CreateAnimation(-1, 4, 4)); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5))); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.0)) + .InSecondsF()); + EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1000.5)) + .InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackNormalDoubleReverse) { scoped_ptr<Animation> anim(CreateAnimation(1, 1, -1)); anim->set_direction(Animation::Reverse); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); } TEST(AnimationTest, TrimTimePlaybackFastDoubleReverse) { scoped_ptr<Animation> anim(CreateAnimation(1, 4, -2)); anim->set_direction(Animation::Reverse); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); + EXPECT_EQ(0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ( + 0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)).InSecondsF()); + EXPECT_EQ( + 1, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)).InSecondsF()); + EXPECT_EQ( + 2, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)).InSecondsF()); + EXPECT_EQ( + 3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)).InSecondsF()); + EXPECT_EQ( + 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)).InSecondsF()); + EXPECT_EQ( + 4, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)).InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFast) { scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); anim->set_direction(Animation::Alternate); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastReverse) { scoped_ptr<Animation> anim(CreateAnimation(2, 2, 2)); anim->set_direction(Animation::AlternateReverse); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateTwoIterationsPlaybackFastDoubleReverse) { scoped_ptr<Animation> anim(CreateAnimation(2, 2, -2)); anim->set_direction(Animation::AlternateReverse); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateReverseThreeIterationsPlaybackFastAlternateReverse) { scoped_ptr<Animation> anim(CreateAnimation(3, 2, -2)); anim->set_direction(Animation::AlternateReverse); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.75)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.75)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.25)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.75)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.25)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeAlternateReverseTwoIterationsPlaybackNormalAlternate) { scoped_ptr<Animation> anim(CreateAnimation(2, 2, -1)); anim->set_direction(Animation::Alternate); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(2.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(1.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(4.5)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeIterationStart) { scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); anim->set_iteration_start(0.5); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeIterationStartAlternate) { scoped_ptr<Animation> anim(CreateAnimation(2, 1, 1)); anim->set_direction(Animation::Alternate); anim->set_iteration_start(0.3); - EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7))); - EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7))); + EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(0.3, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.8, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.7)) + .InSecondsF()); + EXPECT_EQ(0.7, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.2)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.7)) + .InSecondsF()); } TEST(AnimationTest, TrimTimeIterationStartAlternateThreeIterations) { scoped_ptr<Animation> anim(CreateAnimation(3, 1, 1)); anim->set_direction(Animation::Alternate); anim->set_iteration_start(1); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(-1.0)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.5)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.5)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(0.5, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.5)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) + .InSecondsF()); } TEST(AnimationTest, @@ -661,11 +945,16 @@ TEST(AnimationTest, scoped_ptr<Animation> anim(CreateAnimation(3, 1, -1)); anim->set_direction(Animation::Alternate); anim->set_iteration_start(1); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0))); - EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0))); - EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5))); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(0.0)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(1.0)) + .InSecondsF()); + EXPECT_EQ(0.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(2.0)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.0)) + .InSecondsF()); + EXPECT_EQ(1.0, anim->TrimTimeToCurrentIteration(TicksFromSecondsF(3.5)) + .InSecondsF()); } TEST(AnimationTest, InEffectFillMode) { diff --git a/cc/animation/keyframed_animation_curve.cc b/cc/animation/keyframed_animation_curve.cc index 333a5c9..a6dc8c5 100644 --- a/cc/animation/keyframed_animation_curve.cc +++ b/cc/animation/keyframed_animation_curve.cc @@ -205,8 +205,9 @@ void KeyframedColorAnimationCurve::AddKeyframe( InsertKeyframe(keyframe.Pass(), &keyframes_); } -double KeyframedColorAnimationCurve::Duration() const { - return keyframes_.back()->Time() - keyframes_.front()->Time(); +base::TimeDelta KeyframedColorAnimationCurve::Duration() const { + return base::TimeDelta::FromSecondsD(keyframes_.back()->Time() - + keyframes_.front()->Time()); } scoped_ptr<AnimationCurve> KeyframedColorAnimationCurve::Clone() const { @@ -252,8 +253,9 @@ void KeyframedFloatAnimationCurve::AddKeyframe( InsertKeyframe(keyframe.Pass(), &keyframes_); } -double KeyframedFloatAnimationCurve::Duration() const { - return keyframes_.back()->Time() - keyframes_.front()->Time(); +base::TimeDelta KeyframedFloatAnimationCurve::Duration() const { + return base::TimeDelta::FromSecondsD(keyframes_.back()->Time() - + keyframes_.front()->Time()); } scoped_ptr<AnimationCurve> KeyframedFloatAnimationCurve::Clone() const { @@ -297,8 +299,9 @@ void KeyframedTransformAnimationCurve::AddKeyframe( InsertKeyframe(keyframe.Pass(), &keyframes_); } -double KeyframedTransformAnimationCurve::Duration() const { - return keyframes_.back()->Time() - keyframes_.front()->Time(); +base::TimeDelta KeyframedTransformAnimationCurve::Duration() const { + return base::TimeDelta::FromSecondsD(keyframes_.back()->Time() - + keyframes_.front()->Time()); } scoped_ptr<AnimationCurve> KeyframedTransformAnimationCurve::Clone() const { @@ -408,8 +411,9 @@ void KeyframedFilterAnimationCurve::AddKeyframe( InsertKeyframe(keyframe.Pass(), &keyframes_); } -double KeyframedFilterAnimationCurve::Duration() const { - return keyframes_.back()->Time() - keyframes_.front()->Time(); +base::TimeDelta KeyframedFilterAnimationCurve::Duration() const { + return base::TimeDelta::FromSecondsD(keyframes_.back()->Time() - + keyframes_.front()->Time()); } scoped_ptr<AnimationCurve> KeyframedFilterAnimationCurve::Clone() const { diff --git a/cc/animation/keyframed_animation_curve.h b/cc/animation/keyframed_animation_curve.h index a6e6740..ff746fe 100644 --- a/cc/animation/keyframed_animation_curve.h +++ b/cc/animation/keyframed_animation_curve.h @@ -5,6 +5,7 @@ #ifndef CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_ #define CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_ +#include "base/time/time.h" #include "cc/animation/animation_curve.h" #include "cc/animation/timing_function.h" #include "cc/animation/transform_operations.h" @@ -126,7 +127,7 @@ class CC_EXPORT KeyframedColorAnimationCurve : public ColorAnimationCurve { } // AnimationCurve implementation - double Duration() const override; + base::TimeDelta Duration() const override; scoped_ptr<AnimationCurve> Clone() const override; // BackgrounColorAnimationCurve implementation @@ -156,7 +157,7 @@ class CC_EXPORT KeyframedFloatAnimationCurve : public FloatAnimationCurve { } // AnimationCurve implementation - double Duration() const override; + base::TimeDelta Duration() const override; scoped_ptr<AnimationCurve> Clone() const override; // FloatAnimationCurve implementation @@ -187,7 +188,7 @@ class CC_EXPORT KeyframedTransformAnimationCurve } // AnimationCurve implementation - double Duration() const override; + base::TimeDelta Duration() const override; scoped_ptr<AnimationCurve> Clone() const override; // TransformAnimationCurve implementation @@ -224,7 +225,7 @@ class CC_EXPORT KeyframedFilterAnimationCurve } // AnimationCurve implementation - double Duration() const override; + base::TimeDelta Duration() const override; scoped_ptr<AnimationCurve> Clone() const override; // FilterAnimationCurve implementation diff --git a/cc/animation/layer_animation_controller.cc b/cc/animation/layer_animation_controller.cc index e34fc4a..f621ad3 100644 --- a/cc/animation/layer_animation_controller.cc +++ b/cc/animation/layer_animation_controller.cc @@ -148,7 +148,8 @@ void LayerAnimationController::AccumulatePropertyUpdates( if (!animation->InEffect(monotonic_time)) continue; - double trimmed = animation->TrimTimeToCurrentIteration(monotonic_time); + double trimmed = + animation->TrimTimeToCurrentIteration(monotonic_time).InSecondsF(); switch (animation->target_property()) { case Animation::Opacity: { AnimationEvent event(AnimationEvent::PropertyUpdate, @@ -860,8 +861,9 @@ void LayerAnimationController::TickAnimations(base::TimeTicks monotonic_time) { if (!animations_[i]->InEffect(monotonic_time)) continue; - double trimmed = - animations_[i]->TrimTimeToCurrentIteration(monotonic_time); + double trimmed = animations_[i] + ->TrimTimeToCurrentIteration(monotonic_time) + .InSecondsF(); switch (animations_[i]->target_property()) { case Animation::Transform: { diff --git a/cc/animation/layer_animation_controller_unittest.cc b/cc/animation/layer_animation_controller_unittest.cc index 49ac0a5..4fa3d84 100644 --- a/cc/animation/layer_animation_controller_unittest.cc +++ b/cc/animation/layer_animation_controller_unittest.cc @@ -673,14 +673,11 @@ TEST(LayerAnimationControllerTest, ScrollOffsetTransition) { controller->PushAnimationUpdatesTo(controller_impl.get()); controller_impl->ActivateAnimations(); EXPECT_TRUE(controller_impl->GetAnimation(Animation::ScrollOffset)); - double duration_in_seconds = - controller_impl->GetAnimation(Animation::ScrollOffset) - ->curve() - ->Duration(); - TimeDelta duration = TimeDelta::FromMicroseconds( - duration_in_seconds * base::Time::kMicrosecondsPerSecond); + TimeDelta duration = controller_impl->GetAnimation(Animation::ScrollOffset) + ->curve() + ->Duration(); EXPECT_EQ( - duration_in_seconds, + duration, controller->GetAnimation(Animation::ScrollOffset)->curve()->Duration()); controller->Animate(kInitialTickTime); @@ -755,12 +752,11 @@ TEST(LayerAnimationControllerTest, ScrollOffsetTransitionNoImplProvider) { controller->PushAnimationUpdatesTo(controller_impl.get()); controller_impl->ActivateAnimations(); EXPECT_TRUE(controller_impl->GetAnimation(Animation::ScrollOffset)); - double duration_in_seconds = - controller_impl->GetAnimation(Animation::ScrollOffset) - ->curve() - ->Duration(); + TimeDelta duration = controller_impl->GetAnimation(Animation::ScrollOffset) + ->curve() + ->Duration(); EXPECT_EQ( - duration_in_seconds, + duration, controller->GetAnimation(Animation::ScrollOffset)->curve()->Duration()); controller->Animate(kInitialTickTime); @@ -776,8 +772,6 @@ TEST(LayerAnimationControllerTest, ScrollOffsetTransitionNoImplProvider) { const AnimationEvent* event = GetMostRecentPropertyUpdateEvent(events.get()); EXPECT_FALSE(event); - TimeDelta duration = TimeDelta::FromMicroseconds( - duration_in_seconds * base::Time::kMicrosecondsPerSecond); controller->NotifyAnimationStarted((*events)[0]); controller->Animate(kInitialTickTime + duration / 2); @@ -820,7 +814,7 @@ TEST(LayerAnimationControllerTest, ScrollOffsetTransitionOnImplOnly) { target_value, EaseInOutTimingFunction::Create().Pass())); curve->SetInitialValue(initial_value); - double duration_in_seconds = curve->Duration(); + double duration_in_seconds = curve->Duration().InSecondsF(); scoped_ptr<Animation> animation( Animation::Create(curve.Pass(), 1, 0, Animation::ScrollOffset)); diff --git a/cc/animation/scroll_offset_animation_curve.cc b/cc/animation/scroll_offset_animation_curve.cc index 641c9e0..e0b1a3b5 100644 --- a/cc/animation/scroll_offset_animation_curve.cc +++ b/cc/animation/scroll_offset_animation_curve.cc @@ -83,8 +83,8 @@ gfx::ScrollOffset ScrollOffsetAnimationCurve::GetValue(double t) const { progress, initial_value_.y(), target_value_.y())); } -double ScrollOffsetAnimationCurve::Duration() const { - return total_animation_duration_.InSecondsF(); +base::TimeDelta ScrollOffsetAnimationCurve::Duration() const { + return total_animation_duration_; } AnimationCurve::CurveType ScrollOffsetAnimationCurve::Type() const { diff --git a/cc/animation/scroll_offset_animation_curve.h b/cc/animation/scroll_offset_animation_curve.h index 0c8692a..50dfb17 100644 --- a/cc/animation/scroll_offset_animation_curve.h +++ b/cc/animation/scroll_offset_animation_curve.h @@ -29,7 +29,7 @@ class CC_EXPORT ScrollOffsetAnimationCurve : public AnimationCurve { void UpdateTarget(double t, const gfx::ScrollOffset& new_target); // AnimationCurve implementation - double Duration() const override; + base::TimeDelta Duration() const override; CurveType Type() const override; scoped_ptr<AnimationCurve> Clone() const override; diff --git a/cc/animation/scroll_offset_animation_curve_unittest.cc b/cc/animation/scroll_offset_animation_curve_unittest.cc index d89784a0..d57814e 100644 --- a/cc/animation/scroll_offset_animation_curve_unittest.cc +++ b/cc/animation/scroll_offset_animation_curve_unittest.cc @@ -19,39 +19,39 @@ TEST(ScrollOffsetAnimationCurveTest, Duration) { EaseInOutTimingFunction::Create().Pass())); curve->SetInitialValue(target_value); - EXPECT_DOUBLE_EQ(0.0, curve->Duration()); + EXPECT_DOUBLE_EQ(0.0, curve->Duration().InSecondsF()); // x decreases, y stays the same. curve->SetInitialValue(gfx::ScrollOffset(136.f, 200.f)); - EXPECT_DOUBLE_EQ(0.1, curve->Duration()); + EXPECT_DOUBLE_EQ(0.1, curve->Duration().InSecondsF()); // x increases, y stays the same. curve->SetInitialValue(gfx::ScrollOffset(19.f, 200.f)); - EXPECT_DOUBLE_EQ(0.15, curve->Duration()); + EXPECT_DOUBLE_EQ(0.15, curve->Duration().InSecondsF()); // x stays the same, y decreases. curve->SetInitialValue(gfx::ScrollOffset(100.f, 344.f)); - EXPECT_DOUBLE_EQ(0.2, curve->Duration()); + EXPECT_DOUBLE_EQ(0.2, curve->Duration().InSecondsF()); // x stays the same, y increases. curve->SetInitialValue(gfx::ScrollOffset(100.f, 191.f)); - EXPECT_DOUBLE_EQ(0.05, curve->Duration()); + EXPECT_DOUBLE_EQ(0.05, curve->Duration().InSecondsF()); // x decreases, y decreases. curve->SetInitialValue(gfx::ScrollOffset(32500.f, 500.f)); - EXPECT_DOUBLE_EQ(3.0, curve->Duration()); + EXPECT_DOUBLE_EQ(3.0, curve->Duration().InSecondsF()); // x decreases, y increases. curve->SetInitialValue(gfx::ScrollOffset(150.f, 119.f)); - EXPECT_DOUBLE_EQ(0.15, curve->Duration()); + EXPECT_DOUBLE_EQ(0.15, curve->Duration().InSecondsF()); // x increases, y decreases. curve->SetInitialValue(gfx::ScrollOffset(0.f, 14600.f)); - EXPECT_DOUBLE_EQ(2.0, curve->Duration()); + EXPECT_DOUBLE_EQ(2.0, curve->Duration().InSecondsF()); // x increases, y increases. curve->SetInitialValue(gfx::ScrollOffset(95.f, 191.f)); - EXPECT_DOUBLE_EQ(0.05, curve->Duration()); + EXPECT_DOUBLE_EQ(0.05, curve->Duration().InSecondsF()); } TEST(ScrollOffsetAnimationCurveTest, GetValue) { @@ -63,22 +63,22 @@ TEST(ScrollOffsetAnimationCurveTest, GetValue) { EaseInOutTimingFunction::Create().Pass())); curve->SetInitialValue(initial_value); - double duration = curve->Duration(); - EXPECT_GT(curve->Duration(), 0); - EXPECT_LT(curve->Duration(), 0.1); + double duration_in_seconds = curve->Duration().InSecondsF(); + EXPECT_GT(curve->Duration().InSecondsF(), 0); + EXPECT_LT(curve->Duration().InSecondsF(), 0.1); EXPECT_EQ(AnimationCurve::ScrollOffset, curve->Type()); - EXPECT_EQ(duration, curve->Duration()); + EXPECT_EQ(duration_in_seconds, curve->Duration().InSecondsF()); EXPECT_VECTOR2DF_EQ(initial_value, curve->GetValue(-1.0)); EXPECT_VECTOR2DF_EQ(initial_value, curve->GetValue(0.0)); EXPECT_VECTOR2DF_EQ(gfx::ScrollOffset(6.f, 30.f), - curve->GetValue(duration/2.0)); - EXPECT_VECTOR2DF_EQ(target_value, curve->GetValue(duration)); - EXPECT_VECTOR2DF_EQ(target_value, curve->GetValue(duration+1.0)); + curve->GetValue(duration_in_seconds / 2.0)); + EXPECT_VECTOR2DF_EQ(target_value, curve->GetValue(duration_in_seconds)); + EXPECT_VECTOR2DF_EQ(target_value, curve->GetValue(duration_in_seconds + 1.0)); // Verify that GetValue takes the timing function into account. - gfx::ScrollOffset value = curve->GetValue(duration/4.0); + gfx::ScrollOffset value = curve->GetValue(duration_in_seconds / 4.0); EXPECT_NEAR(3.0333f, value.x(), 0.00015f); EXPECT_NEAR(37.4168f, value.y(), 0.00015f); } @@ -92,30 +92,30 @@ TEST(ScrollOffsetAnimationCurveTest, Clone) { target_value, EaseInOutTimingFunction::Create().Pass())); curve->SetInitialValue(initial_value); - double duration = curve->Duration(); + double duration_in_seconds = curve->Duration().InSecondsF(); scoped_ptr<AnimationCurve> clone(curve->Clone().Pass()); EXPECT_EQ(AnimationCurve::ScrollOffset, clone->Type()); - EXPECT_EQ(duration, clone->Duration()); + EXPECT_EQ(duration_in_seconds, clone->Duration().InSecondsF()); EXPECT_VECTOR2DF_EQ(initial_value, clone->ToScrollOffsetAnimationCurve()->GetValue(-1.0)); EXPECT_VECTOR2DF_EQ(initial_value, clone->ToScrollOffsetAnimationCurve()->GetValue(0.0)); - EXPECT_VECTOR2DF_EQ( - gfx::ScrollOffset(6.f, 30.f), - clone->ToScrollOffsetAnimationCurve()->GetValue(duration / 2.0)); - EXPECT_VECTOR2DF_EQ( - target_value, - clone->ToScrollOffsetAnimationCurve()->GetValue(duration)); + EXPECT_VECTOR2DF_EQ(gfx::ScrollOffset(6.f, 30.f), + clone->ToScrollOffsetAnimationCurve()->GetValue( + duration_in_seconds / 2.0)); EXPECT_VECTOR2DF_EQ( target_value, - clone->ToScrollOffsetAnimationCurve()->GetValue(duration + 1.0)); + clone->ToScrollOffsetAnimationCurve()->GetValue(duration_in_seconds)); + EXPECT_VECTOR2DF_EQ(target_value, + clone->ToScrollOffsetAnimationCurve()->GetValue( + duration_in_seconds + 1.0)); // Verify that the timing function was cloned correctly. - gfx::ScrollOffset value = - clone->ToScrollOffsetAnimationCurve()->GetValue(duration / 4.0); + gfx::ScrollOffset value = clone->ToScrollOffsetAnimationCurve()->GetValue( + duration_in_seconds / 4.0); EXPECT_NEAR(3.0333f, value.x(), 0.00015f); EXPECT_NEAR(37.4168f, value.y(), 0.00015f); } @@ -127,20 +127,20 @@ TEST(ScrollOffsetAnimationCurveTest, UpdateTarget) { ScrollOffsetAnimationCurve::Create( target_value, EaseInOutTimingFunction::Create().Pass())); curve->SetInitialValue(initial_value); - EXPECT_EQ(1.0, curve->Duration()); + EXPECT_EQ(1.0, curve->Duration().InSecondsF()); EXPECT_EQ(1800.0, curve->GetValue(0.5).y()); EXPECT_EQ(3600.0, curve->GetValue(1.0).y()); curve->UpdateTarget(0.5, gfx::ScrollOffset(0.0, 9900.0)); - EXPECT_EQ(2.0, curve->Duration()); + EXPECT_EQ(2.0, curve->Duration().InSecondsF()); EXPECT_EQ(1800.0, curve->GetValue(0.5).y()); EXPECT_NEAR(5566.49, curve->GetValue(1.0).y(), 0.01); EXPECT_EQ(9900.0, curve->GetValue(2.0).y()); curve->UpdateTarget(1.0, gfx::ScrollOffset(0.0, 7200.0)); - EXPECT_NEAR(1.674, curve->Duration(), 0.01); + EXPECT_NEAR(1.674, curve->Duration().InSecondsF(), 0.01); EXPECT_NEAR(5566.49, curve->GetValue(1.0).y(), 0.01); EXPECT_EQ(7200.0, curve->GetValue(1.674).y()); } diff --git a/cc/base/time_util.h b/cc/base/time_util.h new file mode 100644 index 0000000..dc07e74 --- /dev/null +++ b/cc/base/time_util.h @@ -0,0 +1,30 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CC_BASE_TIME_UTIL_H_ +#define CC_BASE_TIME_UTIL_H_ + +namespace base { +class TimeDelta; +} + +namespace cc { + +class CC_EXPORT TimeUtil { + public: + static base::TimeDelta Scale(base::TimeDelta time_delta, double value) { + return base::TimeDelta::FromInternalValue(static_cast<int64>( + static_cast<double>(time_delta.ToInternalValue()) * value)); + } + + static base::TimeDelta Mod(base::TimeDelta dividend, + base::TimeDelta divisor) { + return base::TimeDelta::FromInternalValue(dividend.ToInternalValue() % + divisor.ToInternalValue()); + } +}; + +} // namespace cc + +#endif // CC_BASE_TIME_UTIL_H_ diff --git a/cc/blink/web_scroll_offset_animation_curve_impl.cc b/cc/blink/web_scroll_offset_animation_curve_impl.cc index e789631..ba55d5b 100644 --- a/cc/blink/web_scroll_offset_animation_curve_impl.cc +++ b/cc/blink/web_scroll_offset_animation_curve_impl.cc @@ -39,7 +39,7 @@ WebFloatPoint WebScrollOffsetAnimationCurveImpl::getValue(double time) const { } double WebScrollOffsetAnimationCurveImpl::duration() const { - return curve_->Duration(); + return curve_->Duration().InSecondsF(); } scoped_ptr<cc::AnimationCurve> @@ -92,6 +92,7 @@ 'base/switches.h', 'base/tiling_data.cc', 'base/tiling_data.h', + 'base/time_util.h', 'base/unique_notifier.cc', 'base/unique_notifier.h', 'base/util.h', diff --git a/cc/test/animation_test_common.cc b/cc/test/animation_test_common.cc index 5ab8942..fba3166 100644 --- a/cc/test/animation_test_common.cc +++ b/cc/test/animation_test_common.cc @@ -124,14 +124,16 @@ int AddAnimatedFilter(Target* target, } FakeFloatAnimationCurve::FakeFloatAnimationCurve() - : duration_(1.0) {} + : duration_(base::TimeDelta::FromSecondsD(1.0)) { +} FakeFloatAnimationCurve::FakeFloatAnimationCurve(double duration) - : duration_(duration) {} + : duration_(base::TimeDelta::FromSecondsD(duration)) { +} FakeFloatAnimationCurve::~FakeFloatAnimationCurve() {} -double FakeFloatAnimationCurve::Duration() const { +base::TimeDelta FakeFloatAnimationCurve::Duration() const { return duration_; } @@ -144,11 +146,12 @@ scoped_ptr<AnimationCurve> FakeFloatAnimationCurve::Clone() const { } FakeTransformTransition::FakeTransformTransition(double duration) - : duration_(duration) {} + : duration_(base::TimeDelta::FromSecondsD(duration)) { +} FakeTransformTransition::~FakeTransformTransition() {} -double FakeTransformTransition::Duration() const { +base::TimeDelta FakeTransformTransition::Duration() const { return duration_; } @@ -175,18 +178,18 @@ scoped_ptr<AnimationCurve> FakeTransformTransition::Clone() const { return make_scoped_ptr(new FakeTransformTransition(*this)); } - FakeFloatTransition::FakeFloatTransition(double duration, float from, float to) - : duration_(duration), from_(from), to_(to) {} + : duration_(base::TimeDelta::FromSecondsD(duration)), from_(from), to_(to) { +} FakeFloatTransition::~FakeFloatTransition() {} -double FakeFloatTransition::Duration() const { +base::TimeDelta FakeFloatTransition::Duration() const { return duration_; } float FakeFloatTransition::GetValue(double time) const { - time /= duration_; + time /= duration_.InSecondsF(); if (time >= 1.0) time = 1.0; return (1.0 - time) * from_ + time * to_; diff --git a/cc/test/animation_test_common.h b/cc/test/animation_test_common.h index 328ae84..a69f0c9 100644 --- a/cc/test/animation_test_common.h +++ b/cc/test/animation_test_common.h @@ -26,12 +26,12 @@ class FakeFloatAnimationCurve : public FloatAnimationCurve { explicit FakeFloatAnimationCurve(double duration); ~FakeFloatAnimationCurve() override; - double Duration() const override; + base::TimeDelta Duration() const override; float GetValue(double now) const override; scoped_ptr<AnimationCurve> Clone() const override; private: - double duration_; + base::TimeDelta duration_; }; class FakeTransformTransition : public TransformAnimationCurve { @@ -39,7 +39,7 @@ class FakeTransformTransition : public TransformAnimationCurve { explicit FakeTransformTransition(double duration); ~FakeTransformTransition() override; - double Duration() const override; + base::TimeDelta Duration() const override; gfx::Transform GetValue(double time) const override; bool AnimatedBoundsForBox(const gfx::BoxF& box, gfx::BoxF* bounds) const override; @@ -51,7 +51,7 @@ class FakeTransformTransition : public TransformAnimationCurve { scoped_ptr<AnimationCurve> Clone() const override; private: - double duration_; + base::TimeDelta duration_; }; class FakeFloatTransition : public FloatAnimationCurve { @@ -59,13 +59,13 @@ class FakeFloatTransition : public FloatAnimationCurve { FakeFloatTransition(double duration, float from, float to); ~FakeFloatTransition() override; - double Duration() const override; + base::TimeDelta Duration() const override; float GetValue(double time) const override; scoped_ptr<AnimationCurve> Clone() const override; private: - double duration_; + base::TimeDelta duration_; float from_; float to_; }; diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index cfe9c4f..a2f4f32 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc @@ -2369,9 +2369,10 @@ InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( new_target.SetToMax(gfx::ScrollOffset()); new_target.SetToMin(layer_impl->MaxScrollOffset()); - curve->UpdateTarget(animation->TrimTimeToCurrentIteration( - CurrentBeginFrameArgs().frame_time), - new_target); + curve->UpdateTarget( + animation->TrimTimeToCurrentIteration( + CurrentBeginFrameArgs().frame_time).InSecondsF(), + new_target); return ScrollStarted; } diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc index 470be01..9c346e2 100644 --- a/cc/trees/layer_tree_host_unittest_animation.cc +++ b/cc/trees/layer_tree_host_unittest_animation.cc @@ -504,10 +504,10 @@ class LayerTreeHostAnimationTestAddAnimationWithTimingFunction const FloatAnimationCurve* curve = animation->curve()->ToFloatAnimationCurve(); float start_opacity = curve->GetValue(0.0); - float end_opacity = curve->GetValue(curve->Duration()); + float end_opacity = curve->GetValue(curve->Duration().InSecondsF()); float linearly_interpolated_opacity = 0.25f * end_opacity + 0.75f * start_opacity; - double time = curve->Duration() * 0.25; + double time = curve->Duration().InSecondsF() * 0.25; // If the linear timing function associated with this animation was not // picked up, then the linearly interpolated opacity would be different // because of the default ease timing function. diff --git a/ui/compositor/float_animation_curve_adapter.cc b/ui/compositor/float_animation_curve_adapter.cc index 308fc1e..3b5e155 100644 --- a/ui/compositor/float_animation_curve_adapter.cc +++ b/ui/compositor/float_animation_curve_adapter.cc @@ -17,8 +17,8 @@ FloatAnimationCurveAdapter::FloatAnimationCurveAdapter( duration_(duration) { } -double FloatAnimationCurveAdapter::Duration() const { - return duration_.InSecondsF(); +base::TimeDelta FloatAnimationCurveAdapter::Duration() const { + return duration_; } scoped_ptr<cc::AnimationCurve> FloatAnimationCurveAdapter::Clone() const { diff --git a/ui/compositor/float_animation_curve_adapter.h b/ui/compositor/float_animation_curve_adapter.h index 1c7b8b3..88d5870 100644 --- a/ui/compositor/float_animation_curve_adapter.h +++ b/ui/compositor/float_animation_curve_adapter.h @@ -21,7 +21,7 @@ class FloatAnimationCurveAdapter : public cc::FloatAnimationCurve { ~FloatAnimationCurveAdapter() override {} // FloatAnimationCurve implementation. - double Duration() const override; + base::TimeDelta Duration() const override; scoped_ptr<cc::AnimationCurve> Clone() const override; float GetValue(double t) const override; diff --git a/ui/compositor/transform_animation_curve_adapter.cc b/ui/compositor/transform_animation_curve_adapter.cc index fa73140..2c11488 100644 --- a/ui/compositor/transform_animation_curve_adapter.cc +++ b/ui/compositor/transform_animation_curve_adapter.cc @@ -22,8 +22,8 @@ TransformAnimationCurveAdapter::TransformAnimationCurveAdapter( TransformAnimationCurveAdapter::~TransformAnimationCurveAdapter() { } -double TransformAnimationCurveAdapter::Duration() const { - return duration_.InSecondsF(); +base::TimeDelta TransformAnimationCurveAdapter::Duration() const { + return duration_; } scoped_ptr<cc::AnimationCurve> TransformAnimationCurveAdapter::Clone() const { @@ -86,8 +86,8 @@ InverseTransformCurveAdapter::InverseTransformCurveAdapter( InverseTransformCurveAdapter::~InverseTransformCurveAdapter() { } -double InverseTransformCurveAdapter::Duration() const { - return duration_.InSeconds(); +base::TimeDelta InverseTransformCurveAdapter::Duration() const { + return duration_; } scoped_ptr<cc::AnimationCurve> InverseTransformCurveAdapter::Clone() const { diff --git a/ui/compositor/transform_animation_curve_adapter.h b/ui/compositor/transform_animation_curve_adapter.h index 7aa318e..c08024d 100644 --- a/ui/compositor/transform_animation_curve_adapter.h +++ b/ui/compositor/transform_animation_curve_adapter.h @@ -25,7 +25,7 @@ class COMPOSITOR_EXPORT TransformAnimationCurveAdapter ~TransformAnimationCurveAdapter() override; // TransformAnimationCurve implementation. - double Duration() const override; + base::TimeDelta Duration() const override; scoped_ptr<AnimationCurve> Clone() const override; gfx::Transform GetValue(double t) const override; bool AnimatedBoundsForBox(const gfx::BoxF& box, @@ -55,7 +55,7 @@ class COMPOSITOR_EXPORT InverseTransformCurveAdapter ~InverseTransformCurveAdapter() override; - double Duration() const override; + base::TimeDelta Duration() const override; scoped_ptr<AnimationCurve> Clone() const override; gfx::Transform GetValue(double t) const override; bool AnimatedBoundsForBox(const gfx::BoxF& box, |