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

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

Issue 930063002: Revert of scheduler: Implement task observers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
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" 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::_;
15 14
16 namespace content { 15 namespace content {
17 namespace { 16 namespace {
18 17
19 class SelectorForTest : public TaskQueueSelector { 18 class SelectorForTest : public TaskQueueSelector {
20 public: 19 public:
21 SelectorForTest() {} 20 SelectorForTest() {}
22 21
23 void RegisterWorkQueues( 22 void RegisterWorkQueues(
24 const std::vector<const base::TaskQueue*>& work_queues) override { 23 const std::vector<const base::TaskQueue*>& work_queues) override {
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 // the work batch is interrupted by the pending delayed task. 575 // the work batch is interrupted by the pending delayed task.
577 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 2u); 576 EXPECT_EQ(test_task_runner_->GetPendingTasks().size(), 2u);
578 test_task_runner_->RunPendingTasks(); 577 test_task_runner_->RunPendingTasks();
579 EXPECT_THAT(run_order, ElementsAre(2)); 578 EXPECT_THAT(run_order, ElementsAre(2));
580 579
581 // Running all remaining tasks should execute both pending tasks. 580 // Running all remaining tasks should execute both pending tasks.
582 test_task_runner_->RunUntilIdle(); 581 test_task_runner_->RunUntilIdle();
583 EXPECT_THAT(run_order, ElementsAre(2, 3, 1)); 582 EXPECT_THAT(run_order, ElementsAre(2, 3, 1));
584 } 583 }
585 584
586 class MockTaskObserver : public base::MessageLoop::TaskObserver {
587 public:
588 MOCK_METHOD1(DidProcessTask, void(const base::PendingTask& task));
589 MOCK_METHOD1(WillProcessTask, void(const base::PendingTask& task));
590 };
591
592 TEST_F(TaskQueueManagerTest, TaskObserverAdding) {
593 Initialize(1u);
594 MockTaskObserver observer;
595
596 manager_->AddTaskObserver(&observer);
597
598 std::vector<int> run_order;
599 scoped_refptr<base::SingleThreadTaskRunner> runner =
600 manager_->TaskRunnerForQueue(0);
601
602 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
603 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order));
604
605 selector_->AppendQueueToService(0);
606 selector_->AppendQueueToService(0);
607
608 EXPECT_CALL(observer, WillProcessTask(_)).Times(2);
609 EXPECT_CALL(observer, DidProcessTask(_)).Times(2);
610 test_task_runner_->RunUntilIdle();
611 }
612
613 TEST_F(TaskQueueManagerTest, TaskObserverRemoving) {
614 Initialize(1u);
615 MockTaskObserver observer;
616 manager_->AddTaskObserver(&observer);
617 manager_->RemoveTaskObserver(&observer);
618
619 std::vector<int> run_order;
620 scoped_refptr<base::SingleThreadTaskRunner> runner =
621 manager_->TaskRunnerForQueue(0);
622
623 runner->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order));
624
625 EXPECT_CALL(observer, WillProcessTask(_)).Times(0);
626 EXPECT_CALL(observer, DidProcessTask(_)).Times(0);
627
628 selector_->AppendQueueToService(0);
629 test_task_runner_->RunUntilIdle();
630 }
631
632 void RemoveObserverTask(TaskQueueManager* manager,
633 base::MessageLoop::TaskObserver* observer) {
634 manager->RemoveTaskObserver(observer);
635 }
636
637 TEST_F(TaskQueueManagerTest, TaskObserverRemovingInsideTask) {
638 Initialize(1u);
639 MockTaskObserver observer;
640 manager_->AddTaskObserver(&observer);
641
642 scoped_refptr<base::SingleThreadTaskRunner> runner =
643 manager_->TaskRunnerForQueue(0);
644 runner->PostTask(FROM_HERE,
645 base::Bind(&RemoveObserverTask, manager_.get(), &observer));
646
647 selector_->AppendQueueToService(0);
648
649 EXPECT_CALL(observer, WillProcessTask(_)).Times(1);
650 EXPECT_CALL(observer, DidProcessTask(_)).Times(0);
651 test_task_runner_->RunUntilIdle();
652 }
653
654 } // namespace 585 } // namespace
655 } // namespace content 586 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/scheduler/task_queue_manager.cc ('k') | content/renderer/scheduler/webthread_impl_for_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698