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

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

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

Powered by Google App Engine
This is Rietveld 408576698