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

Side by Side Diff: components/scheduler/base/task_queue_manager_unittest.cc

Issue 1477353002: Revert of Move throttling of background timers into the renderer scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 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 "components/scheduler/base/task_queue_manager.h" 5 #include "components/scheduler/base/task_queue_manager.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/test/simple_test_tick_clock.h" 10 #include "base/test/simple_test_tick_clock.h"
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 209
210 message_loop_->RunUntilIdle(); 210 message_loop_->RunUntilIdle();
211 // Note we expect task 3 to run last because it's non-nestable. 211 // Note we expect task 3 to run last because it's non-nestable.
212 EXPECT_THAT(run_order, ElementsAre(1, 2, 4, 5, 3)); 212 EXPECT_THAT(run_order, ElementsAre(1, 2, 4, 5, 3));
213 } 213 }
214 214
215 TEST_F(TaskQueueManagerTest, QueuePolling) { 215 TEST_F(TaskQueueManagerTest, QueuePolling) {
216 Initialize(1u); 216 Initialize(1u);
217 217
218 std::vector<int> run_order; 218 std::vector<int> run_order;
219 EXPECT_FALSE(runners_[0]->HasPendingImmediateTask()); 219 EXPECT_TRUE(runners_[0]->IsQueueEmpty());
220 runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); 220 runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
221 EXPECT_TRUE(runners_[0]->HasPendingImmediateTask()); 221 EXPECT_FALSE(runners_[0]->IsQueueEmpty());
222 222
223 test_task_runner_->RunUntilIdle(); 223 test_task_runner_->RunUntilIdle();
224 EXPECT_FALSE(runners_[0]->HasPendingImmediateTask()); 224 EXPECT_TRUE(runners_[0]->IsQueueEmpty());
225 } 225 }
226 226
227 TEST_F(TaskQueueManagerTest, DelayedTaskPosting) { 227 TEST_F(TaskQueueManagerTest, DelayedTaskPosting) {
228 Initialize(1u); 228 Initialize(1u);
229 229
230 std::vector<int> run_order; 230 std::vector<int> run_order;
231 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); 231 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10));
232 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), 232 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
233 delay); 233 delay);
234 EXPECT_EQ(delay, test_task_runner_->DelayToNextTaskTime()); 234 EXPECT_EQ(delay, test_task_runner_->DelayToNextTaskTime());
235 EXPECT_EQ(TaskQueue::QueueState::NO_IMMEDIATE_WORK, 235 EXPECT_TRUE(runners_[0]->IsQueueEmpty());
236 runners_[0]->GetQueueState());
237 EXPECT_TRUE(run_order.empty()); 236 EXPECT_TRUE(run_order.empty());
238 237
239 // The task doesn't run before the delay has completed. 238 // The task doesn't run before the delay has completed.
240 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(9)); 239 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(9));
241 EXPECT_TRUE(run_order.empty()); 240 EXPECT_TRUE(run_order.empty());
242 241
243 // After the delay has completed, the task runs normally. 242 // After the delay has completed, the task runs normally.
244 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1)); 243 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1));
245 EXPECT_THAT(run_order, ElementsAre(1)); 244 EXPECT_THAT(run_order, ElementsAre(1));
246 EXPECT_EQ(TaskQueue::QueueState::EMPTY, runners_[0]->GetQueueState());
247 } 245 }
248 246
249 bool MessageLoopTaskCounter(size_t* count) { 247 bool MessageLoopTaskCounter(size_t* count) {
250 *count = *count + 1; 248 *count = *count + 1;
251 return true; 249 return true;
252 } 250 }
253 251
254 TEST_F(TaskQueueManagerTest, DelayedTaskExecutedInOneMessageLoopTask) { 252 TEST_F(TaskQueueManagerTest, DelayedTaskExecutedInOneMessageLoopTask) {
255 Initialize(1u); 253 Initialize(1u);
256 254
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 Initialize(1u); 368 Initialize(1u);
371 runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); 369 runners_[0]->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL);
372 370
373 std::vector<int> run_order; 371 std::vector<int> run_order;
374 // Posting a task when pumping is disabled doesn't result in work getting 372 // Posting a task when pumping is disabled doesn't result in work getting
375 // posted. 373 // posted.
376 runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); 374 runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
377 EXPECT_FALSE(test_task_runner_->HasPendingTasks()); 375 EXPECT_FALSE(test_task_runner_->HasPendingTasks());
378 376
379 // However polling still works. 377 // However polling still works.
380 EXPECT_TRUE(runners_[0]->HasPendingImmediateTask()); 378 EXPECT_FALSE(runners_[0]->IsQueueEmpty());
381 379
382 // After pumping the task runs normally. 380 // After pumping the task runs normally.
383 runners_[0]->PumpQueue(); 381 runners_[0]->PumpQueue();
384 EXPECT_TRUE(test_task_runner_->HasPendingTasks()); 382 EXPECT_TRUE(test_task_runner_->HasPendingTasks());
385 test_task_runner_->RunUntilIdle(); 383 test_task_runner_->RunUntilIdle();
386 EXPECT_THAT(run_order, ElementsAre(1)); 384 EXPECT_THAT(run_order, ElementsAre(1));
387 } 385 }
388 386
389 TEST_F(TaskQueueManagerTest, ManualPumpingToggle) { 387 TEST_F(TaskQueueManagerTest, ManualPumpingToggle) {
390 Initialize(1u); 388 Initialize(1u);
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 test_task_runner_->RunUntilIdle(); 996 test_task_runner_->RunUntilIdle();
999 EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit()); 997 EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit());
1000 998
1001 queue0->PostTask(FROM_HERE, base::Bind(&NopTask)); 999 queue0->PostTask(FROM_HERE, base::Bind(&NopTask));
1002 queue1->PostTask(FROM_HERE, base::Bind(&NopTask)); 1000 queue1->PostTask(FROM_HERE, base::Bind(&NopTask));
1003 test_task_runner_->RunUntilIdle(); 1001 test_task_runner_->RunUntilIdle();
1004 EXPECT_FALSE(manager_->GetAndClearSystemIsQuiescentBit()); 1002 EXPECT_FALSE(manager_->GetAndClearSystemIsQuiescentBit());
1005 EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit()); 1003 EXPECT_TRUE(manager_->GetAndClearSystemIsQuiescentBit());
1006 } 1004 }
1007 1005
1008 TEST_F(TaskQueueManagerTest, HasPendingImmediateTask) { 1006 TEST_F(TaskQueueManagerTest, IsQueueEmpty) {
1009 Initialize(2u); 1007 Initialize(2u);
1010 internal::TaskQueueImpl* queue0 = runners_[0].get(); 1008 internal::TaskQueueImpl* queue0 = runners_[0].get();
1011 internal::TaskQueueImpl* queue1 = runners_[1].get(); 1009 internal::TaskQueueImpl* queue1 = runners_[1].get();
1012 queue0->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO); 1010 queue0->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO);
1013 queue1->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); 1011 queue1->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL);
1014 1012
1015 EXPECT_FALSE(queue0->HasPendingImmediateTask()); 1013 EXPECT_TRUE(queue0->IsQueueEmpty());
1016 EXPECT_FALSE(queue1->HasPendingImmediateTask()); 1014 EXPECT_TRUE(queue1->IsQueueEmpty());
1017 1015
1018 queue0->PostTask(FROM_HERE, base::Bind(NullTask)); 1016 queue0->PostTask(FROM_HERE, base::Bind(NullTask));
1019 queue1->PostTask(FROM_HERE, base::Bind(NullTask)); 1017 queue1->PostTask(FROM_HERE, base::Bind(NullTask));
1020 EXPECT_TRUE(queue0->HasPendingImmediateTask()); 1018 EXPECT_FALSE(queue0->IsQueueEmpty());
1021 EXPECT_TRUE(queue1->HasPendingImmediateTask()); 1019 EXPECT_FALSE(queue1->IsQueueEmpty());
1022 1020
1023 test_task_runner_->RunUntilIdle(); 1021 test_task_runner_->RunUntilIdle();
1024 EXPECT_FALSE(queue0->HasPendingImmediateTask()); 1022 EXPECT_TRUE(queue0->IsQueueEmpty());
1025 EXPECT_TRUE(queue1->HasPendingImmediateTask()); 1023 EXPECT_FALSE(queue1->IsQueueEmpty());
1026 1024
1027 queue1->PumpQueue(); 1025 queue1->PumpQueue();
1028 EXPECT_FALSE(queue0->HasPendingImmediateTask()); 1026 EXPECT_TRUE(queue0->IsQueueEmpty());
1029 EXPECT_TRUE(queue1->HasPendingImmediateTask()); 1027 EXPECT_FALSE(queue1->IsQueueEmpty());
1030 1028
1031 test_task_runner_->RunUntilIdle(); 1029 test_task_runner_->RunUntilIdle();
1032 EXPECT_FALSE(queue0->HasPendingImmediateTask()); 1030 EXPECT_TRUE(queue0->IsQueueEmpty());
1033 EXPECT_FALSE(queue1->HasPendingImmediateTask()); 1031 EXPECT_TRUE(queue1->IsQueueEmpty());
1034 } 1032 }
1035 1033
1036 TEST_F(TaskQueueManagerTest, GetQueueState) { 1034 TEST_F(TaskQueueManagerTest, GetQueueState) {
1037 Initialize(2u); 1035 Initialize(2u);
1038 internal::TaskQueueImpl* queue0 = runners_[0].get(); 1036 internal::TaskQueueImpl* queue0 = runners_[0].get();
1039 internal::TaskQueueImpl* queue1 = runners_[1].get(); 1037 internal::TaskQueueImpl* queue1 = runners_[1].get();
1040 queue0->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO); 1038 queue0->SetPumpPolicy(TaskQueue::PumpPolicy::AUTO);
1041 queue1->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL); 1039 queue1->SetPumpPolicy(TaskQueue::PumpPolicy::MANUAL);
1042 1040
1043 EXPECT_EQ(TaskQueue::QueueState::EMPTY, queue0->GetQueueState()); 1041 EXPECT_EQ(TaskQueue::QueueState::EMPTY, queue0->GetQueueState());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1097 delay1); 1095 delay1);
1098 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order), 1096 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order),
1099 delay2); 1097 delay2);
1100 1098
1101 now_src_->Advance(delay1 * 2); 1099 now_src_->Advance(delay1 * 2);
1102 test_task_runner_->RunUntilIdle(); 1100 test_task_runner_->RunUntilIdle();
1103 1101
1104 EXPECT_THAT(run_order, ElementsAre(2, 1)); 1102 EXPECT_THAT(run_order, ElementsAre(2, 1));
1105 } 1103 }
1106 1104
1105 TEST_F(TaskQueueManagerTest, DelayedTaskWithAbsoluteRunTime) {
1106 Initialize(1u);
1107
1108 // One task in the past, two with the exact same run time and one in the
1109 // future.
1110 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10);
1111 base::TimeTicks runTime1 = now_src_->NowTicks() - delay;
1112 base::TimeTicks runTime2 = now_src_->NowTicks();
1113 base::TimeTicks runTime3 = now_src_->NowTicks();
1114 base::TimeTicks runTime4 = now_src_->NowTicks() + delay;
1115
1116 std::vector<int> run_order;
1117 runners_[0]->PostDelayedTaskAt(
1118 FROM_HERE, base::Bind(&TestTask, 1, &run_order), runTime1);
1119 runners_[0]->PostDelayedTaskAt(
1120 FROM_HERE, base::Bind(&TestTask, 2, &run_order), runTime2);
1121 runners_[0]->PostDelayedTaskAt(
1122 FROM_HERE, base::Bind(&TestTask, 3, &run_order), runTime3);
1123 runners_[0]->PostDelayedTaskAt(
1124 FROM_HERE, base::Bind(&TestTask, 4, &run_order), runTime4);
1125
1126 now_src_->Advance(2 * delay);
1127 test_task_runner_->RunUntilIdle();
1128
1129 EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4));
1130 }
1131
1107 void CheckIsNested(bool* is_nested) { 1132 void CheckIsNested(bool* is_nested) {
1108 *is_nested = base::MessageLoop::current()->IsNested(); 1133 *is_nested = base::MessageLoop::current()->IsNested();
1109 } 1134 }
1110 1135
1111 void PostAndQuitFromNestedRunloop(base::RunLoop* run_loop, 1136 void PostAndQuitFromNestedRunloop(base::RunLoop* run_loop,
1112 base::SingleThreadTaskRunner* runner, 1137 base::SingleThreadTaskRunner* runner,
1113 bool* was_nested) { 1138 bool* was_nested) {
1114 base::MessageLoop::ScopedNestableTaskAllower allow( 1139 base::MessageLoop::ScopedNestableTaskAllower allow(
1115 base::MessageLoop::current()); 1140 base::MessageLoop::current());
1116 runner->PostTask(FROM_HERE, run_loop->QuitClosure()); 1141 runner->PostTask(FROM_HERE, run_loop->QuitClosure());
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 1316
1292 scoped_refptr<internal::TaskQueueImpl> task_queue = 1317 scoped_refptr<internal::TaskQueueImpl> task_queue =
1293 manager_->NewTaskQueue(TaskQueue::Spec("test_queue")); 1318 manager_->NewTaskQueue(TaskQueue::Spec("test_queue"));
1294 1319
1295 EXPECT_CALL(observer, OnUnregisterTaskQueue(_)).Times(1); 1320 EXPECT_CALL(observer, OnUnregisterTaskQueue(_)).Times(1);
1296 task_queue->UnregisterTaskQueue(); 1321 task_queue->UnregisterTaskQueue();
1297 1322
1298 manager_->SetObserver(nullptr); 1323 manager_->SetObserver(nullptr);
1299 } 1324 }
1300 1325
1326 TEST_F(TaskQueueManagerTest, ScheduleDelayedWorkIsNotReEntrant) {
1327 Initialize(1u);
1328
1329 // Post two tasks into the past. The second one used to trigger a deadlock
1330 // because it tried to re-entrantly wake the first task in the same queue.
1331 runners_[0]->PostDelayedTaskAt(
1332 FROM_HERE, base::Bind(&NullTask),
1333 base::TimeTicks() + base::TimeDelta::FromMicroseconds(100));
1334 runners_[0]->PostDelayedTaskAt(
1335 FROM_HERE, base::Bind(&NullTask),
1336 base::TimeTicks() + base::TimeDelta::FromMicroseconds(200));
1337 test_task_runner_->RunUntilIdle();
1338 }
1339
1301 void HasOneRefTask(std::vector<bool>* log, internal::TaskQueueImpl* tq) { 1340 void HasOneRefTask(std::vector<bool>* log, internal::TaskQueueImpl* tq) {
1302 log->push_back(tq->HasOneRef()); 1341 log->push_back(tq->HasOneRef());
1303 } 1342 }
1304 1343
1305 TEST_F(TaskQueueManagerTest, UnregisterTaskQueueInNestedLoop) { 1344 TEST_F(TaskQueueManagerTest, UnregisterTaskQueueInNestedLoop) {
1306 InitializeWithRealMessageLoop(1u); 1345 InitializeWithRealMessageLoop(1u);
1307 1346
1308 // We retain a reference to the task queue even when the manager has deleted 1347 // We retain a reference to the task queue even when the manager has deleted
1309 // its reference. 1348 // its reference.
1310 scoped_refptr<internal::TaskQueueImpl> task_queue = 1349 scoped_refptr<internal::TaskQueueImpl> task_queue =
(...skipping 30 matching lines...) Expand all
1341 base::Unretained(task_queue.get()))); 1380 base::Unretained(task_queue.get())));
1342 message_loop_->RunUntilIdle(); 1381 message_loop_->RunUntilIdle();
1343 1382
1344 EXPECT_THAT(log, ElementsAre(false, false, true)); 1383 EXPECT_THAT(log, ElementsAre(false, false, true));
1345 } 1384 }
1346 1385
1347 TEST_F(TaskQueueManagerTest, TimeDomainsAreIndependant) { 1386 TEST_F(TaskQueueManagerTest, TimeDomainsAreIndependant) {
1348 Initialize(2u); 1387 Initialize(2u);
1349 1388
1350 base::TimeTicks start_time = manager_->delegate()->NowTicks(); 1389 base::TimeTicks start_time = manager_->delegate()->NowTicks();
1351 scoped_ptr<VirtualTimeDomain> domain_a( 1390 scoped_refptr<VirtualTimeDomain> domain_a(new VirtualTimeDomain(start_time));
1352 new VirtualTimeDomain(nullptr, start_time)); 1391 scoped_refptr<VirtualTimeDomain> domain_b(new VirtualTimeDomain(start_time));
1353 scoped_ptr<VirtualTimeDomain> domain_b( 1392 manager_->RegisterTimeDomain(domain_a);
1354 new VirtualTimeDomain(nullptr, start_time)); 1393 manager_->RegisterTimeDomain(domain_b);
1355 manager_->RegisterTimeDomain(domain_a.get()); 1394 runners_[0]->SetTimeDomain(domain_a);
1356 manager_->RegisterTimeDomain(domain_b.get()); 1395 runners_[1]->SetTimeDomain(domain_b);
1357 runners_[0]->SetTimeDomain(domain_a.get());
1358 runners_[1]->SetTimeDomain(domain_b.get());
1359 1396
1360 std::vector<int> run_order; 1397 std::vector<int> run_order;
1361 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), 1398 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
1362 base::TimeDelta::FromMilliseconds(10)); 1399 base::TimeDelta::FromMilliseconds(10));
1363 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order), 1400 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order),
1364 base::TimeDelta::FromMilliseconds(20)); 1401 base::TimeDelta::FromMilliseconds(20));
1365 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order), 1402 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order),
1366 base::TimeDelta::FromMilliseconds(30)); 1403 base::TimeDelta::FromMilliseconds(30));
1367 1404
1368 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order), 1405 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order),
1369 base::TimeDelta::FromMilliseconds(10)); 1406 base::TimeDelta::FromMilliseconds(10));
1370 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 5, &run_order), 1407 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 5, &run_order),
1371 base::TimeDelta::FromMilliseconds(20)); 1408 base::TimeDelta::FromMilliseconds(20));
1372 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 6, &run_order), 1409 runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 6, &run_order),
1373 base::TimeDelta::FromMilliseconds(30)); 1410 base::TimeDelta::FromMilliseconds(30));
1374 1411
1375 domain_b->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(50)); 1412 domain_b->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(50));
1376 1413
1377 test_task_runner_->RunUntilIdle(); 1414 test_task_runner_->RunUntilIdle();
1378 EXPECT_THAT(run_order, ElementsAre(4, 5, 6)); 1415 EXPECT_THAT(run_order, ElementsAre(4, 5, 6));
1379 1416
1380 domain_a->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(50)); 1417 domain_a->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(50));
1381 1418
1382 test_task_runner_->RunUntilIdle(); 1419 test_task_runner_->RunUntilIdle();
1383 EXPECT_THAT(run_order, ElementsAre(4, 5, 6, 1, 2, 3)); 1420 EXPECT_THAT(run_order, ElementsAre(4, 5, 6, 1, 2, 3));
1384 1421
1385 manager_->UnregisterTimeDomain(domain_a.get()); 1422 manager_->UnregisterTimeDomain(domain_a);
1386 manager_->UnregisterTimeDomain(domain_b.get()); 1423 manager_->UnregisterTimeDomain(domain_b);
1387 } 1424 }
1388 1425
1389 TEST_F(TaskQueueManagerTest, TimeDomainMigration) { 1426 TEST_F(TaskQueueManagerTest, TimeDomainMigration) {
1390 Initialize(1u); 1427 Initialize(1u);
1391 1428
1392 base::TimeTicks start_time = manager_->delegate()->NowTicks(); 1429 base::TimeTicks start_time = manager_->delegate()->NowTicks();
1393 scoped_ptr<VirtualTimeDomain> domain_a( 1430 scoped_refptr<VirtualTimeDomain> domain_a(new VirtualTimeDomain(start_time));
1394 new VirtualTimeDomain(nullptr, start_time)); 1431 manager_->RegisterTimeDomain(domain_a);
1395 manager_->RegisterTimeDomain(domain_a.get()); 1432 runners_[0]->SetTimeDomain(domain_a);
1396 runners_[0]->SetTimeDomain(domain_a.get());
1397 1433
1398 std::vector<int> run_order; 1434 std::vector<int> run_order;
1399 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), 1435 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
1400 base::TimeDelta::FromMilliseconds(10)); 1436 base::TimeDelta::FromMilliseconds(10));
1401 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order), 1437 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order),
1402 base::TimeDelta::FromMilliseconds(20)); 1438 base::TimeDelta::FromMilliseconds(20));
1403 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order), 1439 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order),
1404 base::TimeDelta::FromMilliseconds(30)); 1440 base::TimeDelta::FromMilliseconds(30));
1405 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order), 1441 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order),
1406 base::TimeDelta::FromMilliseconds(40)); 1442 base::TimeDelta::FromMilliseconds(40));
1407 1443
1408 domain_a->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(20)); 1444 domain_a->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(20));
1409 test_task_runner_->RunUntilIdle(); 1445 test_task_runner_->RunUntilIdle();
1410 EXPECT_THAT(run_order, ElementsAre(1, 2)); 1446 EXPECT_THAT(run_order, ElementsAre(1, 2));
1411 1447
1412 scoped_ptr<VirtualTimeDomain> domain_b( 1448 scoped_refptr<VirtualTimeDomain> domain_b(new VirtualTimeDomain(start_time));
1413 new VirtualTimeDomain(nullptr, start_time)); 1449 manager_->RegisterTimeDomain(domain_b);
1414 manager_->RegisterTimeDomain(domain_b.get()); 1450 runners_[0]->SetTimeDomain(domain_b);
1415 runners_[0]->SetTimeDomain(domain_b.get());
1416 1451
1417 domain_b->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(50)); 1452 domain_b->AdvanceTo(start_time + base::TimeDelta::FromMilliseconds(50));
1418 1453
1419 test_task_runner_->RunUntilIdle(); 1454 test_task_runner_->RunUntilIdle();
1420 EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); 1455 EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4));
1421 1456
1422 manager_->UnregisterTimeDomain(domain_a.get()); 1457 manager_->UnregisterTimeDomain(domain_a);
1423 manager_->UnregisterTimeDomain(domain_b.get()); 1458 manager_->UnregisterTimeDomain(domain_b);
1424 } 1459 }
1425 1460
1426 namespace { 1461 namespace {
1427 void ChromiumRunloopInspectionTask( 1462 void ChromiumRunloopInspectionTask(
1428 scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner) { 1463 scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner) {
1429 EXPECT_EQ(1u, test_task_runner->NumPendingTasks()); 1464 EXPECT_EQ(1u, test_task_runner->NumPendingTasks());
1430 } 1465 }
1431 } // namespace 1466 } // namespace
1432 1467
1433 TEST_F(TaskQueueManagerTest, NumberOfPendingTasksOnChromiumRunLoop) { 1468 TEST_F(TaskQueueManagerTest, NumberOfPendingTasksOnChromiumRunLoop) {
1434 Initialize(1u); 1469 Initialize(1u);
1435 1470
1436 // NOTE because tasks posted to the chromiumrun loop are not cancellable, we 1471 // NOTE because tasks posted to the chromiumrun loop are not cancellable, we
1437 // will end up with a lot more tasks posted if the delayed tasks were posted 1472 // will end up with a lot more tasks posted if the delayed tasks were posted
1438 // in the reverse order. 1473 // in the reverse order.
1439 // TODO(alexclarke): Consider talking to the message pump directly. 1474 // TODO(alexclarke): Consider talking to the message pump directly.
1440 test_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1475 test_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1441 for (int i = 1; i < 100; i++) { 1476 for (int i = 1; i < 100; i++) {
1442 runners_[0]->PostDelayedTask( 1477 runners_[0]->PostDelayedTask(
1443 FROM_HERE, 1478 FROM_HERE,
1444 base::Bind(&ChromiumRunloopInspectionTask, test_task_runner_), 1479 base::Bind(&ChromiumRunloopInspectionTask, test_task_runner_),
1445 base::TimeDelta::FromMilliseconds(i)); 1480 base::TimeDelta::FromMilliseconds(i));
1446 } 1481 }
1447 test_task_runner_->RunUntilIdle(); 1482 test_task_runner_->RunUntilIdle();
1448 } 1483 }
1449 1484
1450 } // namespace scheduler 1485 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/base/task_queue_manager.cc ('k') | components/scheduler/base/task_queue_selector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698