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

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

Issue 1685093002: Fix bug with TaskQueueSelector and blocked queues (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Improve the dcheck Created 4 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 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/base/task_queue_selector.h" 5 #include "components/scheduler/base/task_queue_selector.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 TEST_F(TaskQueueSelectorTest, TestObserverWithEnabledQueue) { 180 TEST_F(TaskQueueSelectorTest, TestObserverWithEnabledQueue) {
181 DisableQueue(task_queues_[1].get()); 181 DisableQueue(task_queues_[1].get());
182 MockObserver mock_observer; 182 MockObserver mock_observer;
183 selector_.SetTaskQueueSelectorObserver(&mock_observer); 183 selector_.SetTaskQueueSelectorObserver(&mock_observer);
184 EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(1); 184 EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(1);
185 EnableQueue(task_queues_[1].get()); 185 EnableQueue(task_queues_[1].get());
186 } 186 }
187 187
188 TEST_F(TaskQueueSelectorTest, 188 TEST_F(TaskQueueSelectorTest,
189 TestObserverWithSetQueuePriorityAndQueueAlreadyEnabled) { 189 TestObserverWithSetQueuePriorityAndQueueAlreadyEnabled) {
190 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY); 190 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::HIGH_PRIORITY);
191 MockObserver mock_observer; 191 MockObserver mock_observer;
192 selector_.SetTaskQueueSelectorObserver(&mock_observer); 192 selector_.SetTaskQueueSelectorObserver(&mock_observer);
193 EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(0); 193 EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(0);
194 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY); 194 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY);
195 } 195 }
196 196
197 TEST_F(TaskQueueSelectorTest, TestDisableEnable) { 197 TEST_F(TaskQueueSelectorTest, TestDisableEnable) {
198 MockObserver mock_observer; 198 MockObserver mock_observer;
199 selector_.SetTaskQueueSelectorObserver(&mock_observer); 199 selector_.SetTaskQueueSelectorObserver(&mock_observer);
200 200
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 EXPECT_GT(counts[0], 0ul); // Check high doesn't starve normal. 287 EXPECT_GT(counts[0], 0ul); // Check high doesn't starve normal.
288 EXPECT_GT(counts[2], counts[0]); // Check high gets more chance to run. 288 EXPECT_GT(counts[2], counts[0]); // Check high gets more chance to run.
289 EXPECT_EQ(0ul, counts[1]); // Check best effort is starved. 289 EXPECT_EQ(0ul, counts[1]); // Check best effort is starved.
290 } 290 }
291 291
292 TEST_F(TaskQueueSelectorTest, TestBestEffortGetsStarved) { 292 TEST_F(TaskQueueSelectorTest, TestBestEffortGetsStarved) {
293 size_t queue_order[] = {0, 1}; 293 size_t queue_order[] = {0, 1};
294 PushTasks(queue_order, 2); 294 PushTasks(queue_order, 2);
295 selector_.SetQueuePriority(task_queues_[0].get(), 295 selector_.SetQueuePriority(task_queues_[0].get(),
296 TaskQueue::BEST_EFFORT_PRIORITY); 296 TaskQueue::BEST_EFFORT_PRIORITY);
297 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::NORMAL_PRIORITY); 297 EXPECT_EQ(TaskQueue::NORMAL_PRIORITY, task_queues_[1]->GetQueuePriority());
298 WorkQueue* chosen_work_queue = nullptr; 298 WorkQueue* chosen_work_queue = nullptr;
299 for (int i = 0; i < 100; i++) { 299 for (int i = 0; i < 100; i++) {
300 EXPECT_TRUE(selector_.SelectWorkQueueToService(&chosen_work_queue)); 300 EXPECT_TRUE(selector_.SelectWorkQueueToService(&chosen_work_queue));
301 EXPECT_EQ(task_queues_[1].get(), chosen_work_queue->task_queue()); 301 EXPECT_EQ(task_queues_[1].get(), chosen_work_queue->task_queue());
302 // Don't remove task from queue to simulate all queues still being full. 302 // Don't remove task from queue to simulate all queues still being full.
303 } 303 }
304 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::HIGH_PRIORITY); 304 selector_.SetQueuePriority(task_queues_[1].get(), TaskQueue::HIGH_PRIORITY);
305 for (int i = 0; i < 100; i++) { 305 for (int i = 0; i < 100; i++) {
306 EXPECT_TRUE(selector_.SelectWorkQueueToService(&chosen_work_queue)); 306 EXPECT_TRUE(selector_.SelectWorkQueueToService(&chosen_work_queue));
307 EXPECT_EQ(task_queues_[1].get(), chosen_work_queue->task_queue()); 307 EXPECT_EQ(task_queues_[1].get(), chosen_work_queue->task_queue());
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 EXPECT_EQ(chose_delayed_over_immediate, 477 EXPECT_EQ(chose_delayed_over_immediate,
478 GetParam().expected_did_starve_immediate_queue); 478 GetParam().expected_did_starve_immediate_queue);
479 } 479 }
480 480
481 INSTANTIATE_TEST_CASE_P(ChooseOldestWithPriorityTest, 481 INSTANTIATE_TEST_CASE_P(ChooseOldestWithPriorityTest,
482 ChooseOldestWithPriorityTest, 482 ChooseOldestWithPriorityTest,
483 testing::ValuesIn(kChooseOldestWithPriorityTestCases)); 483 testing::ValuesIn(kChooseOldestWithPriorityTestCases));
484 484
485 } // namespace internal 485 } // namespace internal
486 } // namespace scheduler 486 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698