| 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 "content/renderer/scheduler/renderer_task_queue_selector.h" | 5 #include "content/renderer/scheduler/renderer_task_queue_selector.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
| 10 #include "base/pending_task.h" | 10 #include "base/pending_task.h" |
| 11 #include "testing/gmock/include/gmock/gmock.h" | 11 #include "testing/gmock/include/gmock/gmock.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 13 |
| 14 namespace content { | 14 namespace content { |
| 15 | 15 |
| 16 class MockTaskQueueSelectorObserver |
| 17 : public TaskQueueSelector::TaskQueueSelectorObserver { |
| 18 public: |
| 19 MockTaskQueueSelectorObserver() {} |
| 20 virtual ~MockTaskQueueSelectorObserver() {} |
| 21 |
| 22 MOCK_METHOD0(OnTaskQueueEnabled, void()); |
| 23 |
| 24 private: |
| 25 DISALLOW_COPY_AND_ASSIGN(MockTaskQueueSelectorObserver); |
| 26 }; |
| 27 |
| 16 class RendererTaskQueueSelectorTest : public testing::Test { | 28 class RendererTaskQueueSelectorTest : public testing::Test { |
| 17 public: | 29 public: |
| 18 RendererTaskQueueSelectorTest() | 30 RendererTaskQueueSelectorTest() |
| 19 : test_closure_( | 31 : test_closure_( |
| 20 base::Bind(&RendererTaskQueueSelectorTest::TestFunction)) {} | 32 base::Bind(&RendererTaskQueueSelectorTest::TestFunction)) {} |
| 21 ~RendererTaskQueueSelectorTest() override {} | 33 ~RendererTaskQueueSelectorTest() override {} |
| 22 | 34 |
| 23 std::vector<base::PendingTask> GetTasks(int count) { | 35 std::vector<base::PendingTask> GetTasks(int count) { |
| 24 std::vector<base::PendingTask> tasks; | 36 std::vector<base::PendingTask> tasks; |
| 25 for (int i = 0; i < count; i++) { | 37 for (int i = 0; i < count; i++) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 std::vector<base::PendingTask> tasks = GetTasks(5); | 109 std::vector<base::PendingTask> tasks = GetTasks(5); |
| 98 size_t queue_order[] = {0, 1, 2, 3, 4}; | 110 size_t queue_order[] = {0, 1, 2, 3, 4}; |
| 99 PushTasks(tasks, queue_order); | 111 PushTasks(tasks, queue_order); |
| 100 selector_.SetQueuePriority(4, RendererTaskQueueSelector::CONTROL_PRIORITY); | 112 selector_.SetQueuePriority(4, RendererTaskQueueSelector::CONTROL_PRIORITY); |
| 101 EXPECT_TRUE(selector_.IsQueueEnabled(4)); | 113 EXPECT_TRUE(selector_.IsQueueEnabled(4)); |
| 102 selector_.SetQueuePriority(2, RendererTaskQueueSelector::HIGH_PRIORITY); | 114 selector_.SetQueuePriority(2, RendererTaskQueueSelector::HIGH_PRIORITY); |
| 103 EXPECT_TRUE(selector_.IsQueueEnabled(2)); | 115 EXPECT_TRUE(selector_.IsQueueEnabled(2)); |
| 104 EXPECT_THAT(PopTasks(), testing::ElementsAre(4, 2, 0, 1, 3)); | 116 EXPECT_THAT(PopTasks(), testing::ElementsAre(4, 2, 0, 1, 3)); |
| 105 } | 117 } |
| 106 | 118 |
| 119 TEST_F(RendererTaskQueueSelectorTest, TestDisableReturnsTrueIfQueueWasEnabled) { |
| 120 selector_.EnableQueue(1, RendererTaskQueueSelector::NORMAL_PRIORITY); |
| 121 EXPECT_TRUE(selector_.DisableQueue(1)); |
| 122 } |
| 123 |
| 124 TEST_F(RendererTaskQueueSelectorTest, |
| 125 TestDisableReturnsFalseIfQueueWasAlreadyDisabled) { |
| 126 selector_.DisableQueue(1); |
| 127 EXPECT_FALSE(selector_.DisableQueue(1)); |
| 128 } |
| 129 |
| 107 TEST_F(RendererTaskQueueSelectorTest, TestDisableEnable) { | 130 TEST_F(RendererTaskQueueSelectorTest, TestDisableEnable) { |
| 131 MockTaskQueueSelectorObserver mock_observer; |
| 132 selector_.RegisterTaskQueueObserver(&mock_observer); |
| 133 |
| 108 std::vector<base::PendingTask> tasks = GetTasks(5); | 134 std::vector<base::PendingTask> tasks = GetTasks(5); |
| 109 size_t queue_order[] = {0, 1, 2, 3, 4}; | 135 size_t queue_order[] = {0, 1, 2, 3, 4}; |
| 110 PushTasks(tasks, queue_order); | 136 PushTasks(tasks, queue_order); |
| 111 selector_.DisableQueue(2); | 137 selector_.DisableQueue(2); |
| 112 EXPECT_FALSE(selector_.IsQueueEnabled(2)); | 138 EXPECT_FALSE(selector_.IsQueueEnabled(2)); |
| 113 selector_.DisableQueue(4); | 139 selector_.DisableQueue(4); |
| 114 EXPECT_FALSE(selector_.IsQueueEnabled(4)); | 140 EXPECT_FALSE(selector_.IsQueueEnabled(4)); |
| 115 EXPECT_THAT(PopTasks(), testing::ElementsAre(0, 1, 3)); | 141 EXPECT_THAT(PopTasks(), testing::ElementsAre(0, 1, 3)); |
| 142 |
| 143 EXPECT_CALL(mock_observer, OnTaskQueueEnabled()).Times(2); |
| 116 selector_.EnableQueue(2, RendererTaskQueueSelector::BEST_EFFORT_PRIORITY); | 144 selector_.EnableQueue(2, RendererTaskQueueSelector::BEST_EFFORT_PRIORITY); |
| 117 EXPECT_THAT(PopTasks(), testing::ElementsAre(2)); | 145 EXPECT_THAT(PopTasks(), testing::ElementsAre(2)); |
| 118 selector_.EnableQueue(4, RendererTaskQueueSelector::NORMAL_PRIORITY); | 146 selector_.EnableQueue(4, RendererTaskQueueSelector::NORMAL_PRIORITY); |
| 119 EXPECT_THAT(PopTasks(), testing::ElementsAre(4)); | 147 EXPECT_THAT(PopTasks(), testing::ElementsAre(4)); |
| 120 } | 148 } |
| 121 | 149 |
| 122 TEST_F(RendererTaskQueueSelectorTest, TestEmptyQueues) { | 150 TEST_F(RendererTaskQueueSelectorTest, TestEmptyQueues) { |
| 123 size_t chosen_queue_index = 0; | 151 size_t chosen_queue_index = 0; |
| 124 EXPECT_FALSE(selector_.SelectWorkQueueToService(&chosen_queue_index)); | 152 EXPECT_FALSE(selector_.SelectWorkQueueToService(&chosen_queue_index)); |
| 125 | 153 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 } | 227 } |
| 200 selector_.SetQueuePriority(1, RendererTaskQueueSelector::CONTROL_PRIORITY); | 228 selector_.SetQueuePriority(1, RendererTaskQueueSelector::CONTROL_PRIORITY); |
| 201 for (int i = 0; i < 100; i++) { | 229 for (int i = 0; i < 100; i++) { |
| 202 EXPECT_TRUE(selector_.SelectWorkQueueToService(&chosen_queue_index)); | 230 EXPECT_TRUE(selector_.SelectWorkQueueToService(&chosen_queue_index)); |
| 203 EXPECT_EQ(1ul, chosen_queue_index); | 231 EXPECT_EQ(1ul, chosen_queue_index); |
| 204 // Don't remove task from queue to simulate all queues still being full. | 232 // Don't remove task from queue to simulate all queues still being full. |
| 205 } | 233 } |
| 206 } | 234 } |
| 207 | 235 |
| 208 } // namespace content | 236 } // namespace content |
| OLD | NEW |