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

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

Issue 894183002: Revert of Run task queue manager work in batches (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 10 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
« no previous file with comments | « content/renderer/scheduler/task_queue_manager.cc ('k') | tools/ubsan/blacklist.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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" 7 #include "base/test/test_simple_task_runner.h"
8 #include "base/threading/thread.h" 8 #include "base/threading/thread.h"
9 #include "cc/test/test_now_source.h"
10 #include "content/renderer/scheduler/task_queue_selector.h" 9 #include "content/renderer/scheduler/task_queue_selector.h"
11 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
12 11
13 using testing::ElementsAre; 12 using testing::ElementsAre;
14 13
15 namespace content { 14 namespace content {
16 namespace { 15 namespace {
17 16
18 class SelectorForTest : public TaskQueueSelector { 17 class SelectorForTest : public TaskQueueSelector {
19 public: 18 public:
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 runner->PostTask( 473 runner->PostTask(
475 FROM_HERE, base::Bind(&PostFromNestedRunloop, message_loop_.get(), runner, 474 FROM_HERE, base::Bind(&PostFromNestedRunloop, message_loop_.get(), runner,
476 base::Unretained(&tasks_to_post_from_nested_loop))); 475 base::Unretained(&tasks_to_post_from_nested_loop)));
477 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order)); 476 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order));
478 477
479 message_loop_->RunUntilIdle(); 478 message_loop_->RunUntilIdle();
480 479
481 EXPECT_THAT(run_order, ElementsAre(0, 2, 1)); 480 EXPECT_THAT(run_order, ElementsAre(0, 2, 1));
482 } 481 }
483 482
484 TEST_F(TaskQueueManagerTest, WorkBatching) {
485 Initialize(1u);
486
487 manager_->SetWorkBatchSize(2);
488
489 std::vector<int> run_order;
490 scoped_refptr<base::SingleThreadTaskRunner> runner =
491 manager_->TaskRunnerForQueue(0);
492
493 selector_->AppendQueueToService(0);
494 selector_->AppendQueueToService(0);
495 selector_->AppendQueueToService(0);
496 selector_->AppendQueueToService(0);
497
498 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
499 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order));
500 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order));
501 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order));
502
503 // Running one task in the host message loop should cause two posted tasks to
504 // get executed.
505 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 1u);
506 test_task_runner_->RunPendingTasks();
507 EXPECT_THAT(run_order, ElementsAre(1, 2));
508
509 // The second task runs the remaining two posted tasks.
510 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 1u);
511 test_task_runner_->RunPendingTasks();
512 EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4));
513 }
514
515 void AdvanceNowTestTask(int value,
516 std::vector<int>* out_result,
517 scoped_refptr<cc::TestNowSource> time_source,
518 base::TimeDelta delta) {
519 TestTask(value, out_result);
520 time_source->AdvanceNow(delta);
521 }
522
523 TEST_F(TaskQueueManagerTest, InterruptWorkBatchForDelayedTask) {
524 scoped_refptr<cc::TestNowSource> clock(cc::TestNowSource::Create());
525 Initialize(1u);
526
527 manager_->SetWorkBatchSize(2);
528 manager_->SetTimeSourceForTesting(clock);
529
530 std::vector<int> run_order;
531 scoped_refptr<base::SingleThreadTaskRunner> runner =
532 manager_->TaskRunnerForQueue(0);
533
534 selector_->AppendQueueToService(0);
535 selector_->AppendQueueToService(0);
536 selector_->AppendQueueToService(0);
537
538 base::TimeDelta delta(base::TimeDelta::FromMilliseconds(10));
539 runner->PostTask(
540 FROM_HERE, base::Bind(&AdvanceNowTestTask, 2, &run_order, clock, delta));
541 runner->PostTask(
542 FROM_HERE, base::Bind(&AdvanceNowTestTask, 3, &run_order, clock, delta));
543
544 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(5));
545 runner->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
546 delay);
547
548 // At this point we have two posted tasks: one for DoWork and one of the
549 // delayed task. Only the first non-delayed task should get executed because
550 // the work batch is interrupted by the pending delayed task.
551 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 2u);
552 test_task_runner_->RunPendingTasks();
553 EXPECT_THAT(run_order, ElementsAre(2));
554
555 // Running all remaining tasks should execute both pending tasks.
556 test_task_runner_->RunUntilIdle();
557 EXPECT_THAT(run_order, ElementsAre(2, 3, 1));
558 }
559
560 } // namespace 483 } // namespace
561 } // namespace content 484 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/scheduler/task_queue_manager.cc ('k') | tools/ubsan/blacklist.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698