| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/logging.h" | 5 #include "base/logging.h" |
| 6 #include "base/test/simple_test_tick_clock.h" | 6 #include "base/test/simple_test_tick_clock.h" |
| 7 #include "media/base/clock.h" | 7 #include "media/base/time_delta_interpolator.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace media { | 10 namespace media { |
| 11 | 11 |
| 12 class ClockTest : public ::testing::Test { | 12 class TimeDeltaInterpolatorTest : public ::testing::Test { |
| 13 public: | 13 public: |
| 14 ClockTest() : clock_(&test_tick_clock_) {} | 14 TimeDeltaInterpolatorTest() : interpolator_(&test_tick_clock_) {} |
| 15 | 15 |
| 16 protected: | 16 protected: |
| 17 void AdvanceSystemTime(base::TimeDelta delta) { | 17 void AdvanceSystemTime(base::TimeDelta delta) { |
| 18 test_tick_clock_.Advance(delta); | 18 test_tick_clock_.Advance(delta); |
| 19 } | 19 } |
| 20 | 20 |
| 21 base::SimpleTestTickClock test_tick_clock_; | 21 base::SimpleTestTickClock test_tick_clock_; |
| 22 Clock clock_; | 22 TimeDeltaInterpolator interpolator_; |
| 23 base::TimeDelta time_elapsed_; | 23 base::TimeDelta time_elapsed_; |
| 24 }; | 24 }; |
| 25 | 25 |
| 26 TEST_F(ClockTest, Created) { | 26 TEST_F(TimeDeltaInterpolatorTest, Created) { |
| 27 const base::TimeDelta kExpected = base::TimeDelta::FromSeconds(0); | 27 const base::TimeDelta kExpected = base::TimeDelta::FromSeconds(0); |
| 28 EXPECT_EQ(kExpected, clock_.Elapsed()); | 28 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
| 29 } | 29 } |
| 30 | 30 |
| 31 TEST_F(ClockTest, Play_NormalSpeed) { | 31 TEST_F(TimeDeltaInterpolatorTest, Play_NormalSpeed) { |
| 32 const base::TimeDelta kZero; | 32 const base::TimeDelta kZero; |
| 33 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(2); | 33 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(2); |
| 34 | 34 |
| 35 EXPECT_EQ(kZero, clock_.Play()); | 35 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 36 AdvanceSystemTime(kTimeToAdvance); | 36 AdvanceSystemTime(kTimeToAdvance); |
| 37 EXPECT_EQ(kTimeToAdvance, clock_.Elapsed()); | 37 EXPECT_EQ(kTimeToAdvance, interpolator_.GetInterpolatedTime()); |
| 38 } | 38 } |
| 39 | 39 |
| 40 TEST_F(ClockTest, Play_DoubleSpeed) { | 40 TEST_F(TimeDeltaInterpolatorTest, Play_DoubleSpeed) { |
| 41 const base::TimeDelta kZero; | 41 const base::TimeDelta kZero; |
| 42 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(5); | 42 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(5); |
| 43 | 43 |
| 44 clock_.SetPlaybackRate(2.0f); | 44 interpolator_.SetPlaybackRate(2.0f); |
| 45 EXPECT_EQ(kZero, clock_.Play()); | 45 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 46 AdvanceSystemTime(kTimeToAdvance); | 46 AdvanceSystemTime(kTimeToAdvance); |
| 47 EXPECT_EQ(2 * kTimeToAdvance, clock_.Elapsed()); | 47 EXPECT_EQ(2 * kTimeToAdvance, interpolator_.GetInterpolatedTime()); |
| 48 } | 48 } |
| 49 | 49 |
| 50 TEST_F(ClockTest, Play_HalfSpeed) { | 50 TEST_F(TimeDeltaInterpolatorTest, Play_HalfSpeed) { |
| 51 const base::TimeDelta kZero; | 51 const base::TimeDelta kZero; |
| 52 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(4); | 52 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(4); |
| 53 | 53 |
| 54 clock_.SetPlaybackRate(0.5f); | 54 interpolator_.SetPlaybackRate(0.5f); |
| 55 EXPECT_EQ(kZero, clock_.Play()); | 55 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 56 AdvanceSystemTime(kTimeToAdvance); | 56 AdvanceSystemTime(kTimeToAdvance); |
| 57 EXPECT_EQ(kTimeToAdvance / 2, clock_.Elapsed()); | 57 EXPECT_EQ(kTimeToAdvance / 2, interpolator_.GetInterpolatedTime()); |
| 58 } | 58 } |
| 59 | 59 |
| 60 TEST_F(ClockTest, Play_ZeroSpeed) { | 60 TEST_F(TimeDeltaInterpolatorTest, Play_ZeroSpeed) { |
| 61 // We'll play for 2 seconds at normal speed, 4 seconds at zero speed, and 8 | 61 // We'll play for 2 seconds at normal speed, 4 seconds at zero speed, and 8 |
| 62 // seconds at normal speed. | 62 // seconds at normal speed. |
| 63 const base::TimeDelta kZero; | 63 const base::TimeDelta kZero; |
| 64 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); | 64 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); |
| 65 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); | 65 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); |
| 66 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); | 66 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); |
| 67 const base::TimeDelta kExpected = kPlayDuration1 + kPlayDuration3; | 67 const base::TimeDelta kExpected = kPlayDuration1 + kPlayDuration3; |
| 68 | 68 |
| 69 EXPECT_EQ(kZero, clock_.Play()); | 69 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 70 | 70 |
| 71 AdvanceSystemTime(kPlayDuration1); | 71 AdvanceSystemTime(kPlayDuration1); |
| 72 clock_.SetPlaybackRate(0.0f); | 72 interpolator_.SetPlaybackRate(0.0f); |
| 73 AdvanceSystemTime(kPlayDuration2); | 73 AdvanceSystemTime(kPlayDuration2); |
| 74 clock_.SetPlaybackRate(1.0f); | 74 interpolator_.SetPlaybackRate(1.0f); |
| 75 AdvanceSystemTime(kPlayDuration3); | 75 AdvanceSystemTime(kPlayDuration3); |
| 76 | 76 |
| 77 EXPECT_EQ(kExpected, clock_.Elapsed()); | 77 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
| 78 } | 78 } |
| 79 | 79 |
| 80 TEST_F(ClockTest, Play_MultiSpeed) { | 80 TEST_F(TimeDeltaInterpolatorTest, Play_MultiSpeed) { |
| 81 // We'll play for 2 seconds at half speed, 4 seconds at normal speed, and 8 | 81 // We'll play for 2 seconds at half speed, 4 seconds at normal speed, and 8 |
| 82 // seconds at double speed. | 82 // seconds at double speed. |
| 83 const base::TimeDelta kZero; | 83 const base::TimeDelta kZero; |
| 84 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); | 84 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); |
| 85 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); | 85 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); |
| 86 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); | 86 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); |
| 87 const base::TimeDelta kExpected = | 87 const base::TimeDelta kExpected = |
| 88 kPlayDuration1 / 2 + kPlayDuration2 + 2 * kPlayDuration3; | 88 kPlayDuration1 / 2 + kPlayDuration2 + 2 * kPlayDuration3; |
| 89 | 89 |
| 90 clock_.SetPlaybackRate(0.5f); | 90 interpolator_.SetPlaybackRate(0.5f); |
| 91 EXPECT_EQ(kZero, clock_.Play()); | 91 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 92 AdvanceSystemTime(kPlayDuration1); | 92 AdvanceSystemTime(kPlayDuration1); |
| 93 | 93 |
| 94 clock_.SetPlaybackRate(1.0f); | 94 interpolator_.SetPlaybackRate(1.0f); |
| 95 AdvanceSystemTime(kPlayDuration2); | 95 AdvanceSystemTime(kPlayDuration2); |
| 96 | 96 |
| 97 clock_.SetPlaybackRate(2.0f); | 97 interpolator_.SetPlaybackRate(2.0f); |
| 98 AdvanceSystemTime(kPlayDuration3); | 98 AdvanceSystemTime(kPlayDuration3); |
| 99 EXPECT_EQ(kExpected, clock_.Elapsed()); | 99 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
| 100 } | 100 } |
| 101 | 101 |
| 102 TEST_F(ClockTest, Pause) { | 102 TEST_F(TimeDeltaInterpolatorTest, Pause) { |
| 103 const base::TimeDelta kZero; | 103 const base::TimeDelta kZero; |
| 104 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); | 104 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); |
| 105 const base::TimeDelta kPauseDuration = base::TimeDelta::FromSeconds(20); | 105 const base::TimeDelta kPauseDuration = base::TimeDelta::FromSeconds(20); |
| 106 const base::TimeDelta kExpectedFirstPause = kPlayDuration; | 106 const base::TimeDelta kExpectedFirstPause = kPlayDuration; |
| 107 const base::TimeDelta kExpectedSecondPause = 2 * kPlayDuration; | 107 const base::TimeDelta kExpectedSecondPause = 2 * kPlayDuration; |
| 108 | 108 |
| 109 // Play for 4 seconds. | 109 // Play for 4 seconds. |
| 110 EXPECT_EQ(kZero, clock_.Play()); | 110 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 111 AdvanceSystemTime(kPlayDuration); | 111 AdvanceSystemTime(kPlayDuration); |
| 112 | 112 |
| 113 // Pause for 20 seconds. | 113 // Pause for 20 seconds. |
| 114 EXPECT_EQ(kExpectedFirstPause, clock_.Pause()); | 114 EXPECT_EQ(kExpectedFirstPause, interpolator_.StopInterpolating()); |
| 115 EXPECT_EQ(kExpectedFirstPause, clock_.Elapsed()); | 115 EXPECT_EQ(kExpectedFirstPause, interpolator_.GetInterpolatedTime()); |
| 116 AdvanceSystemTime(kPauseDuration); | 116 AdvanceSystemTime(kPauseDuration); |
| 117 EXPECT_EQ(kExpectedFirstPause, clock_.Elapsed()); | 117 EXPECT_EQ(kExpectedFirstPause, interpolator_.GetInterpolatedTime()); |
| 118 | 118 |
| 119 // Play again for 4 more seconds. | 119 // Play again for 4 more seconds. |
| 120 EXPECT_EQ(kExpectedFirstPause, clock_.Play()); | 120 EXPECT_EQ(kExpectedFirstPause, interpolator_.StartInterpolating()); |
| 121 AdvanceSystemTime(kPlayDuration); | 121 AdvanceSystemTime(kPlayDuration); |
| 122 EXPECT_EQ(kExpectedSecondPause, clock_.Pause()); | 122 EXPECT_EQ(kExpectedSecondPause, interpolator_.StopInterpolating()); |
| 123 EXPECT_EQ(kExpectedSecondPause, clock_.Elapsed()); | 123 EXPECT_EQ(kExpectedSecondPause, interpolator_.GetInterpolatedTime()); |
| 124 } | 124 } |
| 125 | 125 |
| 126 TEST_F(ClockTest, SetTime_Paused) { | 126 TEST_F(TimeDeltaInterpolatorTest, SetTime_Paused) { |
| 127 const base::TimeDelta kFirstTime = base::TimeDelta::FromSeconds(4); | 127 const base::TimeDelta kFirstTime = base::TimeDelta::FromSeconds(4); |
| 128 const base::TimeDelta kSecondTime = base::TimeDelta::FromSeconds(16); | 128 const base::TimeDelta kSecondTime = base::TimeDelta::FromSeconds(16); |
| 129 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); | 129 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); |
| 130 | 130 |
| 131 clock_.SetTime(kFirstTime, kArbitraryMaxTime); | 131 interpolator_.SetTime(kFirstTime, kArbitraryMaxTime); |
| 132 EXPECT_EQ(kFirstTime, clock_.Elapsed()); | 132 EXPECT_EQ(kFirstTime, interpolator_.GetInterpolatedTime()); |
| 133 clock_.SetTime(kSecondTime, kArbitraryMaxTime); | 133 interpolator_.SetTime(kSecondTime, kArbitraryMaxTime); |
| 134 EXPECT_EQ(kSecondTime, clock_.Elapsed()); | 134 EXPECT_EQ(kSecondTime, interpolator_.GetInterpolatedTime()); |
| 135 } | 135 } |
| 136 | 136 |
| 137 TEST_F(ClockTest, SetTime_Playing) { | 137 TEST_F(TimeDeltaInterpolatorTest, SetTime_Playing) { |
| 138 // We'll play for 4 seconds, then set the time to 12, then play for 4 more | 138 // We'll play for 4 seconds, then set the time to 12, then play for 4 more |
| 139 // seconds. | 139 // seconds. |
| 140 const base::TimeDelta kZero; | 140 const base::TimeDelta kZero; |
| 141 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); | 141 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); |
| 142 const base::TimeDelta kUpdatedTime = base::TimeDelta::FromSeconds(12); | 142 const base::TimeDelta kUpdatedTime = base::TimeDelta::FromSeconds(12); |
| 143 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); | 143 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); |
| 144 const base::TimeDelta kExpected = kUpdatedTime + kPlayDuration; | 144 const base::TimeDelta kExpected = kUpdatedTime + kPlayDuration; |
| 145 | 145 |
| 146 EXPECT_EQ(kZero, clock_.Play()); | 146 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 147 AdvanceSystemTime(kPlayDuration); | 147 AdvanceSystemTime(kPlayDuration); |
| 148 | 148 |
| 149 clock_.SetTime(kUpdatedTime, kArbitraryMaxTime); | 149 interpolator_.SetTime(kUpdatedTime, kArbitraryMaxTime); |
| 150 AdvanceSystemTime(kPlayDuration); | 150 AdvanceSystemTime(kPlayDuration); |
| 151 EXPECT_EQ(kExpected, clock_.Elapsed()); | 151 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
| 152 } | 152 } |
| 153 | 153 |
| 154 TEST_F(ClockTest, SetMaxTime) { | 154 TEST_F(TimeDeltaInterpolatorTest, SetMaxTime) { |
| 155 const base::TimeDelta kZero; | 155 const base::TimeDelta kZero; |
| 156 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); | 156 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); |
| 157 const base::TimeDelta kMaxTime = base::TimeDelta::FromSeconds(6); | 157 const base::TimeDelta kMaxTime = base::TimeDelta::FromSeconds(6); |
| 158 | 158 |
| 159 EXPECT_EQ(kZero, clock_.Play()); | 159 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 160 clock_.SetMaxTime(kMaxTime); | 160 interpolator_.SetMaxTime(kMaxTime); |
| 161 AdvanceSystemTime(kTimeInterval); | 161 AdvanceSystemTime(kTimeInterval); |
| 162 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); | 162 EXPECT_EQ(kTimeInterval, interpolator_.GetInterpolatedTime()); |
| 163 | 163 |
| 164 AdvanceSystemTime(kTimeInterval); | 164 AdvanceSystemTime(kTimeInterval); |
| 165 EXPECT_EQ(kMaxTime, clock_.Elapsed()); | 165 EXPECT_EQ(kMaxTime, interpolator_.GetInterpolatedTime()); |
| 166 | 166 |
| 167 AdvanceSystemTime(kTimeInterval); | 167 AdvanceSystemTime(kTimeInterval); |
| 168 EXPECT_EQ(kMaxTime, clock_.Elapsed()); | 168 EXPECT_EQ(kMaxTime, interpolator_.GetInterpolatedTime()); |
| 169 } | 169 } |
| 170 | 170 |
| 171 TEST_F(ClockTest, SetMaxTime_MultipleTimes) { | 171 TEST_F(TimeDeltaInterpolatorTest, SetMaxTime_MultipleTimes) { |
| 172 const base::TimeDelta kZero; | 172 const base::TimeDelta kZero; |
| 173 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); | 173 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); |
| 174 const base::TimeDelta kMaxTime0 = base::TimeDelta::FromSeconds(120); | 174 const base::TimeDelta kMaxTime0 = base::TimeDelta::FromSeconds(120); |
| 175 const base::TimeDelta kMaxTime1 = base::TimeDelta::FromSeconds(6); | 175 const base::TimeDelta kMaxTime1 = base::TimeDelta::FromSeconds(6); |
| 176 const base::TimeDelta kMaxTime2 = base::TimeDelta::FromSeconds(12); | 176 const base::TimeDelta kMaxTime2 = base::TimeDelta::FromSeconds(12); |
| 177 | 177 |
| 178 EXPECT_EQ(kZero, clock_.Play()); | 178 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
| 179 clock_.SetMaxTime(kMaxTime0); | 179 interpolator_.SetMaxTime(kMaxTime0); |
| 180 AdvanceSystemTime(kTimeInterval); | 180 AdvanceSystemTime(kTimeInterval); |
| 181 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); | 181 EXPECT_EQ(kTimeInterval, interpolator_.GetInterpolatedTime()); |
| 182 | 182 |
| 183 clock_.SetMaxTime(kMaxTime1); | 183 interpolator_.SetMaxTime(kMaxTime1); |
| 184 AdvanceSystemTime(kTimeInterval); | 184 AdvanceSystemTime(kTimeInterval); |
| 185 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 185 EXPECT_EQ(kMaxTime1, interpolator_.GetInterpolatedTime()); |
| 186 | 186 |
| 187 AdvanceSystemTime(kTimeInterval); | 187 AdvanceSystemTime(kTimeInterval); |
| 188 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 188 EXPECT_EQ(kMaxTime1, interpolator_.GetInterpolatedTime()); |
| 189 | 189 |
| 190 clock_.SetMaxTime(kMaxTime2); | 190 interpolator_.SetMaxTime(kMaxTime2); |
| 191 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 191 EXPECT_EQ(kMaxTime1, interpolator_.GetInterpolatedTime()); |
| 192 | 192 |
| 193 AdvanceSystemTime(kTimeInterval); | 193 AdvanceSystemTime(kTimeInterval); |
| 194 EXPECT_EQ(kMaxTime1 + kTimeInterval, clock_.Elapsed()); | 194 EXPECT_EQ(kMaxTime1 + kTimeInterval, interpolator_.GetInterpolatedTime()); |
| 195 | 195 |
| 196 AdvanceSystemTime(kTimeInterval); | 196 AdvanceSystemTime(kTimeInterval); |
| 197 EXPECT_EQ(kMaxTime2, clock_.Elapsed()); | 197 EXPECT_EQ(kMaxTime2, interpolator_.GetInterpolatedTime()); |
| 198 } | 198 } |
| 199 | 199 |
| 200 } // namespace media | 200 } // namespace media |
| OLD | NEW |