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

Side by Side Diff: components/scheduler/child/task_queue_selector_unittest.cc

Issue 1259583006: Reland: Explicitly track the scheduler task enqueueing order in a new field (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix the DCHECK Created 5 years, 4 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/child/task_queue_selector.h" 5 #include "components/scheduler/child/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"
(...skipping 15 matching lines...) Expand all
26 private: 26 private:
27 DISALLOW_COPY_AND_ASSIGN(MockObserver); 27 DISALLOW_COPY_AND_ASSIGN(MockObserver);
28 }; 28 };
29 29
30 class TaskQueueSelectorTest : public testing::Test { 30 class TaskQueueSelectorTest : public testing::Test {
31 public: 31 public:
32 TaskQueueSelectorTest() 32 TaskQueueSelectorTest()
33 : test_closure_(base::Bind(&TaskQueueSelectorTest::TestFunction)) {} 33 : test_closure_(base::Bind(&TaskQueueSelectorTest::TestFunction)) {}
34 ~TaskQueueSelectorTest() override {} 34 ~TaskQueueSelectorTest() override {}
35 35
36 std::vector<base::PendingTask> GetTasks(int count) { 36 std::vector<TaskQueueImpl::Task> GetTasks(int count) {
37 std::vector<base::PendingTask> tasks; 37 std::vector<TaskQueueImpl::Task> tasks;
38 for (int i = 0; i < count; i++) { 38 for (int i = 0; i < count; i++) {
39 base::PendingTask task = base::PendingTask(FROM_HERE, test_closure_); 39 TaskQueueImpl::Task task(FROM_HERE, test_closure_, 0, true);
40 task.sequence_num = i; 40 task.set_enqueue_order(i);
41 tasks.push_back(task); 41 tasks.push_back(task);
42 } 42 }
43 return tasks; 43 return tasks;
44 } 44 }
45 45
46 void PushTasks(const std::vector<base::PendingTask>& tasks, 46 void PushTasks(const std::vector<TaskQueueImpl::Task>& tasks,
47 const size_t queue_indices[]) { 47 const size_t queue_indices[]) {
48 std::set<size_t> changed_queue_set; 48 std::set<size_t> changed_queue_set;
49 for (size_t i = 0; i < tasks.size(); i++) { 49 for (size_t i = 0; i < tasks.size(); i++) {
50 changed_queue_set.insert(queue_indices[i]); 50 changed_queue_set.insert(queue_indices[i]);
51 task_queues_[queue_indices[i]]->PushTaskOntoWorkQueueForTest(tasks[i]); 51 task_queues_[queue_indices[i]]->PushTaskOntoWorkQueueForTest(tasks[i]);
52 } 52 }
53 for (size_t queue_index : changed_queue_set) { 53 for (size_t queue_index : changed_queue_set) {
54 selector_.GetTaskQueueSets()->OnPushQueue( 54 selector_.GetTaskQueueSets()->OnPushQueue(
55 task_queues_[queue_index].get()); 55 task_queues_[queue_index].get());
56 } 56 }
57 } 57 }
58 58
59 std::vector<size_t> PopTasks() { 59 std::vector<size_t> PopTasks() {
60 std::vector<size_t> order; 60 std::vector<size_t> order;
61 internal::TaskQueueImpl* chosen_queue; 61 TaskQueueImpl* chosen_queue;
62 while (selector_.SelectQueueToService(&chosen_queue)) { 62 while (selector_.SelectQueueToService(&chosen_queue)) {
63 size_t chosen_queue_index = 63 size_t chosen_queue_index =
64 queue_to_index_map_.find(chosen_queue)->second; 64 queue_to_index_map_.find(chosen_queue)->second;
65 order.push_back(chosen_queue_index); 65 order.push_back(chosen_queue_index);
66 chosen_queue->PopTaskFromWorkQueueForTest(); 66 chosen_queue->PopTaskFromWorkQueueForTest();
67 selector_.GetTaskQueueSets()->OnPopQueue(chosen_queue); 67 selector_.GetTaskQueueSets()->OnPopQueue(chosen_queue);
68 } 68 }
69 return order; 69 return order;
70 } 70 }
71 71
72 static void TestFunction() {} 72 static void TestFunction() {}
73 73
74 protected: 74 protected:
75 void SetUp() final { 75 void SetUp() final {
76 for (size_t i = 0; i < kTaskQueueCount; i++) { 76 for (size_t i = 0; i < kTaskQueueCount; i++) {
77 scoped_refptr<internal::TaskQueueImpl> task_queue = 77 scoped_refptr<TaskQueueImpl> task_queue =
78 make_scoped_refptr(new internal::TaskQueueImpl( 78 make_scoped_refptr(new TaskQueueImpl(
79 nullptr, TaskQueue::Spec("test queue"), "test", "test")); 79 nullptr, TaskQueue::Spec("test queue"), "test", "test"));
80 selector_.AddQueue(task_queue.get()); 80 selector_.AddQueue(task_queue.get());
81 task_queues_.push_back(task_queue); 81 task_queues_.push_back(task_queue);
82 } 82 }
83 for (size_t i = 0; i < kTaskQueueCount; i++) { 83 for (size_t i = 0; i < kTaskQueueCount; i++) {
84 EXPECT_TRUE(selector_.IsQueueEnabled(task_queues_[i].get())) << i; 84 EXPECT_TRUE(selector_.IsQueueEnabled(task_queues_[i].get())) << i;
85 queue_to_index_map_.insert(std::make_pair(task_queues_[i].get(), i)); 85 queue_to_index_map_.insert(std::make_pair(task_queues_[i].get(), i));
86 } 86 }
87 } 87 }
88 88
89 const size_t kTaskQueueCount = 5; 89 const size_t kTaskQueueCount = 5;
90 base::Closure test_closure_; 90 base::Closure test_closure_;
91 TaskQueueSelector selector_; 91 TaskQueueSelector selector_;
92 std::vector<scoped_refptr<internal::TaskQueueImpl>> task_queues_; 92 std::vector<scoped_refptr<TaskQueueImpl>> task_queues_;
93 std::map<internal::TaskQueueImpl*, size_t> queue_to_index_map_; 93 std::map<TaskQueueImpl*, size_t> queue_to_index_map_;
94 }; 94 };
95 95
96 TEST_F(TaskQueueSelectorTest, TestDefaultPriority) { 96 TEST_F(TaskQueueSelectorTest, TestDefaultPriority) {
97 std::vector<base::PendingTask> tasks = GetTasks(5); 97 std::vector<TaskQueueImpl::Task> tasks = GetTasks(5);
98 size_t queue_order[] = {4, 3, 2, 1, 0}; 98 size_t queue_order[] = {4, 3, 2, 1, 0};
99 PushTasks(tasks, queue_order); 99 PushTasks(tasks, queue_order);
100 EXPECT_THAT(PopTasks(), testing::ElementsAre(4, 3, 2, 1, 0)); 100 EXPECT_THAT(PopTasks(), testing::ElementsAre(4, 3, 2, 1, 0));
101 } 101 }
102 102
103 TEST_F(TaskQueueSelectorTest, TestHighPriority) { 103 TEST_F(TaskQueueSelectorTest, TestHighPriority) {
104 std::vector<base::PendingTask> tasks = GetTasks(5); 104 std::vector<TaskQueueImpl::Task> tasks = GetTasks(5);
105 size_t queue_order[] = {0, 1, 2, 3, 4}; 105 size_t queue_order[] = {0, 1, 2, 3, 4};
106 PushTasks(tasks, queue_order); 106 PushTasks(tasks, queue_order);
107 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY); 107 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY);
108 EXPECT_THAT(PopTasks(), testing::ElementsAre(2, 0, 1, 3, 4)); 108 EXPECT_THAT(PopTasks(), testing::ElementsAre(2, 0, 1, 3, 4));
109 } 109 }
110 110
111 TEST_F(TaskQueueSelectorTest, TestBestEffortPriority) { 111 TEST_F(TaskQueueSelectorTest, TestBestEffortPriority) {
112 std::vector<base::PendingTask> tasks = GetTasks(5); 112 std::vector<TaskQueueImpl::Task> tasks = GetTasks(5);
113 size_t queue_order[] = {0, 1, 2, 3, 4}; 113 size_t queue_order[] = {0, 1, 2, 3, 4};
114 PushTasks(tasks, queue_order); 114 PushTasks(tasks, queue_order);
115 selector_.SetQueuePriority(task_queues_[0].get(), 115 selector_.SetQueuePriority(task_queues_[0].get(),
116 TaskQueue::BEST_EFFORT_PRIORITY); 116 TaskQueue::BEST_EFFORT_PRIORITY);
117 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY); 117 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY);
118 EXPECT_THAT(PopTasks(), testing::ElementsAre(2, 1, 3, 4, 0)); 118 EXPECT_THAT(PopTasks(), testing::ElementsAre(2, 1, 3, 4, 0));
119 } 119 }
120 120
121 TEST_F(TaskQueueSelectorTest, TestControlPriority) { 121 TEST_F(TaskQueueSelectorTest, TestControlPriority) {
122 std::vector<base::PendingTask> tasks = GetTasks(5); 122 std::vector<TaskQueueImpl::Task> tasks = GetTasks(5);
123 size_t queue_order[] = {0, 1, 2, 3, 4}; 123 size_t queue_order[] = {0, 1, 2, 3, 4};
124 PushTasks(tasks, queue_order); 124 PushTasks(tasks, queue_order);
125 selector_.SetQueuePriority(task_queues_[4].get(), 125 selector_.SetQueuePriority(task_queues_[4].get(),
126 TaskQueue::CONTROL_PRIORITY); 126 TaskQueue::CONTROL_PRIORITY);
127 EXPECT_TRUE(selector_.IsQueueEnabled(task_queues_[4].get())); 127 EXPECT_TRUE(selector_.IsQueueEnabled(task_queues_[4].get()));
128 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY); 128 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY);
129 EXPECT_TRUE(selector_.IsQueueEnabled(task_queues_[2].get())); 129 EXPECT_TRUE(selector_.IsQueueEnabled(task_queues_[2].get()));
130 EXPECT_THAT(PopTasks(), testing::ElementsAre(4, 2, 0, 1, 3)); 130 EXPECT_THAT(PopTasks(), testing::ElementsAre(4, 2, 0, 1, 3));
131 } 131 }
132 132
(...skipping 12 matching lines...) Expand all
145 MockObserver mock_observer; 145 MockObserver mock_observer;
146 selector_.SetTaskQueueSelectorObserver(&mock_observer); 146 selector_.SetTaskQueueSelectorObserver(&mock_observer);
147 EXPECT_CALL(mock_observer, OnTaskQueueEnabled()).Times(0); 147 EXPECT_CALL(mock_observer, OnTaskQueueEnabled()).Times(0);
148 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY); 148 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY);
149 } 149 }
150 150
151 TEST_F(TaskQueueSelectorTest, TestDisableEnable) { 151 TEST_F(TaskQueueSelectorTest, TestDisableEnable) {
152 MockObserver mock_observer; 152 MockObserver mock_observer;
153 selector_.SetTaskQueueSelectorObserver(&mock_observer); 153 selector_.SetTaskQueueSelectorObserver(&mock_observer);
154 154
155 std::vector<base::PendingTask> tasks = GetTasks(5); 155 std::vector<TaskQueueImpl::Task> tasks = GetTasks(5);
156 size_t queue_order[] = {0, 1, 2, 3, 4}; 156 size_t queue_order[] = {0, 1, 2, 3, 4};
157 PushTasks(tasks, queue_order); 157 PushTasks(tasks, queue_order);
158 selector_.SetQueuePriority(task_queues_[2].get(), 158 selector_.SetQueuePriority(task_queues_[2].get(),
159 TaskQueue::DISABLED_PRIORITY); 159 TaskQueue::DISABLED_PRIORITY);
160 EXPECT_FALSE(selector_.IsQueueEnabled(task_queues_[2].get())); 160 EXPECT_FALSE(selector_.IsQueueEnabled(task_queues_[2].get()));
161 selector_.SetQueuePriority(task_queues_[4].get(), 161 selector_.SetQueuePriority(task_queues_[4].get(),
162 TaskQueue::DISABLED_PRIORITY); 162 TaskQueue::DISABLED_PRIORITY);
163 EXPECT_FALSE(selector_.IsQueueEnabled(task_queues_[4].get())); 163 EXPECT_FALSE(selector_.IsQueueEnabled(task_queues_[4].get()));
164 EXPECT_THAT(PopTasks(), testing::ElementsAre(0, 1, 3)); 164 EXPECT_THAT(PopTasks(), testing::ElementsAre(0, 1, 3));
165 165
166 EXPECT_CALL(mock_observer, OnTaskQueueEnabled()).Times(2); 166 EXPECT_CALL(mock_observer, OnTaskQueueEnabled()).Times(2);
167 selector_.SetQueuePriority(task_queues_[2].get(), 167 selector_.SetQueuePriority(task_queues_[2].get(),
168 TaskQueue::BEST_EFFORT_PRIORITY); 168 TaskQueue::BEST_EFFORT_PRIORITY);
169 EXPECT_THAT(PopTasks(), testing::ElementsAre(2)); 169 EXPECT_THAT(PopTasks(), testing::ElementsAre(2));
170 selector_.SetQueuePriority(task_queues_[4].get(), TaskQueue::NORMAL_PRIORITY); 170 selector_.SetQueuePriority(task_queues_[4].get(), TaskQueue::NORMAL_PRIORITY);
171 EXPECT_THAT(PopTasks(), testing::ElementsAre(4)); 171 EXPECT_THAT(PopTasks(), testing::ElementsAre(4));
172 } 172 }
173 173
174 TEST_F(TaskQueueSelectorTest, TestEmptyQueues) { 174 TEST_F(TaskQueueSelectorTest, TestEmptyQueues) {
175 internal::TaskQueueImpl* chosen_queue = nullptr; 175 TaskQueueImpl* chosen_queue = nullptr;
176 EXPECT_FALSE(selector_.SelectQueueToService(&chosen_queue)); 176 EXPECT_FALSE(selector_.SelectQueueToService(&chosen_queue));
177 177
178 // Test only disabled queues. 178 // Test only disabled queues.
179 std::vector<base::PendingTask> tasks = GetTasks(1); 179 std::vector<TaskQueueImpl::Task> tasks = GetTasks(1);
180 size_t queue_order[] = {0}; 180 size_t queue_order[] = {0};
181 PushTasks(tasks, queue_order); 181 PushTasks(tasks, queue_order);
182 selector_.SetQueuePriority(task_queues_[0].get(), 182 selector_.SetQueuePriority(task_queues_[0].get(),
183 TaskQueue::DISABLED_PRIORITY); 183 TaskQueue::DISABLED_PRIORITY);
184 EXPECT_FALSE(selector_.IsQueueEnabled(task_queues_[0].get())); 184 EXPECT_FALSE(selector_.IsQueueEnabled(task_queues_[0].get()));
185 EXPECT_FALSE(selector_.SelectQueueToService(&chosen_queue)); 185 EXPECT_FALSE(selector_.SelectQueueToService(&chosen_queue));
186 } 186 }
187 187
188 TEST_F(TaskQueueSelectorTest, TestSequenceNumber) { 188 TEST_F(TaskQueueSelectorTest, TestAge) {
189 std::vector<base::PendingTask> tasks = GetTasks(5); 189 std::vector<TaskQueueImpl::Task> tasks;
190 tasks[0].sequence_num = 10; 190 int enqueue_order[] = {10, 1, 2, 9, 4};
191 tasks[3].sequence_num = 9; 191 for (int i = 0; i < 5; i++) {
192 TaskQueueImpl::Task task(FROM_HERE, test_closure_, 0, true);
193 task.set_enqueue_order(enqueue_order[i]);
194 tasks.push_back(task);
195 }
192 size_t queue_order[] = {0, 1, 2, 3, 4}; 196 size_t queue_order[] = {0, 1, 2, 3, 4};
193 PushTasks(tasks, queue_order); 197 PushTasks(tasks, queue_order);
194 EXPECT_THAT(PopTasks(), testing::ElementsAre(1, 2, 4, 3, 0)); 198 EXPECT_THAT(PopTasks(), testing::ElementsAre(1, 2, 4, 3, 0));
195 } 199 }
196 200
197 TEST_F(TaskQueueSelectorTest, TestControlStarvesOthers) { 201 TEST_F(TaskQueueSelectorTest, TestControlStarvesOthers) {
198 std::vector<base::PendingTask> tasks = GetTasks(4); 202 std::vector<TaskQueueImpl::Task> tasks = GetTasks(4);
199 size_t queue_order[] = {0, 1, 2, 3}; 203 size_t queue_order[] = {0, 1, 2, 3};
200 PushTasks(tasks, queue_order); 204 PushTasks(tasks, queue_order);
201 selector_.SetQueuePriority(task_queues_[3].get(), 205 selector_.SetQueuePriority(task_queues_[3].get(),
202 TaskQueue::CONTROL_PRIORITY); 206 TaskQueue::CONTROL_PRIORITY);
203 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY); 207 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY);
204 selector_.SetQueuePriority(task_queues_[1].get(), 208 selector_.SetQueuePriority(task_queues_[1].get(),
205 TaskQueue::BEST_EFFORT_PRIORITY); 209 TaskQueue::BEST_EFFORT_PRIORITY);
206 for (int i = 0; i < 100; i++) { 210 for (int i = 0; i < 100; i++) {
207 internal::TaskQueueImpl* chosen_queue = nullptr; 211 TaskQueueImpl* chosen_queue = nullptr;
208 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue)); 212 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue));
209 EXPECT_EQ(task_queues_[3].get(), chosen_queue); 213 EXPECT_EQ(task_queues_[3].get(), chosen_queue);
210 // Don't remove task from queue to simulate all queues still being full. 214 // Don't remove task from queue to simulate all queues still being full.
211 } 215 }
212 } 216 }
213 217
214 TEST_F(TaskQueueSelectorTest, TestHighPriorityDoesNotStarveNormal) { 218 TEST_F(TaskQueueSelectorTest, TestHighPriorityDoesNotStarveNormal) {
215 std::vector<base::PendingTask> tasks = GetTasks(3); 219 std::vector<TaskQueueImpl::Task> tasks = GetTasks(3);
216 size_t queue_order[] = {0, 1, 2}; 220 size_t queue_order[] = {0, 1, 2};
217 PushTasks(tasks, queue_order); 221 PushTasks(tasks, queue_order);
218 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY); 222 selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY);
219 selector_.SetQueuePriority(task_queues_[1].get(), 223 selector_.SetQueuePriority(task_queues_[1].get(),
220 TaskQueue::BEST_EFFORT_PRIORITY); 224 TaskQueue::BEST_EFFORT_PRIORITY);
221 size_t counts[] = {0, 0, 0}; 225 size_t counts[] = {0, 0, 0};
222 for (int i = 0; i < 100; i++) { 226 for (int i = 0; i < 100; i++) {
223 internal::TaskQueueImpl* chosen_queue = nullptr; 227 TaskQueueImpl* chosen_queue = nullptr;
224 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue)); 228 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue));
225 size_t chosen_queue_index = queue_to_index_map_.find(chosen_queue)->second; 229 size_t chosen_queue_index = queue_to_index_map_.find(chosen_queue)->second;
226 counts[chosen_queue_index]++; 230 counts[chosen_queue_index]++;
227 // Don't remove task from queue to simulate all queues still being full. 231 // Don't remove task from queue to simulate all queues still being full.
228 } 232 }
229 EXPECT_GT(counts[0], 0ul); // Check high doesn't starve normal. 233 EXPECT_GT(counts[0], 0ul); // Check high doesn't starve normal.
230 EXPECT_GT(counts[2], counts[0]); // Check high gets more chance to run. 234 EXPECT_GT(counts[2], counts[0]); // Check high gets more chance to run.
231 EXPECT_EQ(0ul, counts[1]); // Check best effort is starved. 235 EXPECT_EQ(0ul, counts[1]); // Check best effort is starved.
232 } 236 }
233 237
234 TEST_F(TaskQueueSelectorTest, TestBestEffortGetsStarved) { 238 TEST_F(TaskQueueSelectorTest, TestBestEffortGetsStarved) {
235 std::vector<base::PendingTask> tasks = GetTasks(2); 239 std::vector<TaskQueueImpl::Task> tasks = GetTasks(2);
236 size_t queue_order[] = {0, 1}; 240 size_t queue_order[] = {0, 1};
237 PushTasks(tasks, queue_order); 241 PushTasks(tasks, queue_order);
238 selector_.SetQueuePriority(task_queues_[0].get(), 242 selector_.SetQueuePriority(task_queues_[0].get(),
239 TaskQueue::BEST_EFFORT_PRIORITY); 243 TaskQueue::BEST_EFFORT_PRIORITY);
240 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY); 244 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY);
241 internal::TaskQueueImpl* chosen_queue = nullptr; 245 TaskQueueImpl* chosen_queue = nullptr;
242 for (int i = 0; i < 100; i++) { 246 for (int i = 0; i < 100; i++) {
243 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue)); 247 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue));
244 EXPECT_EQ(task_queues_[1].get(), chosen_queue); 248 EXPECT_EQ(task_queues_[1].get(), chosen_queue);
245 // Don't remove task from queue to simulate all queues still being full. 249 // Don't remove task from queue to simulate all queues still being full.
246 } 250 }
247 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::HIGH_PRIORITY); 251 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::HIGH_PRIORITY);
248 for (int i = 0; i < 100; i++) { 252 for (int i = 0; i < 100; i++) {
249 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue)); 253 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue));
250 EXPECT_EQ(task_queues_[1].get(), chosen_queue); 254 EXPECT_EQ(task_queues_[1].get(), chosen_queue);
251 // Don't remove task from queue to simulate all queues still being full. 255 // Don't remove task from queue to simulate all queues still being full.
252 } 256 }
253 selector_.SetQueuePriority(task_queues_[1].get(), 257 selector_.SetQueuePriority(task_queues_[1].get(),
254 TaskQueue::CONTROL_PRIORITY); 258 TaskQueue::CONTROL_PRIORITY);
255 for (int i = 0; i < 100; i++) { 259 for (int i = 0; i < 100; i++) {
256 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue)); 260 EXPECT_TRUE(selector_.SelectQueueToService(&chosen_queue));
257 EXPECT_EQ(task_queues_[1].get(), chosen_queue); 261 EXPECT_EQ(task_queues_[1].get(), chosen_queue);
258 // Don't remove task from queue to simulate all queues still being full. 262 // Don't remove task from queue to simulate all queues still being full.
259 } 263 }
260 } 264 }
261 265
262 TEST_F(TaskQueueSelectorTest, DisabledPriorityIsPenultimate) { 266 TEST_F(TaskQueueSelectorTest, DisabledPriorityIsPenultimate) {
263 EXPECT_EQ(TaskQueue::QUEUE_PRIORITY_COUNT, TaskQueue::DISABLED_PRIORITY + 1); 267 EXPECT_EQ(TaskQueue::QUEUE_PRIORITY_COUNT, TaskQueue::DISABLED_PRIORITY + 1);
264 } 268 }
265 269
266 } // namespace internal 270 } // namespace internal
267 } // namespace scheduler 271 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/child/task_queue_manager_unittest.cc ('k') | components/scheduler/child/task_queue_sets.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698