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

Side by Side Diff: content/renderer/scheduler/task_queue_manager_unittest.cc

Issue 972473004: EXPERIMENTAL, Trying Ross's suggestion (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 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 "content/renderer/scheduler/task_queue_manager.h" 5 #include "content/renderer/scheduler/task_queue_manager.h"
6 6
7 #include "base/test/test_simple_task_runner.h"
8 #include "base/threading/thread.h" 7 #include "base/threading/thread.h"
8 #include "cc/test/ordered_simple_task_runner.h"
9 #include "cc/test/test_now_source.h" 9 #include "cc/test/test_now_source.h"
10 #include "content/renderer/scheduler/task_queue_selector.h" 10 #include "content/renderer/scheduler/task_queue_selector.h"
11 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gmock/include/gmock/gmock.h"
12 12
13 using testing::ElementsAre; 13 using testing::ElementsAre;
14 using testing::_; 14 using testing::_;
15 15
16 namespace content { 16 namespace content {
17 namespace { 17 namespace {
18 18
(...skipping 28 matching lines...) Expand all
47 private: 47 private:
48 std::deque<size_t> queues_to_service_; 48 std::deque<size_t> queues_to_service_;
49 std::vector<const base::TaskQueue*> work_queues_; 49 std::vector<const base::TaskQueue*> work_queues_;
50 50
51 DISALLOW_COPY_AND_ASSIGN(SelectorForTest); 51 DISALLOW_COPY_AND_ASSIGN(SelectorForTest);
52 }; 52 };
53 53
54 class TaskQueueManagerTest : public testing::Test { 54 class TaskQueueManagerTest : public testing::Test {
55 protected: 55 protected:
56 void Initialize(size_t num_queues) { 56 void Initialize(size_t num_queues) {
57 test_task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner()); 57 now_src_ = cc::TestNowSource::Create(0);
58 test_task_runner_ =
59 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(now_src_, false));
58 selector_ = make_scoped_ptr(new SelectorForTest); 60 selector_ = make_scoped_ptr(new SelectorForTest);
59 manager_ = make_scoped_ptr( 61 manager_ = make_scoped_ptr(
60 new TaskQueueManager(num_queues, test_task_runner_, selector_.get())); 62 new TaskQueueManager(num_queues, test_task_runner_, selector_.get()));
63 manager_->SetTimeSourceForTesting(now_src_);
61 } 64 }
62 65
63 void InitializeWithRealMessageLoop(size_t num_queues) { 66 void InitializeWithRealMessageLoop(size_t num_queues) {
64 message_loop_.reset(new base::MessageLoop()); 67 message_loop_.reset(new base::MessageLoop());
65 selector_ = make_scoped_ptr(new SelectorForTest); 68 selector_ = make_scoped_ptr(new SelectorForTest);
66 manager_ = make_scoped_ptr(new TaskQueueManager( 69 manager_ = make_scoped_ptr(new TaskQueueManager(
67 num_queues, message_loop_->task_runner(), selector_.get())); 70 num_queues, message_loop_->task_runner(), selector_.get()));
68 } 71 }
69 72
70 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner_; 73 scoped_refptr<cc::TestNowSource> now_src_;
74 scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner_;
71 scoped_ptr<SelectorForTest> selector_; 75 scoped_ptr<SelectorForTest> selector_;
72 scoped_ptr<TaskQueueManager> manager_; 76 scoped_ptr<TaskQueueManager> manager_;
73 scoped_ptr<base::MessageLoop> message_loop_; 77 scoped_ptr<base::MessageLoop> message_loop_;
74 }; 78 };
75 79
76 void PostFromNestedRunloop(base::MessageLoop* message_loop, 80 void PostFromNestedRunloop(base::MessageLoop* message_loop,
77 base::SingleThreadTaskRunner* runner, 81 base::SingleThreadTaskRunner* runner,
78 std::vector<std::pair<base::Closure, bool>>* tasks) { 82 std::vector<std::pair<base::Closure, bool>>* tasks) {
79 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop); 83 base::MessageLoop::ScopedNestableTaskAllower allow(message_loop);
80 for (std::pair<base::Closure, bool>& pair : *tasks) { 84 for (std::pair<base::Closure, bool>& pair : *tasks) {
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 240
237 std::vector<int> run_order; 241 std::vector<int> run_order;
238 scoped_refptr<base::SingleThreadTaskRunner> runner = 242 scoped_refptr<base::SingleThreadTaskRunner> runner =
239 manager_->TaskRunnerForQueue(0); 243 manager_->TaskRunnerForQueue(0);
240 244
241 selector_->AppendQueueToService(0); 245 selector_->AppendQueueToService(0);
242 246
243 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); 247 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10));
244 runner->PostDelayedTask( 248 runner->PostDelayedTask(
245 FROM_HERE, base::Bind(&TestTask, 1, &run_order), delay); 249 FROM_HERE, base::Bind(&TestTask, 1, &run_order), delay);
246 EXPECT_EQ(delay, test_task_runner_->NextPendingTaskDelay()); 250 EXPECT_EQ(delay, test_task_runner_->DelayToNextTaskTime());
247 EXPECT_TRUE(manager_->IsQueueEmpty(0)); 251 EXPECT_TRUE(manager_->IsQueueEmpty(0));
248 EXPECT_TRUE(run_order.empty()); 252 EXPECT_TRUE(run_order.empty());
249 253
250 // The task is inserted to the incoming queue only after the delay. 254 // The task doesn't run before the delay has completed.
251 test_task_runner_->RunPendingTasks(); 255 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(9));
252 EXPECT_FALSE(manager_->IsQueueEmpty(0));
253 EXPECT_TRUE(run_order.empty()); 256 EXPECT_TRUE(run_order.empty());
254 257
255 // After the delay the task runs normally. 258 // After the delay has completed, the task runs normally.
256 selector_->AppendQueueToService(0); 259 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1));
257 test_task_runner_->RunUntilIdle();
258 EXPECT_THAT(run_order, ElementsAre(1)); 260 EXPECT_THAT(run_order, ElementsAre(1));
259 } 261 }
260 262
261 TEST_F(TaskQueueManagerTest, DelayedTaskDoesNotStayDelayed) { 263 TEST_F(TaskQueueManagerTest, DelayedTaskPosting_MultipleTasks) {
262 Initialize(1u); 264 Initialize(1u);
263 265
264 std::vector<int> run_order; 266 std::vector<int> run_order;
265 scoped_refptr<base::SingleThreadTaskRunner> runner = 267 scoped_refptr<base::SingleThreadTaskRunner> runner =
266 manager_->TaskRunnerForQueue(0); 268 manager_->TaskRunnerForQueue(0);
267 269
268 selector_->AppendQueueToService(0); 270 selector_->AppendQueueToService(0);
271 selector_->AppendQueueToService(0);
272 selector_->AppendQueueToService(0);
269 273
270 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10));
271 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), 274 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
272 delay); 275 base::TimeDelta::FromMilliseconds(10));
273 test_task_runner_->RunPendingTasks();
274 276
275 // Reload the work queue so we see the next pending task. It should no longer 277 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order),
276 // be marked as delayed. 278 base::TimeDelta::FromMilliseconds(8));
277 manager_->PumpQueue(0);
278 EXPECT_TRUE(selector_->work_queues()[0]->front().delayed_run_time.is_null());
279 279
280 // Let the task run normally. 280 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order),
281 selector_->AppendQueueToService(0); 281 base::TimeDelta::FromMilliseconds(5));
282 test_task_runner_->RunUntilIdle(); 282
283 EXPECT_THAT(run_order, ElementsAre(1)); 283 EXPECT_EQ(base::TimeDelta::FromMilliseconds(5),
284 test_task_runner_->DelayToNextTaskTime());
285
286 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(5));
287 EXPECT_THAT(run_order, ElementsAre(3));
288 EXPECT_EQ(base::TimeDelta::FromMilliseconds(3),
289 test_task_runner_->DelayToNextTaskTime());
290
291 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(3));
292 EXPECT_THAT(run_order, ElementsAre(3, 2));
293 EXPECT_EQ(base::TimeDelta::FromMilliseconds(2),
294 test_task_runner_->DelayToNextTaskTime());
295
296 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(2));
297 EXPECT_THAT(run_order, ElementsAre(3, 2, 1));
284 } 298 }
285 299
286 TEST_F(TaskQueueManagerTest, ManualPumping) { 300 TEST_F(TaskQueueManagerTest, ManualPumping) {
287 Initialize(1u); 301 Initialize(1u);
288 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL); 302 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL);
289 303
290 std::vector<int> run_order; 304 std::vector<int> run_order;
291 scoped_refptr<base::SingleThreadTaskRunner> runner = 305 scoped_refptr<base::SingleThreadTaskRunner> runner =
292 manager_->TaskRunnerForQueue(0); 306 manager_->TaskRunnerForQueue(0);
293 307
294 // Posting a task when pumping is disabled doesn't result in work getting 308 // Posting a task when pumping is disabled doesn't result in work getting
295 // posted. 309 // posted.
296 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); 310 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
297 EXPECT_FALSE(test_task_runner_->HasPendingTask()); 311 EXPECT_FALSE(test_task_runner_->HasPendingTasks());
298 312
299 // However polling still works. 313 // However polling still works.
300 EXPECT_FALSE(manager_->IsQueueEmpty(0)); 314 EXPECT_FALSE(manager_->IsQueueEmpty(0));
301 315
302 // After pumping the task runs normally. 316 // After pumping the task runs normally.
303 manager_->PumpQueue(0); 317 manager_->PumpQueue(0);
304 EXPECT_TRUE(test_task_runner_->HasPendingTask()); 318 EXPECT_TRUE(test_task_runner_->HasPendingTasks());
305 selector_->AppendQueueToService(0); 319 selector_->AppendQueueToService(0);
306 test_task_runner_->RunUntilIdle(); 320 test_task_runner_->RunUntilIdle();
307 EXPECT_THAT(run_order, ElementsAre(1)); 321 EXPECT_THAT(run_order, ElementsAre(1));
308 } 322 }
309 323
310 TEST_F(TaskQueueManagerTest, ManualPumpingToggle) { 324 TEST_F(TaskQueueManagerTest, ManualPumpingToggle) {
311 Initialize(1u); 325 Initialize(1u);
312 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL); 326 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL);
313 327
314 std::vector<int> run_order; 328 std::vector<int> run_order;
315 scoped_refptr<base::SingleThreadTaskRunner> runner = 329 scoped_refptr<base::SingleThreadTaskRunner> runner =
316 manager_->TaskRunnerForQueue(0); 330 manager_->TaskRunnerForQueue(0);
317 331
318 // Posting a task when pumping is disabled doesn't result in work getting 332 // Posting a task when pumping is disabled doesn't result in work getting
319 // posted. 333 // posted.
320 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); 334 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
321 EXPECT_FALSE(test_task_runner_->HasPendingTask()); 335 EXPECT_FALSE(test_task_runner_->HasPendingTasks());
322 336
323 // When pumping is enabled the task runs normally. 337 // When pumping is enabled the task runs normally.
324 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::AUTO); 338 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::AUTO);
325 EXPECT_TRUE(test_task_runner_->HasPendingTask()); 339 EXPECT_TRUE(test_task_runner_->HasPendingTasks());
326 selector_->AppendQueueToService(0); 340 selector_->AppendQueueToService(0);
327 test_task_runner_->RunUntilIdle(); 341 test_task_runner_->RunUntilIdle();
328 EXPECT_THAT(run_order, ElementsAre(1)); 342 EXPECT_THAT(run_order, ElementsAre(1));
329 } 343 }
330 344
331 TEST_F(TaskQueueManagerTest, DenyRunning) { 345 TEST_F(TaskQueueManagerTest, DenyRunning) {
332 Initialize(1u); 346 Initialize(1u);
333 347
334 std::vector<int> run_order; 348 std::vector<int> run_order;
335 scoped_refptr<base::SingleThreadTaskRunner> runner = 349 scoped_refptr<base::SingleThreadTaskRunner> runner =
(...skipping 12 matching lines...) Expand all
348 EXPECT_THAT(run_order, ElementsAre(1)); 362 EXPECT_THAT(run_order, ElementsAre(1));
349 } 363 }
350 364
351 TEST_F(TaskQueueManagerTest, ManualPumpingWithDelayedTask) { 365 TEST_F(TaskQueueManagerTest, ManualPumpingWithDelayedTask) {
352 Initialize(1u); 366 Initialize(1u);
353 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL); 367 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL);
354 368
355 std::vector<int> run_order; 369 std::vector<int> run_order;
356 scoped_refptr<base::SingleThreadTaskRunner> runner = 370 scoped_refptr<base::SingleThreadTaskRunner> runner =
357 manager_->TaskRunnerForQueue(0); 371 manager_->TaskRunnerForQueue(0);
372 selector_->AppendQueueToService(0);
358 373
359 // Posting a delayed task when pumping will apply the delay, but won't cause 374 // Posting a delayed task when pumping will apply the delay, but won't cause
360 // work to executed afterwards. 375 // work to executed afterwards.
361 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); 376 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10));
362 runner->PostDelayedTask( 377 runner->PostDelayedTask(
363 FROM_HERE, base::Bind(&TestTask, 1, &run_order), delay); 378 FROM_HERE, base::Bind(&TestTask, 1, &run_order), delay);
364 test_task_runner_->RunUntilIdle(); 379
380 // After pumping but before the delay period has expired, task does not run.
381 manager_->PumpQueue(0);
382 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(5));
365 EXPECT_TRUE(run_order.empty()); 383 EXPECT_TRUE(run_order.empty());
366 384
367 // After pumping the task runs normally. 385 // Once the delay has expired, pumping causes the task to run.
386 now_src_->AdvanceNow(base::TimeDelta::FromMilliseconds(5));
368 manager_->PumpQueue(0); 387 manager_->PumpQueue(0);
369 EXPECT_TRUE(test_task_runner_->HasPendingTask()); 388 EXPECT_TRUE(test_task_runner_->HasPendingTasks());
389 test_task_runner_->RunPendingTasks();
390 EXPECT_THAT(run_order, ElementsAre(1));
391 }
392
393 TEST_F(TaskQueueManagerTest, DelayedTasksDontAutoRunWithManualPumping) {
394 Initialize(1u);
395 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL);
396
397 std::vector<int> run_order;
398 scoped_refptr<base::SingleThreadTaskRunner> runner =
399 manager_->TaskRunnerForQueue(0);
370 selector_->AppendQueueToService(0); 400 selector_->AppendQueueToService(0);
371 test_task_runner_->RunUntilIdle(); 401
372 EXPECT_THAT(run_order, ElementsAre(1)); 402 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10));
403 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
404 delay);
405
406 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(10));
407 EXPECT_TRUE(run_order.empty());
373 } 408 }
374 409
375 TEST_F(TaskQueueManagerTest, ManualPumpingWithNonEmptyWorkQueue) { 410 TEST_F(TaskQueueManagerTest, ManualPumpingWithNonEmptyWorkQueue) {
376 Initialize(1u); 411 Initialize(1u);
377 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL); 412 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL);
378 413
379 std::vector<int> run_order; 414 std::vector<int> run_order;
380 scoped_refptr<base::SingleThreadTaskRunner> runner = 415 scoped_refptr<base::SingleThreadTaskRunner> runner =
381 manager_->TaskRunnerForQueue(0); 416 manager_->TaskRunnerForQueue(0);
382 417
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 505
471 runner->PostTask(FROM_HERE, base::Bind(&RePostingTestTask, runner)); 506 runner->PostTask(FROM_HERE, base::Bind(&RePostingTestTask, runner));
472 507
473 selector_->AppendQueueToService(0); 508 selector_->AppendQueueToService(0);
474 selector_->AppendQueueToService(0); 509 selector_->AppendQueueToService(0);
475 selector_->AppendQueueToService(0); 510 selector_->AppendQueueToService(0);
476 511
477 test_task_runner_->RunPendingTasks(); 512 test_task_runner_->RunPendingTasks();
478 // NOTE without the executing_task_ check in MaybePostDoWorkOnMainRunner there 513 // NOTE without the executing_task_ check in MaybePostDoWorkOnMainRunner there
479 // will be two tasks here. 514 // will be two tasks here.
480 EXPECT_EQ(1u, test_task_runner_->GetPendingTasks().size()); 515 EXPECT_EQ(1u, test_task_runner_->NumPendingTasks());
481 } 516 }
482 517
483 TEST_F(TaskQueueManagerTest, PostFromNestedRunloop) { 518 TEST_F(TaskQueueManagerTest, PostFromNestedRunloop) {
484 InitializeWithRealMessageLoop(1u); 519 InitializeWithRealMessageLoop(1u);
485 520
486 selector_->AppendQueueToService(0); 521 selector_->AppendQueueToService(0);
487 selector_->AppendQueueToService(0); 522 selector_->AppendQueueToService(0);
488 selector_->AppendQueueToService(0); 523 selector_->AppendQueueToService(0);
489 selector_->AppendQueueToService(0); 524 selector_->AppendQueueToService(0);
490 525
(...skipping 30 matching lines...) Expand all
521 selector_->AppendQueueToService(0); 556 selector_->AppendQueueToService(0);
522 selector_->AppendQueueToService(0); 557 selector_->AppendQueueToService(0);
523 558
524 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); 559 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
525 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); 560 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order));
526 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order)); 561 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order));
527 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order)); 562 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order));
528 563
529 // Running one task in the host message loop should cause two posted tasks to 564 // Running one task in the host message loop should cause two posted tasks to
530 // get executed. 565 // get executed.
531 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 1u); 566 EXPECT_EQ(test_task_runner_->NumPendingTasks(), 1u);
532 test_task_runner_->RunPendingTasks(); 567 test_task_runner_->RunPendingTasks();
533 EXPECT_THAT(run_order, ElementsAre(1, 2)); 568 EXPECT_THAT(run_order, ElementsAre(1, 2));
534 569
535 // The second task runs the remaining two posted tasks. 570 // The second task runs the remaining two posted tasks.
536 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 1u); 571 EXPECT_EQ(test_task_runner_->NumPendingTasks(), 1u);
537 test_task_runner_->RunPendingTasks(); 572 test_task_runner_->RunPendingTasks();
538 EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); 573 EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4));
539 } 574 }
540 575
541 void AdvanceNowTestTask(int value, 576 void AdvanceNowTestTask(int value,
542 std::vector<int>* out_result, 577 std::vector<int>* out_result,
543 scoped_refptr<cc::TestNowSource> time_source, 578 scoped_refptr<cc::TestNowSource> time_source,
544 base::TimeDelta delta) { 579 base::TimeDelta delta) {
545 TestTask(value, out_result); 580 TestTask(value, out_result);
546 time_source->AdvanceNow(delta); 581 time_source->AdvanceNow(delta);
547 } 582 }
548 583
549 TEST_F(TaskQueueManagerTest, InterruptWorkBatchForDelayedTask) { 584 TEST_F(TaskQueueManagerTest, InterruptWorkBatchForDelayedTask) {
550 scoped_refptr<cc::TestNowSource> clock(cc::TestNowSource::Create());
551 Initialize(1u); 585 Initialize(1u);
552 586
553 manager_->SetWorkBatchSize(2); 587 manager_->SetWorkBatchSize(2);
554 manager_->SetTimeSourceForTesting(clock);
555 588
556 std::vector<int> run_order; 589 std::vector<int> run_order;
557 scoped_refptr<base::SingleThreadTaskRunner> runner = 590 scoped_refptr<base::SingleThreadTaskRunner> runner =
558 manager_->TaskRunnerForQueue(0); 591 manager_->TaskRunnerForQueue(0);
559 592
560 selector_->AppendQueueToService(0); 593 selector_->AppendQueueToService(0);
561 selector_->AppendQueueToService(0); 594 selector_->AppendQueueToService(0);
562 selector_->AppendQueueToService(0); 595 selector_->AppendQueueToService(0);
563 596
564 base::TimeDelta delta(base::TimeDelta::FromMilliseconds(10)); 597 base::TimeDelta delta(base::TimeDelta::FromMilliseconds(10));
565 runner->PostTask( 598 runner->PostTask(FROM_HERE, base::Bind(&AdvanceNowTestTask, 2, &run_order,
566 FROM_HERE, base::Bind(&AdvanceNowTestTask, 2, &run_order, clock, delta)); 599 now_src_, delta));
567 runner->PostTask( 600 runner->PostTask(FROM_HERE, base::Bind(&AdvanceNowTestTask, 3, &run_order,
568 FROM_HERE, base::Bind(&AdvanceNowTestTask, 3, &run_order, clock, delta)); 601 now_src_, delta));
569 602
570 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(5)); 603 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(5));
571 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), 604 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
572 delay); 605 delay);
573 606
574 // At this point we have two posted tasks: one for DoWork and one of the 607 // At this point we have two posted tasks: one for DoWork and one of the
575 // delayed task. Only the first non-delayed task should get executed because 608 // delayed task. Only the first non-delayed task should get executed because
576 // the work batch is interrupted by the pending delayed task. 609 // the work batch is interrupted by the pending delayed task.
577 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 2u); 610 EXPECT_EQ(test_task_runner_->NumPendingTasks(), 2u);
578 test_task_runner_->RunPendingTasks(); 611 test_task_runner_->RunPendingTasks();
579 EXPECT_THAT(run_order, ElementsAre(2)); 612 EXPECT_THAT(run_order, ElementsAre(2));
580 613
581 // Running all remaining tasks should execute both pending tasks. 614 // Running all remaining tasks should execute both pending tasks.
582 test_task_runner_->RunUntilIdle(); 615 test_task_runner_->RunUntilIdle();
583 EXPECT_THAT(run_order, ElementsAre(2, 3, 1)); 616 EXPECT_THAT(run_order, ElementsAre(2, 3, 1));
584 } 617 }
585 618
586 TEST_F(TaskQueueManagerTest, AutoPumpOnWakeup) { 619 TEST_F(TaskQueueManagerTest, AutoPumpOnWakeup) {
587 Initialize(2u); 620 Initialize(2u);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 selector_->AppendQueueToService(0); 758 selector_->AppendQueueToService(0);
726 759
727 EXPECT_CALL(observer, WillProcessTask(_)).Times(1); 760 EXPECT_CALL(observer, WillProcessTask(_)).Times(1);
728 EXPECT_CALL(observer, DidProcessTask(_)).Times(0); 761 EXPECT_CALL(observer, DidProcessTask(_)).Times(0);
729 message_loop_->RunUntilIdle(); 762 message_loop_->RunUntilIdle();
730 } 763 }
731 764
732 } // namespace 765 } // namespace
733 } // namespace content 766 } // namespace content
734 767
OLDNEW
« no previous file with comments | « content/renderer/scheduler/task_queue_manager_perftest.cc ('k') | content/renderer/scheduler/web_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698