OLD | NEW |
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 |
OLD | NEW |