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

Side by Side Diff: cc/test/ordered_simple_task_runner_unittest.cc

Issue 387493002: Fixing and enhancing OrderedSimpleTaskRunner to allow 100% deterministic tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing Windows compile (no idea why this worked on non-windows!) Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <string> 5 #include <string>
6 6
7 #include "base/cancelable_callback.h" 7 #include "base/cancelable_callback.h"
8 #include "base/format_macros.h"
8 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
10 #include "base/test/test_pending_task.h" 11 #include "base/test/test_pending_task.h"
11 #include "cc/test/ordered_simple_task_runner.h" 12 #include "cc/test/ordered_simple_task_runner.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
15 #define RUN_AND_CHECK_RESULT(tasks_remain, run_func, expected_result) \
16 EXPECT_EQ(tasks_remain, task_runner_->run_func); \
17 EXPECT_EQ(expected_result, executed_tasks_); \
18 executed_tasks_ = "";
19
20 namespace {
21
22 bool ReturnTrue() {
23 return true;
24 }
25
26 bool ReturnFalse() {
27 return false;
28 }
29 };
30
14 namespace cc { 31 namespace cc {
15 32
33 TEST(TestOrderablePendingTask, Ordering) {
34 TestOrderablePendingTask a;
35 TestOrderablePendingTask b;
36 TestOrderablePendingTask c;
37
38 EXPECT_EQ(a, a);
39 EXPECT_EQ(b, b);
40 EXPECT_EQ(c, c);
41 EXPECT_LT(a, b);
42 EXPECT_LT(b, c);
43 EXPECT_LT(a, c);
44
45 TestOrderablePendingTask a2 = a;
46 EXPECT_EQ(a, a2);
47 EXPECT_LT(a2, b);
48 EXPECT_LT(b, c);
49 EXPECT_LT(a2, c);
50 }
51
16 class OrderedSimpleTaskRunnerTest : public testing::Test { 52 class OrderedSimpleTaskRunnerTest : public testing::Test {
17 public: 53 public:
18 OrderedSimpleTaskRunnerTest() { 54 OrderedSimpleTaskRunnerTest()
19 task_runner_ = new OrderedSimpleTaskRunner; 55 : now_src_(TestNowSource::Create(base::TimeTicks())) {
56 task_runner_ = new OrderedSimpleTaskRunner(now_src_, true);
20 } 57 }
21 virtual ~OrderedSimpleTaskRunnerTest() {} 58 virtual ~OrderedSimpleTaskRunnerTest() {}
22 59
23 protected: 60 protected:
24 void CreateAndPostTask(int task_num, base::TimeDelta delay) { 61 std::string executed_tasks_;
62 scoped_refptr<TestNowSource> now_src_;
63 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
64
65 void PostTask(int task_num, base::TimeDelta delay) {
25 base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task, 66 base::Closure test_task = base::Bind(&OrderedSimpleTaskRunnerTest::Task,
26 base::Unretained(this), 67 base::Unretained(this),
27 task_num); 68 task_num);
28 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay); 69 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay);
29 } 70 }
30 71
31 void RunAndCheckResult(const std::string expected_result) { 72 void PostTaskWhichPostsInstantTask(int task_num, base::TimeDelta delay) {
32 task_runner_->RunPendingTasks(); 73 base::Closure test_task =
33 EXPECT_EQ(expected_result, executed_tasks_); 74 base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsInstantTask,
75 base::Unretained(this),
76 task_num);
77 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay);
78 }
79
80 void PostTaskWhichPostsDelayedTask(int task_num,
81 base::TimeDelta delay1,
82 base::TimeDelta delay2) {
83 base::Closure test_task =
84 base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsDelayedTask,
85 base::Unretained(this),
86 task_num,
87 delay2);
88 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay1);
89 }
90
91 void PostTaskWhichCallsRun(int task_num, base::TimeDelta delay) {
92 base::Closure test_task =
93 base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichCallsRun,
94 base::Unretained(this),
95 task_num);
96 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay);
97 }
98
99 void PostTaskWhichPostsTaskAgain(int task_num, base::TimeDelta delay) {
100 base::Closure test_task =
101 base::Bind(&OrderedSimpleTaskRunnerTest::TaskWhichPostsAgain,
102 base::Unretained(this),
103 task_num,
104 delay);
105 task_runner_->PostDelayedTask(FROM_HERE, test_task, delay);
34 } 106 }
35 107
36 private: 108 private:
37 std::string executed_tasks_;
38 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
39
40 void Task(int task_num) { 109 void Task(int task_num) {
41 if (!executed_tasks_.empty()) 110 if (!executed_tasks_.empty())
42 executed_tasks_ += " "; 111 executed_tasks_ += " ";
43 executed_tasks_ += base::StringPrintf("%d", task_num); 112 executed_tasks_ +=
113 base::StringPrintf("%d(%" PRId64 "ms)",
114 task_num,
115 now_src_->Now().ToInternalValue() /
116 base::Time::kMicrosecondsPerMillisecond);
117 }
118
119 void TaskWhichPostsInstantTask(int task_num) {
120 Task(task_num);
121 PostTask(-task_num, base::TimeDelta());
122 }
123
124 void TaskWhichPostsDelayedTask(int task_num, base::TimeDelta delay) {
125 Task(task_num);
126 PostTask(-task_num, delay);
127 }
128
129 void TaskWhichCallsRun(int task_num) {
130 Task(task_num);
131 task_runner_->RunPendingTasks();
132 }
133
134 void TaskWhichPostsAgain(int task_num, base::TimeDelta delay) {
135 Task(task_num);
136 PostTaskWhichPostsTaskAgain(task_num, delay);
44 } 137 }
45 138
46 DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest); 139 DISALLOW_COPY_AND_ASSIGN(OrderedSimpleTaskRunnerTest);
47 }; 140 };
48 141
49 TEST_F(OrderedSimpleTaskRunnerTest, BasicOrderingTest) { 142 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTest) {
50 CreateAndPostTask(1, base::TimeDelta()); 143 PostTask(1, base::TimeDelta());
51 CreateAndPostTask(2, base::TimeDelta()); 144 PostTask(2, base::TimeDelta());
52 CreateAndPostTask(3, base::TimeDelta()); 145 PostTask(3, base::TimeDelta());
53 146
54 RunAndCheckResult("1 2 3"); 147 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "1(0ms) 2(0ms) 3(0ms)");
148 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
149
150 PostTask(4, base::TimeDelta());
151 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "4(0ms)");
152 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
153 }
154
155 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingTasks) {
156 PostTaskWhichPostsInstantTask(1, base::TimeDelta());
157 PostTaskWhichPostsInstantTask(2, base::TimeDelta());
158 PostTaskWhichPostsInstantTask(3, base::TimeDelta());
159
160 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(0ms) 2(0ms) 3(0ms)");
161 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "-1(0ms) -2(0ms) -3(0ms)");
162 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
163 }
164
165 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingDelayedTasks) {
166 PostTaskWhichPostsDelayedTask(
167 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1));
168 PostTaskWhichPostsDelayedTask(
169 2, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1));
170 PostTaskWhichPostsDelayedTask(
171 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1));
172
173 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(0ms) 2(0ms) 3(0ms)");
174 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "-1(1ms) -2(1ms) -3(1ms)");
175 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
176 }
177
178 TEST_F(OrderedSimpleTaskRunnerTest,
179 SimpleOrderingTestPostingReordingDelayedTasks) {
180 PostTaskWhichPostsDelayedTask(1,
181 base::TimeDelta::FromMilliseconds(1),
182 base::TimeDelta::FromMilliseconds(20));
183 PostTaskWhichPostsDelayedTask(2,
184 base::TimeDelta::FromMilliseconds(2),
185 base::TimeDelta::FromMilliseconds(5));
186 PostTaskWhichPostsDelayedTask(3,
187 base::TimeDelta::FromMilliseconds(3),
188 base::TimeDelta::FromMilliseconds(5));
189
190 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(1ms) 2(2ms) 3(3ms)");
191 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "-2(7ms) -3(8ms) -1(21ms)");
192 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
193 }
194
195 TEST_F(OrderedSimpleTaskRunnerTest,
196 SimpleOrderingTestPostingReordingDelayedTasksOverlap) {
197 PostTaskWhichPostsDelayedTask(1,
198 base::TimeDelta::FromMilliseconds(1),
199 base::TimeDelta::FromMilliseconds(5));
200 PostTaskWhichPostsDelayedTask(2,
201 base::TimeDelta::FromMilliseconds(5),
202 base::TimeDelta::FromMilliseconds(10));
203 PostTaskWhichPostsDelayedTask(3,
204 base::TimeDelta::FromMilliseconds(10),
205 base::TimeDelta::FromMilliseconds(1));
206
207 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(1ms) 2(5ms)");
208 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "-1(6ms) 3(10ms)");
209 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "-3(11ms) -2(15ms)");
210 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
211 }
212
213 TEST_F(OrderedSimpleTaskRunnerTest, SimpleOrderingTestPostingAndRentrantTasks) {
214 PostTaskWhichPostsInstantTask(1, base::TimeDelta());
215 PostTaskWhichCallsRun(2, base::TimeDelta());
216 PostTaskWhichPostsInstantTask(3, base::TimeDelta());
217
218 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(0ms) 2(0ms) 3(0ms)");
219 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "-1(0ms) -3(0ms)");
220 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
221 }
222
223 TEST_F(OrderedSimpleTaskRunnerTest,
224 SimpleOrderingTestPostingDelayedAndRentrantTasks) {
225 PostTaskWhichPostsDelayedTask(
226 1, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1));
227 PostTaskWhichCallsRun(2, base::TimeDelta());
228 PostTaskWhichPostsDelayedTask(
229 3, base::TimeDelta(), base::TimeDelta::FromMilliseconds(1));
230
231 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(0ms) 2(0ms) 3(0ms)");
232 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "-1(1ms) -3(1ms)");
233 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
55 } 234 }
56 235
57 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) { 236 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasks) {
58 CreateAndPostTask(1, base::TimeDelta()); 237 PostTask(1, base::TimeDelta());
59 CreateAndPostTask(2, base::TimeDelta::FromMilliseconds(15)); 238 PostTask(2, base::TimeDelta::FromMilliseconds(15));
60 CreateAndPostTask(3, base::TimeDelta()); 239 PostTask(3, base::TimeDelta());
61 CreateAndPostTask(4, base::TimeDelta::FromMilliseconds(8)); 240 PostTask(4, base::TimeDelta::FromMilliseconds(8));
62 241
63 RunAndCheckResult("1 3 4 2"); 242 RUN_AND_CHECK_RESULT(
243 false, RunPendingTasks(), "1(0ms) 3(0ms) 4(8ms) 2(15ms)");
244 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
245 }
246
247 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedPostingTasks) {
248 PostTaskWhichPostsInstantTask(1, base::TimeDelta());
249 PostTaskWhichPostsInstantTask(2, base::TimeDelta::FromMilliseconds(15));
250 PostTaskWhichPostsInstantTask(3, base::TimeDelta());
251 PostTaskWhichPostsInstantTask(4, base::TimeDelta::FromMilliseconds(8));
252
253 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(0ms) 3(0ms)");
254 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "-1(0ms) -3(0ms) 4(8ms)");
255 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "-4(8ms) 2(15ms)");
256 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "-2(15ms)");
257 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
258 }
259
260 TEST_F(OrderedSimpleTaskRunnerTest, OrderingTestWithDelayedTasksManualNow) {
261 task_runner_->SetAutoAdvanceNowToPendingTasks(false);
262 PostTask(1, base::TimeDelta());
263 PostTask(2, base::TimeDelta::FromMilliseconds(15));
264 PostTask(3, base::TimeDelta());
265 PostTask(4, base::TimeDelta::FromMilliseconds(8));
266
267 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(0ms) 3(0ms)");
268 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "");
269 EXPECT_EQ(task_runner_->DelayToNextTaskTime(),
270 base::TimeDelta::FromMilliseconds(8));
271 now_src_->SetNow(base::TimeTicks::FromInternalValue(5000));
272 EXPECT_EQ(task_runner_->DelayToNextTaskTime(),
273 base::TimeDelta::FromMilliseconds(3));
274 now_src_->SetNow(base::TimeTicks::FromInternalValue(25000));
275 EXPECT_EQ(task_runner_->DelayToNextTaskTime(), base::TimeDelta());
276 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "4(25ms) 2(25ms)");
277 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
278 }
279
280 TEST_F(OrderedSimpleTaskRunnerTest, RunUntilIdle) {
281 PostTaskWhichPostsInstantTask(1, base::TimeDelta());
282 RUN_AND_CHECK_RESULT(false, RunUntilIdle(), "1(0ms) -1(0ms)");
283 RUN_AND_CHECK_RESULT(false, RunUntilIdle(), "");
284 }
285
286 TEST_F(OrderedSimpleTaskRunnerTest, RunUntilTimeAutoNow) {
287 PostTaskWhichPostsInstantTask(1, base::TimeDelta());
288 PostTaskWhichPostsInstantTask(2, base::TimeDelta::FromMilliseconds(2));
289 PostTaskWhichPostsInstantTask(3, base::TimeDelta::FromMilliseconds(3));
290
291 task_runner_->SetAutoAdvanceNowToPendingTasks(true);
292
293 base::TimeTicks run_at = base::TimeTicks();
294
295 run_at += base::TimeDelta::FromMilliseconds(2);
296 RUN_AND_CHECK_RESULT(
297 true, RunUntilTime(run_at), "1(0ms) -1(0ms) 2(2ms) -2(2ms)");
298 EXPECT_EQ(run_at, now_src_->Now());
299
300 run_at += base::TimeDelta::FromMilliseconds(1);
301 RUN_AND_CHECK_RESULT(false, RunUntilTime(run_at), "3(3ms) -3(3ms)");
302 EXPECT_EQ(run_at, now_src_->Now());
303
304 run_at += base::TimeDelta::FromMilliseconds(1);
305 RUN_AND_CHECK_RESULT(false, RunUntilTime(run_at), "");
306 EXPECT_EQ(run_at, now_src_->Now());
307 }
308
309 TEST_F(OrderedSimpleTaskRunnerTest, RunUntilTimeManualNow) {
310 PostTaskWhichPostsInstantTask(1, base::TimeDelta());
311 PostTaskWhichPostsInstantTask(2, base::TimeDelta::FromMilliseconds(2));
312 PostTaskWhichPostsInstantTask(3, base::TimeDelta::FromMilliseconds(3));
313
314 task_runner_->SetAutoAdvanceNowToPendingTasks(false);
315
316 base::TimeTicks run_at = base::TimeTicks();
317
318 run_at += base::TimeDelta::FromMilliseconds(2);
319 RUN_AND_CHECK_RESULT(
320 true, RunUntilTime(run_at), "1(2ms) 2(2ms) -1(2ms) -2(2ms)");
321 EXPECT_EQ(run_at, now_src_->Now());
322
323 run_at += base::TimeDelta::FromMilliseconds(1);
324 RUN_AND_CHECK_RESULT(false, RunUntilTime(run_at), "3(3ms) -3(3ms)");
325 EXPECT_EQ(run_at, now_src_->Now());
326
327 run_at += base::TimeDelta::FromMilliseconds(1);
328 RUN_AND_CHECK_RESULT(false, RunUntilTime(run_at), "");
329 EXPECT_EQ(run_at, now_src_->Now());
330 }
331
332 TEST_F(OrderedSimpleTaskRunnerTest, RunForPeriod) {
333 PostTaskWhichPostsInstantTask(1, base::TimeDelta());
334 PostTaskWhichPostsInstantTask(2, base::TimeDelta::FromMilliseconds(2));
335 PostTaskWhichPostsInstantTask(3, base::TimeDelta::FromMilliseconds(3));
336
337 RUN_AND_CHECK_RESULT(true,
338 RunForPeriod(base::TimeDelta::FromMilliseconds(2)),
339 "1(0ms) -1(0ms) 2(2ms) -2(2ms)");
340 EXPECT_EQ(base::TimeTicks() + base::TimeDelta::FromMilliseconds(2),
341 now_src_->Now());
342
343 RUN_AND_CHECK_RESULT(false,
344 RunForPeriod(base::TimeDelta::FromMilliseconds(1)),
345 "3(3ms) -3(3ms)");
346 EXPECT_EQ(base::TimeTicks() + base::TimeDelta::FromMilliseconds(3),
347 now_src_->Now());
348
349 RUN_AND_CHECK_RESULT(
350 false, RunForPeriod(base::TimeDelta::FromMilliseconds(1)), "");
351 EXPECT_EQ(base::TimeTicks() + base::TimeDelta::FromMilliseconds(4),
352 now_src_->Now());
353 }
354
355 TEST_F(OrderedSimpleTaskRunnerTest, RunTasksWithCallback) {
356 base::Callback<bool(void)> return_true = base::Bind(&ReturnTrue);
357 base::Callback<bool(void)> return_false = base::Bind(&ReturnFalse);
358
359 PostTask(1, base::TimeDelta());
360
361 RUN_AND_CHECK_RESULT(true, RunTasks(return_false), "");
362 RUN_AND_CHECK_RESULT(false, RunTasks(return_true), "1(0ms)");
363 }
364
365 TEST_F(OrderedSimpleTaskRunnerTest, EmptyTaskList) {
366 RUN_AND_CHECK_RESULT(false, RunPendingTasks(), "");
367 RUN_AND_CHECK_RESULT(false, RunUntilIdle(), "");
368
369 ASSERT_EQ(base::TimeTicks(), now_src_->Now());
370
371 RUN_AND_CHECK_RESULT(
372 false, RunUntilTime(base::TimeTicks::FromInternalValue(100)), "");
373 EXPECT_EQ(base::TimeTicks::FromInternalValue(100), now_src_->Now());
374
375 RUN_AND_CHECK_RESULT(
376 false, RunForPeriod(base::TimeDelta::FromInternalValue(100)), "");
377 EXPECT_EQ(base::TimeTicks::FromInternalValue(200), now_src_->Now());
378
379 base::Callback<bool(void)> return_true = base::Bind(&ReturnTrue);
380 RUN_AND_CHECK_RESULT(false, RunTasks(return_true), "");
381 }
382
383 TEST_F(OrderedSimpleTaskRunnerTest, RunPendingTasksTimeout) {
384 PostTask(1, base::TimeDelta());
385 PostTask(2, base::TimeDelta());
386 PostTask(3, base::TimeDelta());
387 PostTask(4, base::TimeDelta());
388 PostTask(5, base::TimeDelta());
389 PostTask(6, base::TimeDelta());
390
391 task_runner_->SetRunTaskLimit(3);
392 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "1(0ms) 2(0ms) 3(0ms)");
393
394 task_runner_->SetRunTaskLimit(2);
395 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "4(0ms) 5(0ms)");
396
397 task_runner_->SetRunTaskLimit(0);
398 RUN_AND_CHECK_RESULT(true, RunPendingTasks(), "");
399 }
400
401 TEST_F(OrderedSimpleTaskRunnerTest, RunUntilIdleTimeout) {
402 PostTaskWhichPostsTaskAgain(1, base::TimeDelta::FromMilliseconds(3));
403
404 task_runner_->SetRunTaskLimit(3);
405 RUN_AND_CHECK_RESULT(true, RunUntilIdle(), "1(3ms) 1(6ms) 1(9ms)");
406
407 task_runner_->SetRunTaskLimit(2);
408 RUN_AND_CHECK_RESULT(true, RunUntilIdle(), "1(12ms) 1(15ms)");
409
410 task_runner_->SetRunTaskLimit(0);
411 RUN_AND_CHECK_RESULT(true, RunUntilIdle(), "");
412 }
413
414 TEST_F(OrderedSimpleTaskRunnerTest, RunUntilTimeout) {
415 base::TimeTicks run_to = base::TimeTicks() + base::TimeDelta::FromSeconds(1);
416
417 PostTask(1, base::TimeDelta::FromMilliseconds(1));
418 PostTask(2, base::TimeDelta::FromMilliseconds(2));
419 PostTask(3, base::TimeDelta::FromMilliseconds(3));
420 PostTask(4, base::TimeDelta::FromMilliseconds(4));
421 PostTask(5, base::TimeDelta::FromMilliseconds(5));
422
423 EXPECT_EQ(base::TimeTicks(), now_src_->Now());
424 task_runner_->SetRunTaskLimit(3);
425 RUN_AND_CHECK_RESULT(true, RunUntilTime(run_to), "1(1ms) 2(2ms) 3(3ms)");
426 EXPECT_EQ(base::TimeTicks() + base::TimeDelta::FromMilliseconds(3),
427 now_src_->Now());
428
429 task_runner_->SetRunTaskLimit(0);
430 RUN_AND_CHECK_RESULT(true, RunUntilTime(run_to), "");
431
432 task_runner_->SetRunTaskLimit(100);
433 RUN_AND_CHECK_RESULT(false, RunUntilTime(run_to), "4(4ms) 5(5ms)");
434 EXPECT_EQ(run_to, now_src_->Now());
64 } 435 }
65 436
66 } // namespace cc 437 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698