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

Side by Side Diff: third_party/WebKit/Source/platform/TimerTest.cpp

Issue 2588403002: TestingPlatformSupport: register Platform instance correctly (Closed)
Patch Set: new plan Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "platform/Timer.h" 5 #include "platform/Timer.h"
6 6
7 #include "platform/scheduler/base/task_queue_impl.h" 7 #include "platform/scheduler/base/task_queue_impl.h"
8 #include "platform/scheduler/child/web_task_runner_impl.h" 8 #include "platform/scheduler/child/web_task_runner_impl.h"
9 #include "platform/scheduler/renderer/renderer_scheduler_impl.h" 9 #include "platform/scheduler/renderer/renderer_scheduler_impl.h"
10 #include "platform/testing/TestingPlatformSupport.h" 10 #include "platform/testing/TestingPlatformSupport.h"
(...skipping 10 matching lines...) Expand all
21 #include <queue> 21 #include <queue>
22 22
23 using testing::ElementsAre; 23 using testing::ElementsAre;
24 24
25 namespace blink { 25 namespace blink {
26 namespace { 26 namespace {
27 27
28 class TimerTest : public testing::Test { 28 class TimerTest : public testing::Test {
29 public: 29 public:
30 void SetUp() override { 30 void SetUp() override {
31 m_platform.reset(new TestingPlatformSupportWithMockScheduler);
31 m_runTimes.clear(); 32 m_runTimes.clear();
32 m_platform.advanceClockSeconds(10.0); 33 m_platform->advanceClockSeconds(10.0);
33 m_startTime = monotonicallyIncreasingTime(); 34 m_startTime = monotonicallyIncreasingTime();
34 } 35 }
35 36
36 void countingTask(TimerBase*) { 37 void countingTask(TimerBase*) {
37 m_runTimes.append(monotonicallyIncreasingTime()); 38 m_runTimes.append(monotonicallyIncreasingTime());
38 } 39 }
39 40
40 void recordNextFireTimeTask(TimerBase* timer) { 41 void recordNextFireTimeTask(TimerBase* timer) {
41 m_nextFireTimes.append(monotonicallyIncreasingTime() + 42 m_nextFireTimes.append(monotonicallyIncreasingTime() +
42 timer->nextFireInterval()); 43 timer->nextFireInterval());
43 } 44 }
44 45
45 void runUntilDeadline(double deadline) { 46 void runUntilDeadline(double deadline) {
46 double period = deadline - monotonicallyIncreasingTime(); 47 double period = deadline - monotonicallyIncreasingTime();
47 EXPECT_GE(period, 0.0); 48 EXPECT_GE(period, 0.0);
48 m_platform.runForPeriodSeconds(period); 49 m_platform->runForPeriodSeconds(period);
49 } 50 }
50 51
51 // Returns false if there are no pending delayed tasks, otherwise sets |time| 52 // Returns false if there are no pending delayed tasks, otherwise sets |time|
52 // to the delay in seconds till the next pending delayed task is scheduled to 53 // to the delay in seconds till the next pending delayed task is scheduled to
53 // fire. 54 // fire.
54 bool timeTillNextDelayedTask(double* time) const { 55 bool timeTillNextDelayedTask(double* time) const {
55 base::TimeTicks nextRunTime; 56 base::TimeTicks nextRunTime;
56 if (!m_platform.rendererScheduler() 57 if (!m_platform->rendererScheduler()
57 ->TimerTaskRunner() 58 ->TimerTaskRunner()
58 ->GetTimeDomain() 59 ->GetTimeDomain()
59 ->NextScheduledRunTime(&nextRunTime)) 60 ->NextScheduledRunTime(&nextRunTime))
60 return false; 61 return false;
61 *time = (nextRunTime - 62 *time = (nextRunTime -
62 m_platform.rendererScheduler() 63 m_platform->rendererScheduler()
63 ->TimerTaskRunner() 64 ->TimerTaskRunner()
64 ->GetTimeDomain() 65 ->GetTimeDomain()
65 ->Now()) 66 ->Now())
66 .InSecondsF(); 67 .InSecondsF();
67 return true; 68 return true;
68 } 69 }
69 70
70 protected: 71 protected:
71 double m_startTime; 72 double m_startTime;
72 WTF::Vector<double> m_runTimes; 73 WTF::Vector<double> m_runTimes;
73 WTF::Vector<double> m_nextFireTimes; 74 WTF::Vector<double> m_nextFireTimes;
74 TestingPlatformSupportWithMockScheduler m_platform; 75 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler>
76 m_platform;
75 }; 77 };
76 78
77 class OnHeapTimerOwner final 79 class OnHeapTimerOwner final
78 : public GarbageCollectedFinalized<OnHeapTimerOwner> { 80 : public GarbageCollectedFinalized<OnHeapTimerOwner> {
79 public: 81 public:
80 class Record final : public RefCounted<Record> { 82 class Record final : public RefCounted<Record> {
81 public: 83 public:
82 static PassRefPtr<Record> create() { return adoptRef(new Record); } 84 static PassRefPtr<Record> create() { return adoptRef(new Record); }
83 85
84 bool timerHasFired() const { return m_timerHasFired; } 86 bool timerHasFired() const { return m_timerHasFired; }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 ~GCForbiddenScope() { ThreadState::current()->leaveGCForbiddenScope(); } 125 ~GCForbiddenScope() { ThreadState::current()->leaveGCForbiddenScope(); }
124 }; 126 };
125 127
126 TEST_F(TimerTest, StartOneShot_Zero) { 128 TEST_F(TimerTest, StartOneShot_Zero) {
127 Timer<TimerTest> timer(this, &TimerTest::countingTask); 129 Timer<TimerTest> timer(this, &TimerTest::countingTask);
128 timer.startOneShot(0, BLINK_FROM_HERE); 130 timer.startOneShot(0, BLINK_FROM_HERE);
129 131
130 double runTime; 132 double runTime;
131 EXPECT_FALSE(timeTillNextDelayedTask(&runTime)); 133 EXPECT_FALSE(timeTillNextDelayedTask(&runTime));
132 134
133 m_platform.runUntilIdle(); 135 m_platform->runUntilIdle();
134 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime)); 136 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime));
135 } 137 }
136 138
137 TEST_F(TimerTest, StartOneShot_ZeroAndCancel) { 139 TEST_F(TimerTest, StartOneShot_ZeroAndCancel) {
138 Timer<TimerTest> timer(this, &TimerTest::countingTask); 140 Timer<TimerTest> timer(this, &TimerTest::countingTask);
139 timer.startOneShot(0, BLINK_FROM_HERE); 141 timer.startOneShot(0, BLINK_FROM_HERE);
140 142
141 double runTime; 143 double runTime;
142 EXPECT_FALSE(timeTillNextDelayedTask(&runTime)); 144 EXPECT_FALSE(timeTillNextDelayedTask(&runTime));
143 145
144 timer.stop(); 146 timer.stop();
145 147
146 m_platform.runUntilIdle(); 148 m_platform->runUntilIdle();
147 EXPECT_FALSE(m_runTimes.size()); 149 EXPECT_FALSE(m_runTimes.size());
148 } 150 }
149 151
150 TEST_F(TimerTest, StartOneShot_ZeroAndCancelThenRepost) { 152 TEST_F(TimerTest, StartOneShot_ZeroAndCancelThenRepost) {
151 Timer<TimerTest> timer(this, &TimerTest::countingTask); 153 Timer<TimerTest> timer(this, &TimerTest::countingTask);
152 timer.startOneShot(0, BLINK_FROM_HERE); 154 timer.startOneShot(0, BLINK_FROM_HERE);
153 155
154 double runTime; 156 double runTime;
155 EXPECT_FALSE(timeTillNextDelayedTask(&runTime)); 157 EXPECT_FALSE(timeTillNextDelayedTask(&runTime));
156 158
157 timer.stop(); 159 timer.stop();
158 160
159 m_platform.runUntilIdle(); 161 m_platform->runUntilIdle();
160 EXPECT_FALSE(m_runTimes.size()); 162 EXPECT_FALSE(m_runTimes.size());
161 163
162 timer.startOneShot(0, BLINK_FROM_HERE); 164 timer.startOneShot(0, BLINK_FROM_HERE);
163 165
164 EXPECT_FALSE(timeTillNextDelayedTask(&runTime)); 166 EXPECT_FALSE(timeTillNextDelayedTask(&runTime));
165 167
166 m_platform.runUntilIdle(); 168 m_platform->runUntilIdle();
167 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime)); 169 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime));
168 } 170 }
169 171
170 TEST_F(TimerTest, StartOneShot_Zero_RepostingAfterRunning) { 172 TEST_F(TimerTest, StartOneShot_Zero_RepostingAfterRunning) {
171 Timer<TimerTest> timer(this, &TimerTest::countingTask); 173 Timer<TimerTest> timer(this, &TimerTest::countingTask);
172 timer.startOneShot(0, BLINK_FROM_HERE); 174 timer.startOneShot(0, BLINK_FROM_HERE);
173 175
174 double runTime; 176 double runTime;
175 EXPECT_FALSE(timeTillNextDelayedTask(&runTime)); 177 EXPECT_FALSE(timeTillNextDelayedTask(&runTime));
176 178
177 m_platform.runUntilIdle(); 179 m_platform->runUntilIdle();
178 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime)); 180 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime));
179 181
180 timer.startOneShot(0, BLINK_FROM_HERE); 182 timer.startOneShot(0, BLINK_FROM_HERE);
181 183
182 EXPECT_FALSE(timeTillNextDelayedTask(&runTime)); 184 EXPECT_FALSE(timeTillNextDelayedTask(&runTime));
183 185
184 m_platform.runUntilIdle(); 186 m_platform->runUntilIdle();
185 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime, m_startTime)); 187 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime, m_startTime));
186 } 188 }
187 189
188 TEST_F(TimerTest, StartOneShot_NonZero) { 190 TEST_F(TimerTest, StartOneShot_NonZero) {
189 Timer<TimerTest> timer(this, &TimerTest::countingTask); 191 Timer<TimerTest> timer(this, &TimerTest::countingTask);
190 timer.startOneShot(10.0, BLINK_FROM_HERE); 192 timer.startOneShot(10.0, BLINK_FROM_HERE);
191 193
192 double runTime; 194 double runTime;
193 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 195 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
194 EXPECT_FLOAT_EQ(10.0, runTime); 196 EXPECT_FLOAT_EQ(10.0, runTime);
195 197
196 m_platform.runUntilIdle(); 198 m_platform->runUntilIdle();
197 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0)); 199 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0));
198 } 200 }
199 201
200 TEST_F(TimerTest, StartOneShot_NonZeroAndCancel) { 202 TEST_F(TimerTest, StartOneShot_NonZeroAndCancel) {
201 Timer<TimerTest> timer(this, &TimerTest::countingTask); 203 Timer<TimerTest> timer(this, &TimerTest::countingTask);
202 timer.startOneShot(10, BLINK_FROM_HERE); 204 timer.startOneShot(10, BLINK_FROM_HERE);
203 205
204 double runTime; 206 double runTime;
205 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 207 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
206 EXPECT_FLOAT_EQ(10.0, runTime); 208 EXPECT_FLOAT_EQ(10.0, runTime);
207 209
208 timer.stop(); 210 timer.stop();
209 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 211 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
210 212
211 m_platform.runUntilIdle(); 213 m_platform->runUntilIdle();
212 EXPECT_FALSE(m_runTimes.size()); 214 EXPECT_FALSE(m_runTimes.size());
213 } 215 }
214 216
215 TEST_F(TimerTest, StartOneShot_NonZeroAndCancelThenRepost) { 217 TEST_F(TimerTest, StartOneShot_NonZeroAndCancelThenRepost) {
216 Timer<TimerTest> timer(this, &TimerTest::countingTask); 218 Timer<TimerTest> timer(this, &TimerTest::countingTask);
217 timer.startOneShot(10, BLINK_FROM_HERE); 219 timer.startOneShot(10, BLINK_FROM_HERE);
218 220
219 double runTime; 221 double runTime;
220 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 222 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
221 EXPECT_FLOAT_EQ(10.0, runTime); 223 EXPECT_FLOAT_EQ(10.0, runTime);
222 224
223 timer.stop(); 225 timer.stop();
224 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 226 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
225 227
226 m_platform.runUntilIdle(); 228 m_platform->runUntilIdle();
227 EXPECT_FALSE(m_runTimes.size()); 229 EXPECT_FALSE(m_runTimes.size());
228 230
229 double secondPostTime = monotonicallyIncreasingTime(); 231 double secondPostTime = monotonicallyIncreasingTime();
230 timer.startOneShot(10, BLINK_FROM_HERE); 232 timer.startOneShot(10, BLINK_FROM_HERE);
231 233
232 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 234 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
233 EXPECT_FLOAT_EQ(10.0, runTime); 235 EXPECT_FLOAT_EQ(10.0, runTime);
234 236
235 m_platform.runUntilIdle(); 237 m_platform->runUntilIdle();
236 EXPECT_THAT(m_runTimes, ElementsAre(secondPostTime + 10.0)); 238 EXPECT_THAT(m_runTimes, ElementsAre(secondPostTime + 10.0));
237 } 239 }
238 240
239 TEST_F(TimerTest, StartOneShot_NonZero_RepostingAfterRunning) { 241 TEST_F(TimerTest, StartOneShot_NonZero_RepostingAfterRunning) {
240 Timer<TimerTest> timer(this, &TimerTest::countingTask); 242 Timer<TimerTest> timer(this, &TimerTest::countingTask);
241 timer.startOneShot(10, BLINK_FROM_HERE); 243 timer.startOneShot(10, BLINK_FROM_HERE);
242 244
243 double runTime; 245 double runTime;
244 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 246 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
245 EXPECT_FLOAT_EQ(10.0, runTime); 247 EXPECT_FLOAT_EQ(10.0, runTime);
246 248
247 m_platform.runUntilIdle(); 249 m_platform->runUntilIdle();
248 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0)); 250 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0));
249 251
250 timer.startOneShot(20, BLINK_FROM_HERE); 252 timer.startOneShot(20, BLINK_FROM_HERE);
251 253
252 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 254 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
253 EXPECT_FLOAT_EQ(20.0, runTime); 255 EXPECT_FLOAT_EQ(20.0, runTime);
254 256
255 m_platform.runUntilIdle(); 257 m_platform->runUntilIdle();
256 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0, m_startTime + 30.0)); 258 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0, m_startTime + 30.0));
257 } 259 }
258 260
259 TEST_F(TimerTest, PostingTimerTwiceWithSameRunTimeDoesNothing) { 261 TEST_F(TimerTest, PostingTimerTwiceWithSameRunTimeDoesNothing) {
260 Timer<TimerTest> timer(this, &TimerTest::countingTask); 262 Timer<TimerTest> timer(this, &TimerTest::countingTask);
261 timer.startOneShot(10, BLINK_FROM_HERE); 263 timer.startOneShot(10, BLINK_FROM_HERE);
262 timer.startOneShot(10, BLINK_FROM_HERE); 264 timer.startOneShot(10, BLINK_FROM_HERE);
263 265
264 double runTime; 266 double runTime;
265 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 267 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
266 EXPECT_FLOAT_EQ(10.0, runTime); 268 EXPECT_FLOAT_EQ(10.0, runTime);
267 269
268 m_platform.runUntilIdle(); 270 m_platform->runUntilIdle();
269 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0)); 271 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0));
270 } 272 }
271 273
272 TEST_F(TimerTest, PostingTimerTwiceWithNewerRunTimeCancelsOriginalTask) { 274 TEST_F(TimerTest, PostingTimerTwiceWithNewerRunTimeCancelsOriginalTask) {
273 Timer<TimerTest> timer(this, &TimerTest::countingTask); 275 Timer<TimerTest> timer(this, &TimerTest::countingTask);
274 timer.startOneShot(10, BLINK_FROM_HERE); 276 timer.startOneShot(10, BLINK_FROM_HERE);
275 timer.startOneShot(0, BLINK_FROM_HERE); 277 timer.startOneShot(0, BLINK_FROM_HERE);
276 278
277 m_platform.runUntilIdle(); 279 m_platform->runUntilIdle();
278 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 0.0)); 280 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 0.0));
279 } 281 }
280 282
281 TEST_F(TimerTest, PostingTimerTwiceWithLaterRunTimeCancelsOriginalTask) { 283 TEST_F(TimerTest, PostingTimerTwiceWithLaterRunTimeCancelsOriginalTask) {
282 Timer<TimerTest> timer(this, &TimerTest::countingTask); 284 Timer<TimerTest> timer(this, &TimerTest::countingTask);
283 timer.startOneShot(0, BLINK_FROM_HERE); 285 timer.startOneShot(0, BLINK_FROM_HERE);
284 timer.startOneShot(10, BLINK_FROM_HERE); 286 timer.startOneShot(10, BLINK_FROM_HERE);
285 287
286 m_platform.runUntilIdle(); 288 m_platform->runUntilIdle();
287 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0)); 289 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0));
288 } 290 }
289 291
290 TEST_F(TimerTest, StartRepeatingTask) { 292 TEST_F(TimerTest, StartRepeatingTask) {
291 Timer<TimerTest> timer(this, &TimerTest::countingTask); 293 Timer<TimerTest> timer(this, &TimerTest::countingTask);
292 timer.startRepeating(1.0, BLINK_FROM_HERE); 294 timer.startRepeating(1.0, BLINK_FROM_HERE);
293 295
294 double runTime; 296 double runTime;
295 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 297 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
296 EXPECT_FLOAT_EQ(1.0, runTime); 298 EXPECT_FLOAT_EQ(1.0, runTime);
297 299
298 runUntilDeadline(m_startTime + 5.5); 300 runUntilDeadline(m_startTime + 5.5);
299 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0, 301 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0,
300 m_startTime + 3.0, m_startTime + 4.0, 302 m_startTime + 3.0, m_startTime + 4.0,
301 m_startTime + 5.0)); 303 m_startTime + 5.0));
302 } 304 }
303 305
304 TEST_F(TimerTest, StartRepeatingTask_ThenCancel) { 306 TEST_F(TimerTest, StartRepeatingTask_ThenCancel) {
305 Timer<TimerTest> timer(this, &TimerTest::countingTask); 307 Timer<TimerTest> timer(this, &TimerTest::countingTask);
306 timer.startRepeating(1.0, BLINK_FROM_HERE); 308 timer.startRepeating(1.0, BLINK_FROM_HERE);
307 309
308 double runTime; 310 double runTime;
309 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 311 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
310 EXPECT_FLOAT_EQ(1.0, runTime); 312 EXPECT_FLOAT_EQ(1.0, runTime);
311 313
312 runUntilDeadline(m_startTime + 2.5); 314 runUntilDeadline(m_startTime + 2.5);
313 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0)); 315 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0));
314 316
315 timer.stop(); 317 timer.stop();
316 m_platform.runUntilIdle(); 318 m_platform->runUntilIdle();
317 319
318 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0)); 320 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0));
319 } 321 }
320 322
321 TEST_F(TimerTest, StartRepeatingTask_ThenPostOneShot) { 323 TEST_F(TimerTest, StartRepeatingTask_ThenPostOneShot) {
322 Timer<TimerTest> timer(this, &TimerTest::countingTask); 324 Timer<TimerTest> timer(this, &TimerTest::countingTask);
323 timer.startRepeating(1.0, BLINK_FROM_HERE); 325 timer.startRepeating(1.0, BLINK_FROM_HERE);
324 326
325 double runTime; 327 double runTime;
326 EXPECT_TRUE(timeTillNextDelayedTask(&runTime)); 328 EXPECT_TRUE(timeTillNextDelayedTask(&runTime));
327 EXPECT_FLOAT_EQ(1.0, runTime); 329 EXPECT_FLOAT_EQ(1.0, runTime);
328 330
329 runUntilDeadline(m_startTime + 2.5); 331 runUntilDeadline(m_startTime + 2.5);
330 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0)); 332 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0));
331 333
332 timer.startOneShot(0, BLINK_FROM_HERE); 334 timer.startOneShot(0, BLINK_FROM_HERE);
333 m_platform.runUntilIdle(); 335 m_platform->runUntilIdle();
334 336
335 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0, 337 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0,
336 m_startTime + 2.5)); 338 m_startTime + 2.5));
337 } 339 }
338 340
339 TEST_F(TimerTest, IsActive_NeverPosted) { 341 TEST_F(TimerTest, IsActive_NeverPosted) {
340 Timer<TimerTest> timer(this, &TimerTest::countingTask); 342 Timer<TimerTest> timer(this, &TimerTest::countingTask);
341 343
342 EXPECT_FALSE(timer.isActive()); 344 EXPECT_FALSE(timer.isActive());
343 } 345 }
(...skipping 16 matching lines...) Expand all
360 Timer<TimerTest> timer(this, &TimerTest::countingTask); 362 Timer<TimerTest> timer(this, &TimerTest::countingTask);
361 timer.startRepeating(1.0, BLINK_FROM_HERE); 363 timer.startRepeating(1.0, BLINK_FROM_HERE);
362 364
363 EXPECT_TRUE(timer.isActive()); 365 EXPECT_TRUE(timer.isActive());
364 } 366 }
365 367
366 TEST_F(TimerTest, IsActive_AfterRunning_OneShotZero) { 368 TEST_F(TimerTest, IsActive_AfterRunning_OneShotZero) {
367 Timer<TimerTest> timer(this, &TimerTest::countingTask); 369 Timer<TimerTest> timer(this, &TimerTest::countingTask);
368 timer.startOneShot(0, BLINK_FROM_HERE); 370 timer.startOneShot(0, BLINK_FROM_HERE);
369 371
370 m_platform.runUntilIdle(); 372 m_platform->runUntilIdle();
371 EXPECT_FALSE(timer.isActive()); 373 EXPECT_FALSE(timer.isActive());
372 } 374 }
373 375
374 TEST_F(TimerTest, IsActive_AfterRunning_OneShotNonZero) { 376 TEST_F(TimerTest, IsActive_AfterRunning_OneShotNonZero) {
375 Timer<TimerTest> timer(this, &TimerTest::countingTask); 377 Timer<TimerTest> timer(this, &TimerTest::countingTask);
376 timer.startOneShot(10, BLINK_FROM_HERE); 378 timer.startOneShot(10, BLINK_FROM_HERE);
377 379
378 m_platform.runUntilIdle(); 380 m_platform->runUntilIdle();
379 EXPECT_FALSE(timer.isActive()); 381 EXPECT_FALSE(timer.isActive());
380 } 382 }
381 383
382 TEST_F(TimerTest, IsActive_AfterRunning_Repeating) { 384 TEST_F(TimerTest, IsActive_AfterRunning_Repeating) {
383 Timer<TimerTest> timer(this, &TimerTest::countingTask); 385 Timer<TimerTest> timer(this, &TimerTest::countingTask);
384 timer.startRepeating(1.0, BLINK_FROM_HERE); 386 timer.startRepeating(1.0, BLINK_FROM_HERE);
385 387
386 runUntilDeadline(m_startTime + 10); 388 runUntilDeadline(m_startTime + 10);
387 EXPECT_TRUE(timer.isActive()); // It should run until cancelled. 389 EXPECT_TRUE(timer.isActive()); // It should run until cancelled.
388 } 390 }
389 391
390 TEST_F(TimerTest, NextFireInterval_OneShotZero) { 392 TEST_F(TimerTest, NextFireInterval_OneShotZero) {
391 Timer<TimerTest> timer(this, &TimerTest::countingTask); 393 Timer<TimerTest> timer(this, &TimerTest::countingTask);
392 timer.startOneShot(0, BLINK_FROM_HERE); 394 timer.startOneShot(0, BLINK_FROM_HERE);
393 395
394 EXPECT_FLOAT_EQ(0.0, timer.nextFireInterval()); 396 EXPECT_FLOAT_EQ(0.0, timer.nextFireInterval());
395 } 397 }
396 398
397 TEST_F(TimerTest, NextFireInterval_OneShotNonZero) { 399 TEST_F(TimerTest, NextFireInterval_OneShotNonZero) {
398 Timer<TimerTest> timer(this, &TimerTest::countingTask); 400 Timer<TimerTest> timer(this, &TimerTest::countingTask);
399 timer.startOneShot(10, BLINK_FROM_HERE); 401 timer.startOneShot(10, BLINK_FROM_HERE);
400 402
401 EXPECT_FLOAT_EQ(10.0, timer.nextFireInterval()); 403 EXPECT_FLOAT_EQ(10.0, timer.nextFireInterval());
402 } 404 }
403 405
404 TEST_F(TimerTest, NextFireInterval_OneShotNonZero_AfterAFewSeconds) { 406 TEST_F(TimerTest, NextFireInterval_OneShotNonZero_AfterAFewSeconds) {
405 m_platform.setAutoAdvanceNowToPendingTasks(false); 407 m_platform->setAutoAdvanceNowToPendingTasks(false);
406 408
407 Timer<TimerTest> timer(this, &TimerTest::countingTask); 409 Timer<TimerTest> timer(this, &TimerTest::countingTask);
408 timer.startOneShot(10, BLINK_FROM_HERE); 410 timer.startOneShot(10, BLINK_FROM_HERE);
409 411
410 m_platform.advanceClockSeconds(2.0); 412 m_platform->advanceClockSeconds(2.0);
411 EXPECT_FLOAT_EQ(8.0, timer.nextFireInterval()); 413 EXPECT_FLOAT_EQ(8.0, timer.nextFireInterval());
412 } 414 }
413 415
414 TEST_F(TimerTest, NextFireInterval_Repeating) { 416 TEST_F(TimerTest, NextFireInterval_Repeating) {
415 Timer<TimerTest> timer(this, &TimerTest::countingTask); 417 Timer<TimerTest> timer(this, &TimerTest::countingTask);
416 timer.startRepeating(20, BLINK_FROM_HERE); 418 timer.startRepeating(20, BLINK_FROM_HERE);
417 419
418 EXPECT_FLOAT_EQ(20.0, timer.nextFireInterval()); 420 EXPECT_FLOAT_EQ(20.0, timer.nextFireInterval());
419 } 421 }
420 422
(...skipping 23 matching lines...) Expand all
444 446
445 EXPECT_FLOAT_EQ(20.0, timer.repeatInterval()); 447 EXPECT_FLOAT_EQ(20.0, timer.repeatInterval());
446 } 448 }
447 449
448 TEST_F(TimerTest, AugmentRepeatInterval) { 450 TEST_F(TimerTest, AugmentRepeatInterval) {
449 Timer<TimerTest> timer(this, &TimerTest::countingTask); 451 Timer<TimerTest> timer(this, &TimerTest::countingTask);
450 timer.startRepeating(10, BLINK_FROM_HERE); 452 timer.startRepeating(10, BLINK_FROM_HERE);
451 EXPECT_FLOAT_EQ(10.0, timer.repeatInterval()); 453 EXPECT_FLOAT_EQ(10.0, timer.repeatInterval());
452 EXPECT_FLOAT_EQ(10.0, timer.nextFireInterval()); 454 EXPECT_FLOAT_EQ(10.0, timer.nextFireInterval());
453 455
454 m_platform.advanceClockSeconds(2.0); 456 m_platform->advanceClockSeconds(2.0);
455 timer.augmentRepeatInterval(10); 457 timer.augmentRepeatInterval(10);
456 458
457 EXPECT_FLOAT_EQ(20.0, timer.repeatInterval()); 459 EXPECT_FLOAT_EQ(20.0, timer.repeatInterval());
458 EXPECT_FLOAT_EQ(18.0, timer.nextFireInterval()); 460 EXPECT_FLOAT_EQ(18.0, timer.nextFireInterval());
459 461
460 // NOTE setAutoAdvanceNowToPendingTasks(true) (which uses 462 // NOTE setAutoAdvanceNowToPendingTasks(true) (which uses
461 // cc::OrderedSimpleTaskRunner) results in somewhat strange behavior of the 463 // cc::OrderedSimpleTaskRunner) results in somewhat strange behavior of the
462 // test clock which breaks this test. Specifically the test clock advancing 464 // test clock which breaks this test. Specifically the test clock advancing
463 // logic ignores newly posted delayed tasks and advances too far. 465 // logic ignores newly posted delayed tasks and advances too far.
464 runUntilDeadline(m_startTime + 50.0); 466 runUntilDeadline(m_startTime + 50.0);
465 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 20.0, m_startTime + 40.0)); 467 EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 20.0, m_startTime + 40.0));
466 } 468 }
467 469
468 TEST_F(TimerTest, AugmentRepeatInterval_TimerFireDelayed) { 470 TEST_F(TimerTest, AugmentRepeatInterval_TimerFireDelayed) {
469 m_platform.setAutoAdvanceNowToPendingTasks(false); 471 m_platform->setAutoAdvanceNowToPendingTasks(false);
470 472
471 Timer<TimerTest> timer(this, &TimerTest::countingTask); 473 Timer<TimerTest> timer(this, &TimerTest::countingTask);
472 timer.startRepeating(10, BLINK_FROM_HERE); 474 timer.startRepeating(10, BLINK_FROM_HERE);
473 EXPECT_FLOAT_EQ(10.0, timer.repeatInterval()); 475 EXPECT_FLOAT_EQ(10.0, timer.repeatInterval());
474 EXPECT_FLOAT_EQ(10.0, timer.nextFireInterval()); 476 EXPECT_FLOAT_EQ(10.0, timer.nextFireInterval());
475 477
476 m_platform.advanceClockSeconds(123.0); // Make the timer long overdue. 478 m_platform->advanceClockSeconds(123.0); // Make the timer long overdue.
477 timer.augmentRepeatInterval(10); 479 timer.augmentRepeatInterval(10);
478 480
479 EXPECT_FLOAT_EQ(20.0, timer.repeatInterval()); 481 EXPECT_FLOAT_EQ(20.0, timer.repeatInterval());
480 // The timer is overdue so it should be scheduled to fire immediatly. 482 // The timer is overdue so it should be scheduled to fire immediatly.
481 EXPECT_FLOAT_EQ(0.0, timer.nextFireInterval()); 483 EXPECT_FLOAT_EQ(0.0, timer.nextFireInterval());
482 } 484 }
483 485
484 TEST_F(TimerTest, RepeatingTimerDoesNotDrift) { 486 TEST_F(TimerTest, RepeatingTimerDoesNotDrift) {
485 m_platform.setAutoAdvanceNowToPendingTasks(false); 487 m_platform->setAutoAdvanceNowToPendingTasks(false);
486 488
487 Timer<TimerTest> timer(this, &TimerTest::recordNextFireTimeTask); 489 Timer<TimerTest> timer(this, &TimerTest::recordNextFireTimeTask);
488 timer.startRepeating(2.0, BLINK_FROM_HERE); 490 timer.startRepeating(2.0, BLINK_FROM_HERE);
489 491
490 recordNextFireTimeTask( 492 recordNextFireTimeTask(
491 &timer); // Next scheduled task to run at m_startTime + 2.0 493 &timer); // Next scheduled task to run at m_startTime + 2.0
492 494
493 // Simulate timer firing early. Next scheduled task to run at 495 // Simulate timer firing early. Next scheduled task to run at
494 // m_startTime + 4.0 496 // m_startTime + 4.0
495 m_platform.advanceClockSeconds(1.9); 497 m_platform->advanceClockSeconds(1.9);
496 runUntilDeadline(monotonicallyIncreasingTime() + 0.2); 498 runUntilDeadline(monotonicallyIncreasingTime() + 0.2);
497 499
498 // Next scheduled task to run at m_startTime + 6.0 500 // Next scheduled task to run at m_startTime + 6.0
499 m_platform.runForPeriodSeconds(2.0); 501 m_platform->runForPeriodSeconds(2.0);
500 // Next scheduled task to run at m_startTime + 8.0 502 // Next scheduled task to run at m_startTime + 8.0
501 m_platform.runForPeriodSeconds(2.1); 503 m_platform->runForPeriodSeconds(2.1);
502 // Next scheduled task to run at m_startTime + 10.0 504 // Next scheduled task to run at m_startTime + 10.0
503 m_platform.runForPeriodSeconds(2.9); 505 m_platform->runForPeriodSeconds(2.9);
504 // Next scheduled task to run at m_startTime + 14.0 (skips a beat) 506 // Next scheduled task to run at m_startTime + 14.0 (skips a beat)
505 m_platform.advanceClockSeconds(3.1); 507 m_platform->advanceClockSeconds(3.1);
506 m_platform.runUntilIdle(); 508 m_platform->runUntilIdle();
507 // Next scheduled task to run at m_startTime + 18.0 (skips a beat) 509 // Next scheduled task to run at m_startTime + 18.0 (skips a beat)
508 m_platform.advanceClockSeconds(4.0); 510 m_platform->advanceClockSeconds(4.0);
509 m_platform.runUntilIdle(); 511 m_platform->runUntilIdle();
510 // Next scheduled task to run at m_startTime + 28.0 (skips 5 beats) 512 // Next scheduled task to run at m_startTime + 28.0 (skips 5 beats)
511 m_platform.advanceClockSeconds(10.0); 513 m_platform->advanceClockSeconds(10.0);
512 m_platform.runUntilIdle(); 514 m_platform->runUntilIdle();
513 515
514 EXPECT_THAT( 516 EXPECT_THAT(
515 m_nextFireTimes, 517 m_nextFireTimes,
516 ElementsAre(m_startTime + 2.0, m_startTime + 4.0, m_startTime + 6.0, 518 ElementsAre(m_startTime + 2.0, m_startTime + 4.0, m_startTime + 6.0,
517 m_startTime + 8.0, m_startTime + 10.0, m_startTime + 14.0, 519 m_startTime + 8.0, m_startTime + 10.0, m_startTime + 14.0,
518 m_startTime + 18.0, m_startTime + 28.0)); 520 m_startTime + 18.0, m_startTime + 28.0));
519 } 521 }
520 522
521 template <typename TimerFiredClass> 523 template <typename TimerFiredClass>
522 class TimerForTest : public TaskRunnerTimer<TimerFiredClass> { 524 class TimerForTest : public TaskRunnerTimer<TimerFiredClass> {
523 public: 525 public:
524 using TimerFiredFunction = 526 using TimerFiredFunction =
525 typename TaskRunnerTimer<TimerFiredClass>::TimerFiredFunction; 527 typename TaskRunnerTimer<TimerFiredClass>::TimerFiredFunction;
526 528
527 ~TimerForTest() override {} 529 ~TimerForTest() override {}
528 530
529 TimerForTest(WebTaskRunner* webTaskRunner, 531 TimerForTest(WebTaskRunner* webTaskRunner,
530 TimerFiredClass* timerFiredClass, 532 TimerFiredClass* timerFiredClass,
531 TimerFiredFunction timerFiredFunction) 533 TimerFiredFunction timerFiredFunction)
532 : TaskRunnerTimer<TimerFiredClass>(webTaskRunner, 534 : TaskRunnerTimer<TimerFiredClass>(webTaskRunner,
533 timerFiredClass, 535 timerFiredClass,
534 timerFiredFunction) {} 536 timerFiredFunction) {}
535 }; 537 };
536 538
537 TEST_F(TimerTest, UserSuppliedWebTaskRunner) { 539 TEST_F(TimerTest, UserSuppliedWebTaskRunner) {
538 scoped_refptr<scheduler::TaskQueue> taskRunner( 540 scoped_refptr<scheduler::TaskQueue> taskRunner(
539 m_platform.rendererScheduler()->NewTimerTaskRunner( 541 m_platform->rendererScheduler()->NewTimerTaskRunner(
540 scheduler::TaskQueue::QueueType::TEST)); 542 scheduler::TaskQueue::QueueType::TEST));
541 scheduler::WebTaskRunnerImpl webTaskRunner(taskRunner); 543 scheduler::WebTaskRunnerImpl webTaskRunner(taskRunner);
542 TimerForTest<TimerTest> timer(&webTaskRunner, this, &TimerTest::countingTask); 544 TimerForTest<TimerTest> timer(&webTaskRunner, this, &TimerTest::countingTask);
543 timer.startOneShot(0, BLINK_FROM_HERE); 545 timer.startOneShot(0, BLINK_FROM_HERE);
544 546
545 // Make sure the task was posted on taskRunner. 547 // Make sure the task was posted on taskRunner.
546 EXPECT_FALSE(taskRunner->IsEmpty()); 548 EXPECT_FALSE(taskRunner->IsEmpty());
547 } 549 }
548 550
549 TEST_F(TimerTest, RunOnHeapTimer) { 551 TEST_F(TimerTest, RunOnHeapTimer) {
550 RefPtr<OnHeapTimerOwner::Record> record = OnHeapTimerOwner::Record::create(); 552 RefPtr<OnHeapTimerOwner::Record> record = OnHeapTimerOwner::Record::create();
551 Persistent<OnHeapTimerOwner> owner = new OnHeapTimerOwner(record); 553 Persistent<OnHeapTimerOwner> owner = new OnHeapTimerOwner(record);
552 554
553 owner->startOneShot(0, BLINK_FROM_HERE); 555 owner->startOneShot(0, BLINK_FROM_HERE);
554 556
555 EXPECT_FALSE(record->timerHasFired()); 557 EXPECT_FALSE(record->timerHasFired());
556 m_platform.runUntilIdle(); 558 m_platform->runUntilIdle();
557 EXPECT_TRUE(record->timerHasFired()); 559 EXPECT_TRUE(record->timerHasFired());
558 } 560 }
559 561
560 TEST_F(TimerTest, DestructOnHeapTimer) { 562 TEST_F(TimerTest, DestructOnHeapTimer) {
561 RefPtr<OnHeapTimerOwner::Record> record = OnHeapTimerOwner::Record::create(); 563 RefPtr<OnHeapTimerOwner::Record> record = OnHeapTimerOwner::Record::create();
562 Persistent<OnHeapTimerOwner> owner = new OnHeapTimerOwner(record); 564 Persistent<OnHeapTimerOwner> owner = new OnHeapTimerOwner(record);
563 565
564 record->dispose(); 566 record->dispose();
565 owner->startOneShot(0, BLINK_FROM_HERE); 567 owner->startOneShot(0, BLINK_FROM_HERE);
566 568
567 owner = nullptr; 569 owner = nullptr;
568 ThreadState::current()->collectGarbage( 570 ThreadState::current()->collectGarbage(
569 BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC); 571 BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC);
570 EXPECT_TRUE(record->ownerIsDestructed()); 572 EXPECT_TRUE(record->ownerIsDestructed());
571 573
572 EXPECT_FALSE(record->timerHasFired()); 574 EXPECT_FALSE(record->timerHasFired());
573 m_platform.runUntilIdle(); 575 m_platform->runUntilIdle();
574 EXPECT_FALSE(record->timerHasFired()); 576 EXPECT_FALSE(record->timerHasFired());
575 } 577 }
576 578
577 TEST_F(TimerTest, MarkOnHeapTimerAsUnreachable) { 579 TEST_F(TimerTest, MarkOnHeapTimerAsUnreachable) {
578 RefPtr<OnHeapTimerOwner::Record> record = OnHeapTimerOwner::Record::create(); 580 RefPtr<OnHeapTimerOwner::Record> record = OnHeapTimerOwner::Record::create();
579 Persistent<OnHeapTimerOwner> owner = new OnHeapTimerOwner(record); 581 Persistent<OnHeapTimerOwner> owner = new OnHeapTimerOwner(record);
580 582
581 record->dispose(); 583 record->dispose();
582 owner->startOneShot(0, BLINK_FROM_HERE); 584 owner->startOneShot(0, BLINK_FROM_HERE);
583 585
584 owner = nullptr; 586 owner = nullptr;
585 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack, 587 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack,
586 BlinkGC::GCWithoutSweep, 588 BlinkGC::GCWithoutSweep,
587 BlinkGC::ForcedGC); 589 BlinkGC::ForcedGC);
588 EXPECT_FALSE(record->ownerIsDestructed()); 590 EXPECT_FALSE(record->ownerIsDestructed());
589 591
590 { 592 {
591 GCForbiddenScope scope; 593 GCForbiddenScope scope;
592 EXPECT_FALSE(record->timerHasFired()); 594 EXPECT_FALSE(record->timerHasFired());
593 m_platform.runUntilIdle(); 595 m_platform->runUntilIdle();
594 EXPECT_FALSE(record->timerHasFired()); 596 EXPECT_FALSE(record->timerHasFired());
595 EXPECT_FALSE(record->ownerIsDestructed()); 597 EXPECT_FALSE(record->ownerIsDestructed());
596 } 598 }
597 } 599 }
598 600
599 namespace { 601 namespace {
600 602
601 class TaskObserver : public base::MessageLoop::TaskObserver { 603 class TaskObserver : public base::MessageLoop::TaskObserver {
602 public: 604 public:
603 TaskObserver(WebTaskRunner* task_runner, 605 TaskObserver(WebTaskRunner* task_runner,
(...skipping 10 matching lines...) Expand all
614 WebTaskRunner* m_taskRunner; 616 WebTaskRunner* m_taskRunner;
615 std::vector<WebTaskRunner*>* m_runOrder; 617 std::vector<WebTaskRunner*>* m_runOrder;
616 }; 618 };
617 619
618 } // namespace 620 } // namespace
619 621
620 TEST_F(TimerTest, MoveToNewTaskRunnerOneShot) { 622 TEST_F(TimerTest, MoveToNewTaskRunnerOneShot) {
621 std::vector<WebTaskRunner*> runOrder; 623 std::vector<WebTaskRunner*> runOrder;
622 624
623 scoped_refptr<scheduler::TaskQueue> taskRunner1( 625 scoped_refptr<scheduler::TaskQueue> taskRunner1(
624 m_platform.rendererScheduler()->NewTimerTaskRunner( 626 m_platform->rendererScheduler()->NewTimerTaskRunner(
625 scheduler::TaskQueue::QueueType::TEST)); 627 scheduler::TaskQueue::QueueType::TEST));
626 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1); 628 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1);
627 TaskObserver taskObserver1(&webTaskRunner1, &runOrder); 629 TaskObserver taskObserver1(&webTaskRunner1, &runOrder);
628 taskRunner1->AddTaskObserver(&taskObserver1); 630 taskRunner1->AddTaskObserver(&taskObserver1);
629 631
630 scoped_refptr<scheduler::TaskQueue> taskRunner2( 632 scoped_refptr<scheduler::TaskQueue> taskRunner2(
631 m_platform.rendererScheduler()->NewTimerTaskRunner( 633 m_platform->rendererScheduler()->NewTimerTaskRunner(
632 scheduler::TaskQueue::QueueType::TEST)); 634 scheduler::TaskQueue::QueueType::TEST));
633 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2); 635 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2);
634 TaskObserver taskObserver2(&webTaskRunner2, &runOrder); 636 TaskObserver taskObserver2(&webTaskRunner2, &runOrder);
635 taskRunner2->AddTaskObserver(&taskObserver2); 637 taskRunner2->AddTaskObserver(&taskObserver2);
636 638
637 TimerForTest<TimerTest> timer(&webTaskRunner1, this, 639 TimerForTest<TimerTest> timer(&webTaskRunner1, this,
638 &TimerTest::countingTask); 640 &TimerTest::countingTask);
639 641
640 double startTime = monotonicallyIncreasingTime(); 642 double startTime = monotonicallyIncreasingTime();
641 643
642 timer.startOneShot(1, BLINK_FROM_HERE); 644 timer.startOneShot(1, BLINK_FROM_HERE);
643 645
644 m_platform.runForPeriodSeconds(0.5); 646 m_platform->runForPeriodSeconds(0.5);
645 647
646 timer.moveToNewTaskRunner(&webTaskRunner2); 648 timer.moveToNewTaskRunner(&webTaskRunner2);
647 649
648 m_platform.runUntilIdle(); 650 m_platform->runUntilIdle();
649 651
650 EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0)); 652 EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0));
651 653
652 EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner2)); 654 EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner2));
653 655
654 EXPECT_TRUE(taskRunner1->IsEmpty()); 656 EXPECT_TRUE(taskRunner1->IsEmpty());
655 EXPECT_TRUE(taskRunner2->IsEmpty()); 657 EXPECT_TRUE(taskRunner2->IsEmpty());
656 } 658 }
657 659
658 TEST_F(TimerTest, MoveToNewTaskRunnerRepeating) { 660 TEST_F(TimerTest, MoveToNewTaskRunnerRepeating) {
659 std::vector<WebTaskRunner*> runOrder; 661 std::vector<WebTaskRunner*> runOrder;
660 662
661 scoped_refptr<scheduler::TaskQueue> taskRunner1( 663 scoped_refptr<scheduler::TaskQueue> taskRunner1(
662 m_platform.rendererScheduler()->NewTimerTaskRunner( 664 m_platform->rendererScheduler()->NewTimerTaskRunner(
663 scheduler::TaskQueue::QueueType::TEST)); 665 scheduler::TaskQueue::QueueType::TEST));
664 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1); 666 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1);
665 TaskObserver taskObserver1(&webTaskRunner1, &runOrder); 667 TaskObserver taskObserver1(&webTaskRunner1, &runOrder);
666 taskRunner1->AddTaskObserver(&taskObserver1); 668 taskRunner1->AddTaskObserver(&taskObserver1);
667 669
668 scoped_refptr<scheduler::TaskQueue> taskRunner2( 670 scoped_refptr<scheduler::TaskQueue> taskRunner2(
669 m_platform.rendererScheduler()->NewTimerTaskRunner( 671 m_platform->rendererScheduler()->NewTimerTaskRunner(
670 scheduler::TaskQueue::QueueType::TEST)); 672 scheduler::TaskQueue::QueueType::TEST));
671 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2); 673 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2);
672 TaskObserver taskObserver2(&webTaskRunner2, &runOrder); 674 TaskObserver taskObserver2(&webTaskRunner2, &runOrder);
673 taskRunner2->AddTaskObserver(&taskObserver2); 675 taskRunner2->AddTaskObserver(&taskObserver2);
674 676
675 TimerForTest<TimerTest> timer(&webTaskRunner1, this, 677 TimerForTest<TimerTest> timer(&webTaskRunner1, this,
676 &TimerTest::countingTask); 678 &TimerTest::countingTask);
677 679
678 double startTime = monotonicallyIncreasingTime(); 680 double startTime = monotonicallyIncreasingTime();
679 681
680 timer.startRepeating(1, BLINK_FROM_HERE); 682 timer.startRepeating(1, BLINK_FROM_HERE);
681 683
682 m_platform.runForPeriodSeconds(2.5); 684 m_platform->runForPeriodSeconds(2.5);
683 685
684 timer.moveToNewTaskRunner(&webTaskRunner2); 686 timer.moveToNewTaskRunner(&webTaskRunner2);
685 687
686 m_platform.runForPeriodSeconds(2); 688 m_platform->runForPeriodSeconds(2);
687 689
688 EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0, startTime + 2.0, 690 EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0, startTime + 2.0,
689 startTime + 3.0, startTime + 4.0)); 691 startTime + 3.0, startTime + 4.0));
690 692
691 EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner1, &webTaskRunner1, 693 EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner1, &webTaskRunner1,
692 &webTaskRunner2, &webTaskRunner2)); 694 &webTaskRunner2, &webTaskRunner2));
693 695
694 EXPECT_TRUE(taskRunner1->IsEmpty()); 696 EXPECT_TRUE(taskRunner1->IsEmpty());
695 EXPECT_FALSE(taskRunner2->IsEmpty()); 697 EXPECT_FALSE(taskRunner2->IsEmpty());
696 } 698 }
697 699
698 // This test checks that when inactive timer is moved to a different task 700 // This test checks that when inactive timer is moved to a different task
699 // runner it isn't activated. 701 // runner it isn't activated.
700 TEST_F(TimerTest, MoveToNewTaskRunnerWithoutTasks) { 702 TEST_F(TimerTest, MoveToNewTaskRunnerWithoutTasks) {
701 scoped_refptr<scheduler::TaskQueue> taskRunner1( 703 scoped_refptr<scheduler::TaskQueue> taskRunner1(
702 m_platform.rendererScheduler()->NewTimerTaskRunner( 704 m_platform->rendererScheduler()->NewTimerTaskRunner(
703 scheduler::TaskQueue::QueueType::TEST)); 705 scheduler::TaskQueue::QueueType::TEST));
704 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1); 706 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1);
705 707
706 scoped_refptr<scheduler::TaskQueue> taskRunner2( 708 scoped_refptr<scheduler::TaskQueue> taskRunner2(
707 m_platform.rendererScheduler()->NewTimerTaskRunner( 709 m_platform->rendererScheduler()->NewTimerTaskRunner(
708 scheduler::TaskQueue::QueueType::TEST)); 710 scheduler::TaskQueue::QueueType::TEST));
709 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2); 711 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2);
710 712
711 TimerForTest<TimerTest> timer(&webTaskRunner1, this, 713 TimerForTest<TimerTest> timer(&webTaskRunner1, this,
712 &TimerTest::countingTask); 714 &TimerTest::countingTask);
713 715
714 m_platform.runUntilIdle(); 716 m_platform->runUntilIdle();
715 EXPECT_TRUE(!m_runTimes.size()); 717 EXPECT_TRUE(!m_runTimes.size());
716 EXPECT_TRUE(taskRunner1->IsEmpty()); 718 EXPECT_TRUE(taskRunner1->IsEmpty());
717 EXPECT_TRUE(taskRunner2->IsEmpty()); 719 EXPECT_TRUE(taskRunner2->IsEmpty());
718 } 720 }
719 721
720 } // namespace 722 } // namespace
721 } // namespace blink 723 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698