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

Unified Diff: third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc

Issue 2540663002: Add the concept of QueueEnabledVoters to blink scheduler TaskQueue (Closed)
Patch Set: Fix test crashes and address feedback. Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc
index 07c7074dc1d42199a8f9492233c9c8177f52cf3c..2e12e70bc5b7d957cdaaf67de78bd8e9ce73f679 100644
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_selector_unittest.cc
@@ -98,14 +98,23 @@ class TaskQueueSelectorTest : public testing::Test {
static void TestFunction() {}
- void EnableQueue(TaskQueueImpl* queue) {
- queue->SetQueueEnabled(true);
- selector_.EnableQueue(queue);
+ void EnableQueue(TaskQueue::QueueEnabledVoter* voter) {
+ TaskQueueImpl::QueueEnabledVoterImpl* voter_impl =
+ static_cast<TaskQueueImpl::QueueEnabledVoterImpl*>(voter);
+
+ voter_impl->SetQueueEnabled(true);
+
+ ASSERT_TRUE(voter_impl->GetTaskQueueForTest()->IsQueueEnabled());
+ selector_.EnableQueue(voter_impl->GetTaskQueueForTest());
}
- void DisableQueue(TaskQueueImpl* queue) {
- queue->SetQueueEnabled(false);
- selector_.DisableQueue(queue);
+ void DisableQueue(TaskQueue::QueueEnabledVoter* voter) {
+ TaskQueueImpl::QueueEnabledVoterImpl* voter_impl =
+ static_cast<TaskQueueImpl::QueueEnabledVoterImpl*>(voter);
+
+ voter_impl->SetQueueEnabled(false);
+ ASSERT_FALSE(voter_impl->GetTaskQueueForTest()->IsQueueEnabled());
+ selector_.DisableQueue(voter_impl->GetTaskQueueForTest());
}
protected:
@@ -187,11 +196,13 @@ TEST_F(TaskQueueSelectorTest, TestControlPriority) {
}
TEST_F(TaskQueueSelectorTest, TestObserverWithEnabledQueue) {
- DisableQueue(task_queues_[1].get());
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter1 =
+ task_queues_[1]->CreateQueueEnabledVoter();
+ DisableQueue(voter1.get());
MockObserver mock_observer;
selector_.SetTaskQueueSelectorObserver(&mock_observer);
EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(1);
- EnableQueue(task_queues_[1].get());
+ EnableQueue(voter1.get());
}
TEST_F(TaskQueueSelectorTest,
@@ -209,19 +220,23 @@ TEST_F(TaskQueueSelectorTest, TestDisableEnable) {
size_t queue_order[] = {0, 1, 2, 3, 4};
PushTasks(queue_order, 5);
- DisableQueue(task_queues_[2].get());
- DisableQueue(task_queues_[4].get());
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter2 =
+ task_queues_[2]->CreateQueueEnabledVoter();
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter4 =
+ task_queues_[4]->CreateQueueEnabledVoter();
+ DisableQueue(voter2.get());
+ DisableQueue(voter4.get());
// Disabling a queue should not affect its priority.
EXPECT_EQ(TaskQueue::NORMAL_PRIORITY, task_queues_[2]->GetQueuePriority());
EXPECT_EQ(TaskQueue::NORMAL_PRIORITY, task_queues_[4]->GetQueuePriority());
EXPECT_THAT(PopTasks(), testing::ElementsAre(0, 1, 3));
EXPECT_CALL(mock_observer, OnTaskQueueEnabled(_)).Times(2);
- EnableQueue(task_queues_[2].get());
+ EnableQueue(voter2.get());
selector_.SetQueuePriority(task_queues_[2].get(),
TaskQueue::BEST_EFFORT_PRIORITY);
EXPECT_THAT(PopTasks(), testing::ElementsAre(2));
- EnableQueue(task_queues_[4].get());
+ EnableQueue(voter4.get());
EXPECT_THAT(PopTasks(), testing::ElementsAre(4));
}
@@ -229,7 +244,9 @@ TEST_F(TaskQueueSelectorTest, TestDisableChangePriorityThenEnable) {
EXPECT_TRUE(task_queues_[2]->delayed_work_queue()->Empty());
EXPECT_TRUE(task_queues_[2]->immediate_work_queue()->Empty());
- DisableQueue(task_queues_[2].get());
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter2 =
+ task_queues_[2]->CreateQueueEnabledVoter();
+ DisableQueue(voter2.get());
selector_.SetQueuePriority(task_queues_[2].get(), TaskQueue::HIGH_PRIORITY);
size_t queue_order[] = {0, 1, 2, 3, 4};
@@ -237,7 +254,7 @@ TEST_F(TaskQueueSelectorTest, TestDisableChangePriorityThenEnable) {
EXPECT_TRUE(task_queues_[2]->delayed_work_queue()->Empty());
EXPECT_FALSE(task_queues_[2]->immediate_work_queue()->Empty());
- EnableQueue(task_queues_[2].get());
+ EnableQueue(voter2.get());
EXPECT_EQ(TaskQueue::HIGH_PRIORITY, task_queues_[2]->GetQueuePriority());
EXPECT_THAT(PopTasks(), testing::ElementsAre(2, 0, 1, 3, 4));
@@ -250,9 +267,15 @@ TEST_F(TaskQueueSelectorTest, TestEmptyQueues) {
// Test only disabled queues.
size_t queue_order[] = {0};
PushTasks(queue_order, 1);
- task_queues_[0]->SetQueueEnabled(false);
- selector_.DisableQueue(task_queues_[0].get());
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter0 =
+ task_queues_[0]->CreateQueueEnabledVoter();
+ DisableQueue(voter0.get());
EXPECT_FALSE(selector_.SelectWorkQueueToService(&chosen_work_queue));
+
+ // These tests are unusual since there's no TQM. To avoid a later DCHECK when
+ // deleting the task queue, we re-enable the queue here so the selector
+ // doesn't get out of sync.
+ EnableQueue(voter0.get());
}
TEST_F(TaskQueueSelectorTest, TestAge) {
@@ -387,7 +410,10 @@ TEST_F(TaskQueueSelectorTest, TestObserverWithOneBlockedQueue) {
scoped_refptr<TaskQueueImpl> task_queue(NewTaskQueueWithBlockReporting());
selector.AddQueue(task_queue.get());
- task_queue->SetQueueEnabled(false);
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
+ task_queue->CreateQueueEnabledVoter();
+
+ voter->SetQueueEnabled(false);
selector.DisableQueue(task_queue.get());
TaskQueueImpl::Task task(FROM_HERE, test_closure_, base::TimeTicks(), 0,
@@ -399,6 +425,8 @@ TEST_F(TaskQueueSelectorTest, TestObserverWithOneBlockedQueue) {
EXPECT_CALL(mock_observer, OnTriedToSelectBlockedWorkQueue(_)).Times(1);
EXPECT_FALSE(selector.SelectWorkQueueToService(&chosen_work_queue));
+ voter.reset();
+ selector.EnableQueue(task_queue.get());
task_queue->UnregisterTaskQueue();
selector.RemoveQueue(task_queue.get());
}
@@ -412,10 +440,16 @@ TEST_F(TaskQueueSelectorTest, TestObserverWithTwoBlockedQueues) {
scoped_refptr<TaskQueueImpl> task_queue2(NewTaskQueueWithBlockReporting());
selector.AddQueue(task_queue.get());
selector.AddQueue(task_queue2.get());
- task_queue->SetQueueEnabled(false);
- task_queue2->SetQueueEnabled(false);
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter =
+ task_queue->CreateQueueEnabledVoter();
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter2 =
+ task_queue2->CreateQueueEnabledVoter();
+
+ voter->SetQueueEnabled(false);
+ voter2->SetQueueEnabled(false);
selector.DisableQueue(task_queue.get());
selector.DisableQueue(task_queue2.get());
+
selector.SetQueuePriority(task_queue2.get(), TaskQueue::CONTROL_PRIORITY);
TaskQueueImpl::Task task1(FROM_HERE, test_closure_, base::TimeTicks(), 0,
@@ -433,6 +467,9 @@ TEST_F(TaskQueueSelectorTest, TestObserverWithTwoBlockedQueues) {
EXPECT_FALSE(selector.SelectWorkQueueToService(&chosen_work_queue));
testing::Mock::VerifyAndClearExpectations(&mock_observer);
+ voter.reset();
+ selector.EnableQueue(task_queue.get());
+
// Removing the second queue and selecting again should result in another
// notification.
task_queue->UnregisterTaskQueue();
@@ -440,6 +477,8 @@ TEST_F(TaskQueueSelectorTest, TestObserverWithTwoBlockedQueues) {
EXPECT_CALL(mock_observer, OnTriedToSelectBlockedWorkQueue(_)).Times(1);
EXPECT_FALSE(selector.SelectWorkQueueToService(&chosen_work_queue));
+ voter2.reset();
+ selector.EnableQueue(task_queue2.get());
task_queue2->UnregisterTaskQueue();
selector.RemoveQueue(task_queue2.get());
}

Powered by Google App Engine
This is Rietveld 408576698