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

Unified Diff: components/scheduler/child/task_queue_sets_unittest.cc

Issue 1370343002: Revert of scheduler: Add a base directory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/scheduler/child/task_queue_sets.cc ('k') | components/scheduler/child/test_time_source.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/scheduler/child/task_queue_sets_unittest.cc
diff --git a/components/scheduler/child/task_queue_sets_unittest.cc b/components/scheduler/child/task_queue_sets_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b338ea76fce86a94f52ed31f2bf5e24b719a020c
--- /dev/null
+++ b/components/scheduler/child/task_queue_sets_unittest.cc
@@ -0,0 +1,239 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/scheduler/child/task_queue_sets.h"
+
+#include "components/scheduler/child/task_queue_impl.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace scheduler {
+namespace internal {
+
+class TaskQueueSetsTest : public testing::Test {
+ public:
+ void SetUp() override { task_queue_sets_.reset(new TaskQueueSets(kNumSets)); }
+
+ protected:
+ enum {
+ kNumSets = 5 // An arbitary choice.
+ };
+
+ TaskQueueImpl* NewTaskQueue(const char* queue_name) {
+ scoped_refptr<internal::TaskQueueImpl> queue =
+ make_scoped_refptr(new internal::TaskQueueImpl(
+ nullptr, TaskQueue::Spec(queue_name), "test", "test"));
+ task_queues_.push_back(queue);
+ return queue.get();
+ }
+
+ TaskQueueImpl::Task FakeTaskWithEnqueueOrder(int enqueue_order) {
+ TaskQueueImpl::Task fake_task(FROM_HERE, base::Closure(), 0, true);
+ fake_task.set_enqueue_order(enqueue_order);
+ return fake_task;
+ }
+
+ std::vector<scoped_refptr<internal::TaskQueueImpl>> task_queues_;
+ scoped_ptr<TaskQueueSets> task_queue_sets_;
+};
+
+TEST_F(TaskQueueSetsTest, AssignQueueToSet) {
+ internal::TaskQueueImpl* queue = NewTaskQueue("queue");
+ size_t set = TaskQueue::NORMAL_PRIORITY;
+ task_queue_sets_->AssignQueueToSet(queue, set);
+
+ EXPECT_EQ(set, queue->get_task_queue_set_index());
+}
+
+TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_QueueEmpty) {
+ internal::TaskQueueImpl* queue = NewTaskQueue("queue");
+ size_t set = TaskQueue::NORMAL_PRIORITY;
+ task_queue_sets_->AssignQueueToSet(queue, set);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_FALSE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+}
+
+TEST_F(TaskQueueSetsTest, OnPushQueue) {
+ internal::TaskQueueImpl* queue = NewTaskQueue("queue");
+ size_t set = TaskQueue::NORMAL_PRIORITY;
+ task_queue_sets_->AssignQueueToSet(queue, set);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_FALSE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+
+ queue->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(10));
+ task_queue_sets_->OnPushQueue(queue);
+
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_SingleTaskInSet) {
+ internal::TaskQueueImpl* queue = NewTaskQueue("queue");
+ queue->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(10));
+ size_t set = 1;
+ task_queue_sets_->AssignQueueToSet(queue, set);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet) {
+ internal::TaskQueueImpl* queue1 = NewTaskQueue("queue1");
+ internal::TaskQueueImpl* queue2 = NewTaskQueue("queue2");
+ internal::TaskQueueImpl* queue3 = NewTaskQueue("queue2");
+ queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6));
+ queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5));
+ queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4));
+ size_t set = 2;
+ task_queue_sets_->AssignQueueToSet(queue1, set);
+ task_queue_sets_->AssignQueueToSet(queue2, set);
+ task_queue_sets_->AssignQueueToSet(queue3, set);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue3, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest, OnPopQueue) {
+ internal::TaskQueueImpl* queue1 = NewTaskQueue("queue1");
+ internal::TaskQueueImpl* queue2 = NewTaskQueue("queue2");
+ internal::TaskQueueImpl* queue3 = NewTaskQueue("queue3");
+ queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6));
+ queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(3));
+ queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(1));
+ queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4));
+ size_t set = 3;
+ task_queue_sets_->AssignQueueToSet(queue1, set);
+ task_queue_sets_->AssignQueueToSet(queue2, set);
+ task_queue_sets_->AssignQueueToSet(queue3, set);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue2, selected_queue);
+
+ queue2->PopTaskFromWorkQueueForTest();
+ task_queue_sets_->OnPopQueue(queue2);
+
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue2, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest, OnPopQueue_QueueBecomesEmpty) {
+ internal::TaskQueueImpl* queue1 = NewTaskQueue("queue");
+ internal::TaskQueueImpl* queue2 = NewTaskQueue("queue");
+ internal::TaskQueueImpl* queue3 = NewTaskQueue("queue");
+ queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6));
+ queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5));
+ queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4));
+ size_t set = 4;
+ task_queue_sets_->AssignQueueToSet(queue1, set);
+ task_queue_sets_->AssignQueueToSet(queue2, set);
+ task_queue_sets_->AssignQueueToSet(queue3, set);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue3, selected_queue);
+
+ queue3->PopTaskFromWorkQueueForTest();
+ task_queue_sets_->OnPopQueue(queue3);
+
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue2, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest,
+ GetOldestQueueInSet_MultipleAgesInSetIntegerRollover) {
+ internal::TaskQueueImpl* queue1 = NewTaskQueue("queue1");
+ internal::TaskQueueImpl* queue2 = NewTaskQueue("queue2");
+ internal::TaskQueueImpl* queue3 = NewTaskQueue("queue3");
+ queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(0x7ffffff1));
+ queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(0x7ffffff0));
+ queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(-0x7ffffff1));
+ size_t set = 0;
+ task_queue_sets_->AssignQueueToSet(queue1, set);
+ task_queue_sets_->AssignQueueToSet(queue2, set);
+ task_queue_sets_->AssignQueueToSet(queue3, set);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue2, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet_RemoveQueue) {
+ internal::TaskQueueImpl* queue1 = NewTaskQueue("queue1");
+ internal::TaskQueueImpl* queue2 = NewTaskQueue("queue2");
+ internal::TaskQueueImpl* queue3 = NewTaskQueue("queue3");
+ queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6));
+ queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5));
+ queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4));
+ size_t set = 1;
+ task_queue_sets_->AssignQueueToSet(queue1, set);
+ task_queue_sets_->AssignQueueToSet(queue2, set);
+ task_queue_sets_->AssignQueueToSet(queue3, set);
+ task_queue_sets_->RemoveQueue(queue3);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue));
+ EXPECT_EQ(queue2, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest, AssignQueueToSet_Complex) {
+ internal::TaskQueueImpl* queue1 = NewTaskQueue("queue1");
+ internal::TaskQueueImpl* queue2 = NewTaskQueue("queue2");
+ internal::TaskQueueImpl* queue3 = NewTaskQueue("queue3");
+ internal::TaskQueueImpl* queue4 = NewTaskQueue("queue4");
+ queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6));
+ queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5));
+ queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4));
+ queue4->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(3));
+ size_t set1 = 1;
+ size_t set2 = 2;
+ task_queue_sets_->AssignQueueToSet(queue1, set1);
+ task_queue_sets_->AssignQueueToSet(queue2, set1);
+ task_queue_sets_->AssignQueueToSet(queue3, set2);
+ task_queue_sets_->AssignQueueToSet(queue4, set2);
+
+ internal::TaskQueueImpl* selected_queue;
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set1, &selected_queue));
+ EXPECT_EQ(queue2, selected_queue);
+
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set2, &selected_queue));
+ EXPECT_EQ(queue4, selected_queue);
+
+ task_queue_sets_->AssignQueueToSet(queue4, set1);
+
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set1, &selected_queue));
+ EXPECT_EQ(queue4, selected_queue);
+
+ EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set2, &selected_queue));
+ EXPECT_EQ(queue3, selected_queue);
+}
+
+TEST_F(TaskQueueSetsTest, IsSetEmpty_NoWork) {
+ size_t set = 0;
+ EXPECT_TRUE(task_queue_sets_->IsSetEmpty(set));
+
+ internal::TaskQueueImpl* queue = NewTaskQueue("queue");
+ task_queue_sets_->AssignQueueToSet(queue, set);
+ EXPECT_TRUE(task_queue_sets_->IsSetEmpty(set));
+}
+
+TEST_F(TaskQueueSetsTest, IsSetEmpty_Work) {
+ size_t set = 0;
+ EXPECT_TRUE(task_queue_sets_->IsSetEmpty(set));
+
+ internal::TaskQueueImpl* queue = NewTaskQueue("queue");
+ queue->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(1));
+ task_queue_sets_->AssignQueueToSet(queue, set);
+ EXPECT_FALSE(task_queue_sets_->IsSetEmpty(set));
+
+ queue->PopTaskFromWorkQueueForTest();
+ task_queue_sets_->OnPopQueue(queue);
+ EXPECT_TRUE(task_queue_sets_->IsSetEmpty(set));
+}
+
+} // namespace internal
+} // namespace scheduler
« no previous file with comments | « components/scheduler/child/task_queue_sets.cc ('k') | components/scheduler/child/test_time_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698