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_; | |
24 }; | 23 }; |
25 | 24 |
26 TEST_F(ClockTest, Created) { | 25 TEST_F(TimeDeltaInterpolatorTest, Created) { |
27 const base::TimeDelta kExpected = base::TimeDelta::FromSeconds(0); | 26 const base::TimeDelta kExpected = base::TimeDelta::FromSeconds(0); |
28 EXPECT_EQ(kExpected, clock_.Elapsed()); | 27 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
29 } | 28 } |
30 | 29 |
31 TEST_F(ClockTest, Play_NormalSpeed) { | 30 TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_NormalSpeed) { |
32 const base::TimeDelta kZero; | 31 const base::TimeDelta kZero; |
33 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(2); | 32 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(2); |
34 | 33 |
35 EXPECT_EQ(kZero, clock_.Play()); | 34 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
36 AdvanceSystemTime(kTimeToAdvance); | 35 AdvanceSystemTime(kTimeToAdvance); |
37 EXPECT_EQ(kTimeToAdvance, clock_.Elapsed()); | 36 EXPECT_EQ(kTimeToAdvance, interpolator_.GetInterpolatedTime()); |
38 } | 37 } |
39 | 38 |
40 TEST_F(ClockTest, Play_DoubleSpeed) { | 39 TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_DoubleSpeed) { |
41 const base::TimeDelta kZero; | 40 const base::TimeDelta kZero; |
42 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(5); | 41 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(5); |
43 | 42 |
44 clock_.SetPlaybackRate(2.0f); | 43 interpolator_.SetPlaybackRate(2.0f); |
45 EXPECT_EQ(kZero, clock_.Play()); | 44 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
46 AdvanceSystemTime(kTimeToAdvance); | 45 AdvanceSystemTime(kTimeToAdvance); |
47 EXPECT_EQ(2 * kTimeToAdvance, clock_.Elapsed()); | 46 EXPECT_EQ(2 * kTimeToAdvance, interpolator_.GetInterpolatedTime()); |
48 } | 47 } |
49 | 48 |
50 TEST_F(ClockTest, Play_HalfSpeed) { | 49 TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_HalfSpeed) { |
51 const base::TimeDelta kZero; | 50 const base::TimeDelta kZero; |
52 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(4); | 51 const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(4); |
53 | 52 |
54 clock_.SetPlaybackRate(0.5f); | 53 interpolator_.SetPlaybackRate(0.5f); |
55 EXPECT_EQ(kZero, clock_.Play()); | 54 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
56 AdvanceSystemTime(kTimeToAdvance); | 55 AdvanceSystemTime(kTimeToAdvance); |
57 EXPECT_EQ(kTimeToAdvance / 2, clock_.Elapsed()); | 56 EXPECT_EQ(kTimeToAdvance / 2, interpolator_.GetInterpolatedTime()); |
58 } | 57 } |
59 | 58 |
60 TEST_F(ClockTest, Play_ZeroSpeed) { | 59 TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_ZeroSpeed) { |
61 // We'll play for 2 seconds at normal speed, 4 seconds at zero speed, and 8 | 60 // We'll play for 2 seconds at normal speed, 4 seconds at zero speed, and 8 |
62 // seconds at normal speed. | 61 // seconds at normal speed. |
63 const base::TimeDelta kZero; | 62 const base::TimeDelta kZero; |
64 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); | 63 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); |
65 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); | 64 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); |
66 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); | 65 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); |
67 const base::TimeDelta kExpected = kPlayDuration1 + kPlayDuration3; | 66 const base::TimeDelta kExpected = kPlayDuration1 + kPlayDuration3; |
68 | 67 |
69 EXPECT_EQ(kZero, clock_.Play()); | 68 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
70 | 69 |
71 AdvanceSystemTime(kPlayDuration1); | 70 AdvanceSystemTime(kPlayDuration1); |
72 clock_.SetPlaybackRate(0.0f); | 71 interpolator_.SetPlaybackRate(0.0f); |
73 AdvanceSystemTime(kPlayDuration2); | 72 AdvanceSystemTime(kPlayDuration2); |
74 clock_.SetPlaybackRate(1.0f); | 73 interpolator_.SetPlaybackRate(1.0f); |
75 AdvanceSystemTime(kPlayDuration3); | 74 AdvanceSystemTime(kPlayDuration3); |
76 | 75 |
77 EXPECT_EQ(kExpected, clock_.Elapsed()); | 76 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
78 } | 77 } |
79 | 78 |
80 TEST_F(ClockTest, Play_MultiSpeed) { | 79 TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_MultiSpeed) { |
81 // We'll play for 2 seconds at half speed, 4 seconds at normal speed, and 8 | 80 // We'll play for 2 seconds at half speed, 4 seconds at normal speed, and 8 |
82 // seconds at double speed. | 81 // seconds at double speed. |
83 const base::TimeDelta kZero; | 82 const base::TimeDelta kZero; |
84 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); | 83 const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2); |
85 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); | 84 const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4); |
86 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); | 85 const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8); |
87 const base::TimeDelta kExpected = | 86 const base::TimeDelta kExpected = |
88 kPlayDuration1 / 2 + kPlayDuration2 + 2 * kPlayDuration3; | 87 kPlayDuration1 / 2 + kPlayDuration2 + 2 * kPlayDuration3; |
89 | 88 |
90 clock_.SetPlaybackRate(0.5f); | 89 interpolator_.SetPlaybackRate(0.5f); |
91 EXPECT_EQ(kZero, clock_.Play()); | 90 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
92 AdvanceSystemTime(kPlayDuration1); | 91 AdvanceSystemTime(kPlayDuration1); |
93 | 92 |
94 clock_.SetPlaybackRate(1.0f); | 93 interpolator_.SetPlaybackRate(1.0f); |
95 AdvanceSystemTime(kPlayDuration2); | 94 AdvanceSystemTime(kPlayDuration2); |
96 | 95 |
97 clock_.SetPlaybackRate(2.0f); | 96 interpolator_.SetPlaybackRate(2.0f); |
98 AdvanceSystemTime(kPlayDuration3); | 97 AdvanceSystemTime(kPlayDuration3); |
99 EXPECT_EQ(kExpected, clock_.Elapsed()); | 98 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
100 } | 99 } |
101 | 100 |
102 TEST_F(ClockTest, Pause) { | 101 TEST_F(TimeDeltaInterpolatorTest, StopInterpolating) { |
103 const base::TimeDelta kZero; | 102 const base::TimeDelta kZero; |
104 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); | 103 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); |
105 const base::TimeDelta kPauseDuration = base::TimeDelta::FromSeconds(20); | 104 const base::TimeDelta kPauseDuration = base::TimeDelta::FromSeconds(20); |
106 const base::TimeDelta kExpectedFirstPause = kPlayDuration; | 105 const base::TimeDelta kExpectedFirstPause = kPlayDuration; |
107 const base::TimeDelta kExpectedSecondPause = 2 * kPlayDuration; | 106 const base::TimeDelta kExpectedSecondPause = 2 * kPlayDuration; |
108 | 107 |
109 // Play for 4 seconds. | 108 // Play for 4 seconds. |
110 EXPECT_EQ(kZero, clock_.Play()); | 109 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
111 AdvanceSystemTime(kPlayDuration); | 110 AdvanceSystemTime(kPlayDuration); |
112 | 111 |
113 // Pause for 20 seconds. | 112 // Pause for 20 seconds. |
114 EXPECT_EQ(kExpectedFirstPause, clock_.Pause()); | 113 EXPECT_EQ(kExpectedFirstPause, interpolator_.StopInterpolating()); |
115 EXPECT_EQ(kExpectedFirstPause, clock_.Elapsed()); | 114 EXPECT_EQ(kExpectedFirstPause, interpolator_.GetInterpolatedTime()); |
116 AdvanceSystemTime(kPauseDuration); | 115 AdvanceSystemTime(kPauseDuration); |
117 EXPECT_EQ(kExpectedFirstPause, clock_.Elapsed()); | 116 EXPECT_EQ(kExpectedFirstPause, interpolator_.GetInterpolatedTime()); |
118 | 117 |
119 // Play again for 4 more seconds. | 118 // Play again for 4 more seconds. |
120 EXPECT_EQ(kExpectedFirstPause, clock_.Play()); | 119 EXPECT_EQ(kExpectedFirstPause, interpolator_.StartInterpolating()); |
121 AdvanceSystemTime(kPlayDuration); | 120 AdvanceSystemTime(kPlayDuration); |
122 EXPECT_EQ(kExpectedSecondPause, clock_.Pause()); | 121 EXPECT_EQ(kExpectedSecondPause, interpolator_.StopInterpolating()); |
123 EXPECT_EQ(kExpectedSecondPause, clock_.Elapsed()); | 122 EXPECT_EQ(kExpectedSecondPause, interpolator_.GetInterpolatedTime()); |
124 } | 123 } |
125 | 124 |
126 TEST_F(ClockTest, SetTime_Paused) { | 125 TEST_F(TimeDeltaInterpolatorTest, SetBounds_Stopped) { |
127 const base::TimeDelta kFirstTime = base::TimeDelta::FromSeconds(4); | 126 const base::TimeDelta kFirstTime = base::TimeDelta::FromSeconds(4); |
128 const base::TimeDelta kSecondTime = base::TimeDelta::FromSeconds(16); | 127 const base::TimeDelta kSecondTime = base::TimeDelta::FromSeconds(16); |
129 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); | 128 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); |
130 | 129 |
131 clock_.SetTime(kFirstTime, kArbitraryMaxTime); | 130 interpolator_.SetBounds(kFirstTime, kArbitraryMaxTime); |
132 EXPECT_EQ(kFirstTime, clock_.Elapsed()); | 131 EXPECT_EQ(kFirstTime, interpolator_.GetInterpolatedTime()); |
133 clock_.SetTime(kSecondTime, kArbitraryMaxTime); | 132 interpolator_.SetBounds(kSecondTime, kArbitraryMaxTime); |
134 EXPECT_EQ(kSecondTime, clock_.Elapsed()); | 133 EXPECT_EQ(kSecondTime, interpolator_.GetInterpolatedTime()); |
135 } | 134 } |
136 | 135 |
137 TEST_F(ClockTest, SetTime_Playing) { | 136 TEST_F(TimeDeltaInterpolatorTest, SetBounds_Started) { |
138 // We'll play for 4 seconds, then set the time to 12, then play for 4 more | 137 // We'll play for 4 seconds, then set the time to 12, then play for 4 more |
139 // seconds. | 138 // seconds. |
140 const base::TimeDelta kZero; | 139 const base::TimeDelta kZero; |
141 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); | 140 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); |
142 const base::TimeDelta kUpdatedTime = base::TimeDelta::FromSeconds(12); | 141 const base::TimeDelta kUpdatedTime = base::TimeDelta::FromSeconds(12); |
143 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); | 142 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); |
144 const base::TimeDelta kExpected = kUpdatedTime + kPlayDuration; | 143 const base::TimeDelta kExpected = kUpdatedTime + kPlayDuration; |
145 | 144 |
146 EXPECT_EQ(kZero, clock_.Play()); | 145 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
147 AdvanceSystemTime(kPlayDuration); | 146 AdvanceSystemTime(kPlayDuration); |
148 | 147 |
149 clock_.SetTime(kUpdatedTime, kArbitraryMaxTime); | 148 interpolator_.SetBounds(kUpdatedTime, kArbitraryMaxTime); |
150 AdvanceSystemTime(kPlayDuration); | 149 AdvanceSystemTime(kPlayDuration); |
151 EXPECT_EQ(kExpected, clock_.Elapsed()); | 150 EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime()); |
152 } | 151 } |
153 | 152 |
154 TEST_F(ClockTest, SetMaxTime) { | 153 TEST_F(TimeDeltaInterpolatorTest, SetUpperBound) { |
155 const base::TimeDelta kZero; | 154 const base::TimeDelta kZero; |
156 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); | 155 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); |
157 const base::TimeDelta kMaxTime = base::TimeDelta::FromSeconds(6); | 156 const base::TimeDelta kMaxTime = base::TimeDelta::FromSeconds(6); |
158 | 157 |
159 EXPECT_EQ(kZero, clock_.Play()); | 158 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
160 clock_.SetMaxTime(kMaxTime); | 159 interpolator_.SetUpperBound(kMaxTime); |
161 AdvanceSystemTime(kTimeInterval); | 160 AdvanceSystemTime(kTimeInterval); |
162 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); | 161 EXPECT_EQ(kTimeInterval, interpolator_.GetInterpolatedTime()); |
163 | 162 |
164 AdvanceSystemTime(kTimeInterval); | 163 AdvanceSystemTime(kTimeInterval); |
165 EXPECT_EQ(kMaxTime, clock_.Elapsed()); | 164 EXPECT_EQ(kMaxTime, interpolator_.GetInterpolatedTime()); |
166 | 165 |
167 AdvanceSystemTime(kTimeInterval); | 166 AdvanceSystemTime(kTimeInterval); |
168 EXPECT_EQ(kMaxTime, clock_.Elapsed()); | 167 EXPECT_EQ(kMaxTime, interpolator_.GetInterpolatedTime()); |
169 } | 168 } |
170 | 169 |
171 TEST_F(ClockTest, SetMaxTime_MultipleTimes) { | 170 TEST_F(TimeDeltaInterpolatorTest, SetUpperBound_MultipleTimes) { |
172 const base::TimeDelta kZero; | 171 const base::TimeDelta kZero; |
173 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); | 172 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); |
174 const base::TimeDelta kMaxTime0 = base::TimeDelta::FromSeconds(120); | 173 const base::TimeDelta kMaxTime0 = base::TimeDelta::FromSeconds(120); |
175 const base::TimeDelta kMaxTime1 = base::TimeDelta::FromSeconds(6); | 174 const base::TimeDelta kMaxTime1 = base::TimeDelta::FromSeconds(6); |
176 const base::TimeDelta kMaxTime2 = base::TimeDelta::FromSeconds(12); | 175 const base::TimeDelta kMaxTime2 = base::TimeDelta::FromSeconds(12); |
177 | 176 |
178 EXPECT_EQ(kZero, clock_.Play()); | 177 EXPECT_EQ(kZero, interpolator_.StartInterpolating()); |
179 clock_.SetMaxTime(kMaxTime0); | 178 interpolator_.SetUpperBound(kMaxTime0); |
180 AdvanceSystemTime(kTimeInterval); | 179 AdvanceSystemTime(kTimeInterval); |
181 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); | 180 EXPECT_EQ(kTimeInterval, interpolator_.GetInterpolatedTime()); |
182 | 181 |
183 clock_.SetMaxTime(kMaxTime1); | 182 interpolator_.SetUpperBound(kMaxTime1); |
184 AdvanceSystemTime(kTimeInterval); | 183 AdvanceSystemTime(kTimeInterval); |
185 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 184 EXPECT_EQ(kMaxTime1, interpolator_.GetInterpolatedTime()); |
186 | 185 |
187 AdvanceSystemTime(kTimeInterval); | 186 AdvanceSystemTime(kTimeInterval); |
188 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 187 EXPECT_EQ(kMaxTime1, interpolator_.GetInterpolatedTime()); |
189 | 188 |
190 clock_.SetMaxTime(kMaxTime2); | 189 interpolator_.SetUpperBound(kMaxTime2); |
191 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 190 EXPECT_EQ(kMaxTime1, interpolator_.GetInterpolatedTime()); |
192 | 191 |
193 AdvanceSystemTime(kTimeInterval); | 192 AdvanceSystemTime(kTimeInterval); |
194 EXPECT_EQ(kMaxTime1 + kTimeInterval, clock_.Elapsed()); | 193 EXPECT_EQ(kMaxTime1 + kTimeInterval, interpolator_.GetInterpolatedTime()); |
195 | 194 |
196 AdvanceSystemTime(kTimeInterval); | 195 AdvanceSystemTime(kTimeInterval); |
197 EXPECT_EQ(kMaxTime2, clock_.Elapsed()); | 196 EXPECT_EQ(kMaxTime2, interpolator_.GetInterpolatedTime()); |
198 } | 197 } |
199 | 198 |
200 } // namespace media | 199 } // namespace media |
OLD | NEW |