OLD | NEW |
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_sets.h" | 5 #include "components/scheduler/child/task_queue_sets.h" |
6 | 6 |
7 #include "components/scheduler/child/task_queue_impl.h" | 7 #include "components/scheduler/child/task_queue_impl.h" |
8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
9 | 9 |
10 namespace scheduler { | 10 namespace scheduler { |
11 namespace internal { | 11 namespace internal { |
12 | 12 |
13 class TaskQueueSetsTest : public testing::Test { | 13 class TaskQueueSetsTest : public testing::Test { |
14 public: | 14 public: |
15 void SetUp() override { task_queue_sets_.reset(new TaskQueueSets(kNumSets)); } | 15 void SetUp() override { task_queue_sets_.reset(new TaskQueueSets(kNumSets)); } |
16 | 16 |
17 protected: | 17 protected: |
18 enum { | 18 enum { |
19 kNumSets = 5 // An arbitary choice. | 19 kNumSets = 5 // An arbitary choice. |
20 }; | 20 }; |
21 | 21 |
22 internal::TaskQueueImpl* NewTaskQueue() { | 22 TaskQueueImpl* NewTaskQueue() { |
23 scoped_refptr<internal::TaskQueueImpl> queue = | 23 scoped_refptr<internal::TaskQueueImpl> queue = |
24 make_scoped_refptr(new internal::TaskQueueImpl( | 24 make_scoped_refptr(new internal::TaskQueueImpl( |
25 nullptr, TaskQueue::Spec("test queue"), "test", "test")); | 25 nullptr, TaskQueue::Spec("test queue"), "test", "test")); |
26 task_queues_.push_back(queue); | 26 task_queues_.push_back(queue); |
27 return queue.get(); | 27 return queue.get(); |
28 } | 28 } |
29 | 29 |
30 base::PendingTask FakeTaskWithSequenceNum(int sequence_num) { | 30 TaskQueueImpl::Task FakeTaskWithEnqueueOrder(int enqueue_order) { |
31 base::PendingTask fake_task(FROM_HERE, base::Closure()); | 31 TaskQueueImpl::Task fake_task(FROM_HERE, base::Closure(), 0, true); |
32 fake_task.sequence_num = sequence_num; | 32 fake_task.set_enqueue_order(enqueue_order); |
33 return fake_task; | 33 return fake_task; |
34 } | 34 } |
35 | 35 |
36 std::vector<scoped_refptr<internal::TaskQueueImpl>> task_queues_; | 36 std::vector<scoped_refptr<internal::TaskQueueImpl>> task_queues_; |
37 scoped_ptr<TaskQueueSets> task_queue_sets_; | 37 scoped_ptr<TaskQueueSets> task_queue_sets_; |
38 }; | 38 }; |
39 | 39 |
40 TEST_F(TaskQueueSetsTest, AssignQueueToSet) { | 40 TEST_F(TaskQueueSetsTest, AssignQueueToSet) { |
41 internal::TaskQueueImpl* queue = NewTaskQueue(); | 41 internal::TaskQueueImpl* queue = NewTaskQueue(); |
42 size_t set = TaskQueue::NORMAL_PRIORITY; | 42 size_t set = TaskQueue::NORMAL_PRIORITY; |
(...skipping 12 matching lines...) Expand all Loading... |
55 } | 55 } |
56 | 56 |
57 TEST_F(TaskQueueSetsTest, OnPushQueue) { | 57 TEST_F(TaskQueueSetsTest, OnPushQueue) { |
58 internal::TaskQueueImpl* queue = NewTaskQueue(); | 58 internal::TaskQueueImpl* queue = NewTaskQueue(); |
59 size_t set = TaskQueue::NORMAL_PRIORITY; | 59 size_t set = TaskQueue::NORMAL_PRIORITY; |
60 task_queue_sets_->AssignQueueToSet(queue, set); | 60 task_queue_sets_->AssignQueueToSet(queue, set); |
61 | 61 |
62 internal::TaskQueueImpl* selected_queue; | 62 internal::TaskQueueImpl* selected_queue; |
63 EXPECT_FALSE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 63 EXPECT_FALSE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
64 | 64 |
65 queue->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(10)); | 65 queue->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(10)); |
66 task_queue_sets_->OnPushQueue(queue); | 66 task_queue_sets_->OnPushQueue(queue); |
67 | 67 |
68 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 68 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
69 EXPECT_EQ(queue, selected_queue); | 69 EXPECT_EQ(queue, selected_queue); |
70 } | 70 } |
71 | 71 |
72 TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_SingleTaskInSet) { | 72 TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_SingleTaskInSet) { |
73 internal::TaskQueueImpl* queue = NewTaskQueue(); | 73 internal::TaskQueueImpl* queue = NewTaskQueue(); |
74 queue->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(10)); | 74 queue->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(10)); |
75 size_t set = 1; | 75 size_t set = 1; |
76 task_queue_sets_->AssignQueueToSet(queue, set); | 76 task_queue_sets_->AssignQueueToSet(queue, set); |
77 | 77 |
78 internal::TaskQueueImpl* selected_queue; | 78 internal::TaskQueueImpl* selected_queue; |
79 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 79 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
80 EXPECT_EQ(queue, selected_queue); | 80 EXPECT_EQ(queue, selected_queue); |
81 } | 81 } |
82 | 82 |
83 TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet) { | 83 TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet) { |
84 internal::TaskQueueImpl* queue1 = NewTaskQueue(); | 84 internal::TaskQueueImpl* queue1 = NewTaskQueue(); |
85 internal::TaskQueueImpl* queue2 = NewTaskQueue(); | 85 internal::TaskQueueImpl* queue2 = NewTaskQueue(); |
86 internal::TaskQueueImpl* queue3 = NewTaskQueue(); | 86 internal::TaskQueueImpl* queue3 = NewTaskQueue(); |
87 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(6)); | 87 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6)); |
88 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(5)); | 88 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5)); |
89 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(4)); | 89 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4)); |
90 size_t set = 2; | 90 size_t set = 2; |
91 task_queue_sets_->AssignQueueToSet(queue1, set); | 91 task_queue_sets_->AssignQueueToSet(queue1, set); |
92 task_queue_sets_->AssignQueueToSet(queue2, set); | 92 task_queue_sets_->AssignQueueToSet(queue2, set); |
93 task_queue_sets_->AssignQueueToSet(queue3, set); | 93 task_queue_sets_->AssignQueueToSet(queue3, set); |
94 | 94 |
95 internal::TaskQueueImpl* selected_queue; | 95 internal::TaskQueueImpl* selected_queue; |
96 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 96 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
97 EXPECT_EQ(queue3, selected_queue); | 97 EXPECT_EQ(queue3, selected_queue); |
98 } | 98 } |
99 | 99 |
100 TEST_F(TaskQueueSetsTest, OnPopQueue) { | 100 TEST_F(TaskQueueSetsTest, OnPopQueue) { |
101 internal::TaskQueueImpl* queue1 = NewTaskQueue(); | 101 internal::TaskQueueImpl* queue1 = NewTaskQueue(); |
102 internal::TaskQueueImpl* queue2 = NewTaskQueue(); | 102 internal::TaskQueueImpl* queue2 = NewTaskQueue(); |
103 internal::TaskQueueImpl* queue3 = NewTaskQueue(); | 103 internal::TaskQueueImpl* queue3 = NewTaskQueue(); |
104 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(6)); | 104 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6)); |
105 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(3)); | 105 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(3)); |
106 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(1)); | 106 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(1)); |
107 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(4)); | 107 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4)); |
108 size_t set = 3; | 108 size_t set = 3; |
109 task_queue_sets_->AssignQueueToSet(queue1, set); | 109 task_queue_sets_->AssignQueueToSet(queue1, set); |
110 task_queue_sets_->AssignQueueToSet(queue2, set); | 110 task_queue_sets_->AssignQueueToSet(queue2, set); |
111 task_queue_sets_->AssignQueueToSet(queue3, set); | 111 task_queue_sets_->AssignQueueToSet(queue3, set); |
112 | 112 |
113 internal::TaskQueueImpl* selected_queue; | 113 internal::TaskQueueImpl* selected_queue; |
114 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 114 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
115 EXPECT_EQ(queue2, selected_queue); | 115 EXPECT_EQ(queue2, selected_queue); |
116 | 116 |
117 queue2->PopTaskFromWorkQueueForTest(); | 117 queue2->PopTaskFromWorkQueueForTest(); |
118 task_queue_sets_->OnPopQueue(queue2); | 118 task_queue_sets_->OnPopQueue(queue2); |
119 | 119 |
120 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 120 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
121 EXPECT_EQ(queue2, selected_queue); | 121 EXPECT_EQ(queue2, selected_queue); |
122 } | 122 } |
123 | 123 |
124 TEST_F(TaskQueueSetsTest, OnPopQueue_QueueBecomesEmpty) { | 124 TEST_F(TaskQueueSetsTest, OnPopQueue_QueueBecomesEmpty) { |
125 internal::TaskQueueImpl* queue1 = NewTaskQueue(); | 125 internal::TaskQueueImpl* queue1 = NewTaskQueue(); |
126 internal::TaskQueueImpl* queue2 = NewTaskQueue(); | 126 internal::TaskQueueImpl* queue2 = NewTaskQueue(); |
127 internal::TaskQueueImpl* queue3 = NewTaskQueue(); | 127 internal::TaskQueueImpl* queue3 = NewTaskQueue(); |
128 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(6)); | 128 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6)); |
129 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(5)); | 129 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5)); |
130 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(4)); | 130 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4)); |
131 size_t set = 4; | 131 size_t set = 4; |
132 task_queue_sets_->AssignQueueToSet(queue1, set); | 132 task_queue_sets_->AssignQueueToSet(queue1, set); |
133 task_queue_sets_->AssignQueueToSet(queue2, set); | 133 task_queue_sets_->AssignQueueToSet(queue2, set); |
134 task_queue_sets_->AssignQueueToSet(queue3, set); | 134 task_queue_sets_->AssignQueueToSet(queue3, set); |
135 | 135 |
136 internal::TaskQueueImpl* selected_queue; | 136 internal::TaskQueueImpl* selected_queue; |
137 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 137 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
138 EXPECT_EQ(queue3, selected_queue); | 138 EXPECT_EQ(queue3, selected_queue); |
139 | 139 |
140 queue3->PopTaskFromWorkQueueForTest(); | 140 queue3->PopTaskFromWorkQueueForTest(); |
141 task_queue_sets_->OnPopQueue(queue3); | 141 task_queue_sets_->OnPopQueue(queue3); |
142 | 142 |
143 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 143 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
144 EXPECT_EQ(queue2, selected_queue); | 144 EXPECT_EQ(queue2, selected_queue); |
145 } | 145 } |
146 | 146 |
147 TEST_F(TaskQueueSetsTest, | 147 TEST_F(TaskQueueSetsTest, |
148 GetOldestQueueInSet_MultipleAgesInSetIntegerRollover) { | 148 GetOldestQueueInSet_MultipleAgesInSetIntegerRollover) { |
149 internal::TaskQueueImpl* queue1 = NewTaskQueue(); | 149 internal::TaskQueueImpl* queue1 = NewTaskQueue(); |
150 internal::TaskQueueImpl* queue2 = NewTaskQueue(); | 150 internal::TaskQueueImpl* queue2 = NewTaskQueue(); |
151 internal::TaskQueueImpl* queue3 = NewTaskQueue(); | 151 internal::TaskQueueImpl* queue3 = NewTaskQueue(); |
152 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(0x7ffffff1)); | 152 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(0x7ffffff1)); |
153 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(0x7ffffff0)); | 153 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(0x7ffffff0)); |
154 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(-0x7ffffff1)); | 154 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(-0x7ffffff1)); |
155 size_t set = 0; | 155 size_t set = 0; |
156 task_queue_sets_->AssignQueueToSet(queue1, set); | 156 task_queue_sets_->AssignQueueToSet(queue1, set); |
157 task_queue_sets_->AssignQueueToSet(queue2, set); | 157 task_queue_sets_->AssignQueueToSet(queue2, set); |
158 task_queue_sets_->AssignQueueToSet(queue3, set); | 158 task_queue_sets_->AssignQueueToSet(queue3, set); |
159 | 159 |
160 internal::TaskQueueImpl* selected_queue; | 160 internal::TaskQueueImpl* selected_queue; |
161 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 161 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
162 EXPECT_EQ(queue2, selected_queue); | 162 EXPECT_EQ(queue2, selected_queue); |
163 } | 163 } |
164 | 164 |
165 TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet_RemoveQueue) { | 165 TEST_F(TaskQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet_RemoveQueue) { |
166 internal::TaskQueueImpl* queue1 = NewTaskQueue(); | 166 internal::TaskQueueImpl* queue1 = NewTaskQueue(); |
167 internal::TaskQueueImpl* queue2 = NewTaskQueue(); | 167 internal::TaskQueueImpl* queue2 = NewTaskQueue(); |
168 internal::TaskQueueImpl* queue3 = NewTaskQueue(); | 168 internal::TaskQueueImpl* queue3 = NewTaskQueue(); |
169 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(6)); | 169 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6)); |
170 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(5)); | 170 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5)); |
171 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(4)); | 171 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4)); |
172 size_t set = 1; | 172 size_t set = 1; |
173 task_queue_sets_->AssignQueueToSet(queue1, set); | 173 task_queue_sets_->AssignQueueToSet(queue1, set); |
174 task_queue_sets_->AssignQueueToSet(queue2, set); | 174 task_queue_sets_->AssignQueueToSet(queue2, set); |
175 task_queue_sets_->AssignQueueToSet(queue3, set); | 175 task_queue_sets_->AssignQueueToSet(queue3, set); |
176 task_queue_sets_->RemoveQueue(queue3); | 176 task_queue_sets_->RemoveQueue(queue3); |
177 | 177 |
178 internal::TaskQueueImpl* selected_queue; | 178 internal::TaskQueueImpl* selected_queue; |
179 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); | 179 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set, &selected_queue)); |
180 EXPECT_EQ(queue2, selected_queue); | 180 EXPECT_EQ(queue2, selected_queue); |
181 } | 181 } |
182 | 182 |
183 TEST_F(TaskQueueSetsTest, AssignQueueToSet_Complex) { | 183 TEST_F(TaskQueueSetsTest, AssignQueueToSet_Complex) { |
184 internal::TaskQueueImpl* queue1 = NewTaskQueue(); | 184 internal::TaskQueueImpl* queue1 = NewTaskQueue(); |
185 internal::TaskQueueImpl* queue2 = NewTaskQueue(); | 185 internal::TaskQueueImpl* queue2 = NewTaskQueue(); |
186 internal::TaskQueueImpl* queue3 = NewTaskQueue(); | 186 internal::TaskQueueImpl* queue3 = NewTaskQueue(); |
187 internal::TaskQueueImpl* queue4 = NewTaskQueue(); | 187 internal::TaskQueueImpl* queue4 = NewTaskQueue(); |
188 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(6)); | 188 queue1->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(6)); |
189 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(5)); | 189 queue2->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(5)); |
190 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(4)); | 190 queue3->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(4)); |
191 queue4->PushTaskOntoWorkQueueForTest(FakeTaskWithSequenceNum(3)); | 191 queue4->PushTaskOntoWorkQueueForTest(FakeTaskWithEnqueueOrder(3)); |
192 size_t set1 = 1; | 192 size_t set1 = 1; |
193 size_t set2 = 2; | 193 size_t set2 = 2; |
194 task_queue_sets_->AssignQueueToSet(queue1, set1); | 194 task_queue_sets_->AssignQueueToSet(queue1, set1); |
195 task_queue_sets_->AssignQueueToSet(queue2, set1); | 195 task_queue_sets_->AssignQueueToSet(queue2, set1); |
196 task_queue_sets_->AssignQueueToSet(queue3, set2); | 196 task_queue_sets_->AssignQueueToSet(queue3, set2); |
197 task_queue_sets_->AssignQueueToSet(queue4, set2); | 197 task_queue_sets_->AssignQueueToSet(queue4, set2); |
198 | 198 |
199 internal::TaskQueueImpl* selected_queue; | 199 internal::TaskQueueImpl* selected_queue; |
200 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set1, &selected_queue)); | 200 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set1, &selected_queue)); |
201 EXPECT_EQ(queue2, selected_queue); | 201 EXPECT_EQ(queue2, selected_queue); |
202 | 202 |
203 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set2, &selected_queue)); | 203 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set2, &selected_queue)); |
204 EXPECT_EQ(queue4, selected_queue); | 204 EXPECT_EQ(queue4, selected_queue); |
205 | 205 |
206 task_queue_sets_->AssignQueueToSet(queue4, set1); | 206 task_queue_sets_->AssignQueueToSet(queue4, set1); |
207 | 207 |
208 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set1, &selected_queue)); | 208 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set1, &selected_queue)); |
209 EXPECT_EQ(queue4, selected_queue); | 209 EXPECT_EQ(queue4, selected_queue); |
210 | 210 |
211 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set2, &selected_queue)); | 211 EXPECT_TRUE(task_queue_sets_->GetOldestQueueInSet(set2, &selected_queue)); |
212 EXPECT_EQ(queue3, selected_queue); | 212 EXPECT_EQ(queue3, selected_queue); |
213 } | 213 } |
214 | 214 |
215 } // namespace internal | 215 } // namespace internal |
216 } // namespace scheduler | 216 } // namespace scheduler |
OLD | NEW |