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

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

Issue 2118903002: scheduler: Move the Blink scheduler into Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 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
« no previous file with comments | « components/scheduler/base/work_queue_sets.cc ('k') | components/scheduler/child/DEPS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/scheduler/base/work_queue_sets.h"
6
7 #include <stddef.h>
8
9 #include "base/memory/ptr_util.h"
10 #include "components/scheduler/base/work_queue.h"
11 #include "testing/gmock/include/gmock/gmock.h"
12
13 namespace scheduler {
14 class TimeDomain;
15
16 namespace internal {
17
18 class WorkQueueSetsTest : public testing::Test {
19 public:
20 void SetUp() override {
21 work_queue_sets_.reset(new WorkQueueSets(kNumSets, "test"));
22 }
23
24 void TearDown() override {
25 for (std::unique_ptr<WorkQueue>& work_queue : work_queues_) {
26 if (work_queue->work_queue_sets())
27 work_queue_sets_->RemoveQueue(work_queue.get());
28 }
29 }
30
31 protected:
32 enum {
33 kNumSets = 5 // An arbitary choice.
34 };
35
36 WorkQueue* NewTaskQueue(const char* queue_name) {
37 WorkQueue* queue = new WorkQueue(nullptr, "test");
38 work_queues_.push_back(base::WrapUnique(queue));
39 work_queue_sets_->AddQueue(queue, TaskQueue::CONTROL_PRIORITY);
40 return queue;
41 }
42
43 TaskQueueImpl::Task FakeTaskWithEnqueueOrder(int enqueue_order) {
44 TaskQueueImpl::Task fake_task(FROM_HERE, base::Closure(), base::TimeTicks(),
45 0, true);
46 fake_task.set_enqueue_order(enqueue_order);
47 return fake_task;
48 }
49
50 std::vector<std::unique_ptr<WorkQueue>> work_queues_;
51 std::unique_ptr<WorkQueueSets> work_queue_sets_;
52 };
53
54 TEST_F(WorkQueueSetsTest, ChangeSetIndex) {
55 WorkQueue* work_queue = NewTaskQueue("queue");
56 size_t set = TaskQueue::NORMAL_PRIORITY;
57 work_queue_sets_->ChangeSetIndex(work_queue, set);
58
59 EXPECT_EQ(set, work_queue->work_queue_set_index());
60 }
61
62 TEST_F(WorkQueueSetsTest, GetOldestQueueInSet_QueueEmpty) {
63 WorkQueue* work_queue = NewTaskQueue("queue");
64 size_t set = TaskQueue::NORMAL_PRIORITY;
65 work_queue_sets_->ChangeSetIndex(work_queue, set);
66
67 WorkQueue* selected_work_queue;
68 EXPECT_FALSE(
69 work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
70 }
71
72 TEST_F(WorkQueueSetsTest, OnPushQueue) {
73 WorkQueue* work_queue = NewTaskQueue("queue");
74 size_t set = TaskQueue::NORMAL_PRIORITY;
75 work_queue_sets_->ChangeSetIndex(work_queue, set);
76
77 WorkQueue* selected_work_queue;
78 EXPECT_FALSE(
79 work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
80
81 work_queue->Push(FakeTaskWithEnqueueOrder(10));
82 work_queue_sets_->OnPushQueue(work_queue);
83
84 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
85 EXPECT_EQ(work_queue, selected_work_queue);
86 }
87
88 TEST_F(WorkQueueSetsTest, GetOldestQueueInSet_SingleTaskInSet) {
89 WorkQueue* work_queue = NewTaskQueue("queue");
90 work_queue->Push(FakeTaskWithEnqueueOrder(10));
91 size_t set = 1;
92 work_queue_sets_->ChangeSetIndex(work_queue, set);
93
94 WorkQueue* selected_work_queue;
95 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
96 EXPECT_EQ(work_queue, selected_work_queue);
97 }
98
99 TEST_F(WorkQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet) {
100 WorkQueue* queue1 = NewTaskQueue("queue1");
101 WorkQueue* queue2 = NewTaskQueue("queue2");
102 WorkQueue* queue3 = NewTaskQueue("queue2");
103 queue1->Push(FakeTaskWithEnqueueOrder(6));
104 queue2->Push(FakeTaskWithEnqueueOrder(5));
105 queue3->Push(FakeTaskWithEnqueueOrder(4));
106 size_t set = 2;
107 work_queue_sets_->ChangeSetIndex(queue1, set);
108 work_queue_sets_->ChangeSetIndex(queue2, set);
109 work_queue_sets_->ChangeSetIndex(queue3, set);
110
111 WorkQueue* selected_work_queue;
112 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
113 EXPECT_EQ(queue3, selected_work_queue);
114 }
115
116 TEST_F(WorkQueueSetsTest, OnPopQueue) {
117 WorkQueue* queue1 = NewTaskQueue("queue1");
118 WorkQueue* queue2 = NewTaskQueue("queue2");
119 WorkQueue* queue3 = NewTaskQueue("queue3");
120 queue1->Push(FakeTaskWithEnqueueOrder(6));
121 queue2->Push(FakeTaskWithEnqueueOrder(3));
122 queue2->Push(FakeTaskWithEnqueueOrder(1));
123 queue3->Push(FakeTaskWithEnqueueOrder(4));
124 size_t set = 3;
125 work_queue_sets_->ChangeSetIndex(queue1, set);
126 work_queue_sets_->ChangeSetIndex(queue2, set);
127 work_queue_sets_->ChangeSetIndex(queue3, set);
128
129 WorkQueue* selected_work_queue;
130 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
131 EXPECT_EQ(queue2, selected_work_queue);
132
133 queue2->PopTaskForTest();
134 work_queue_sets_->OnPopQueue(queue2);
135
136 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
137 EXPECT_EQ(queue2, selected_work_queue);
138 }
139
140 TEST_F(WorkQueueSetsTest, OnPopQueue_QueueBecomesEmpty) {
141 WorkQueue* queue1 = NewTaskQueue("queue");
142 WorkQueue* queue2 = NewTaskQueue("queue");
143 WorkQueue* queue3 = NewTaskQueue("queue");
144 queue1->Push(FakeTaskWithEnqueueOrder(6));
145 queue2->Push(FakeTaskWithEnqueueOrder(5));
146 queue3->Push(FakeTaskWithEnqueueOrder(4));
147 size_t set = 4;
148 work_queue_sets_->ChangeSetIndex(queue1, set);
149 work_queue_sets_->ChangeSetIndex(queue2, set);
150 work_queue_sets_->ChangeSetIndex(queue3, set);
151
152 WorkQueue* selected_work_queue;
153 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
154 EXPECT_EQ(queue3, selected_work_queue);
155
156 queue3->PopTaskForTest();
157 work_queue_sets_->OnPopQueue(queue3);
158
159 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
160 EXPECT_EQ(queue2, selected_work_queue);
161 }
162
163 TEST_F(WorkQueueSetsTest,
164 GetOldestQueueInSet_MultipleAgesInSetIntegerRollover) {
165 WorkQueue* queue1 = NewTaskQueue("queue1");
166 WorkQueue* queue2 = NewTaskQueue("queue2");
167 WorkQueue* queue3 = NewTaskQueue("queue3");
168 queue1->Push(FakeTaskWithEnqueueOrder(0x7ffffff1));
169 queue2->Push(FakeTaskWithEnqueueOrder(0x7ffffff0));
170 queue3->Push(FakeTaskWithEnqueueOrder(-0x7ffffff1));
171 size_t set = 1;
172 work_queue_sets_->ChangeSetIndex(queue1, set);
173 work_queue_sets_->ChangeSetIndex(queue2, set);
174 work_queue_sets_->ChangeSetIndex(queue3, set);
175
176 WorkQueue* selected_work_queue;
177 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
178 EXPECT_EQ(queue2, selected_work_queue);
179 }
180
181 TEST_F(WorkQueueSetsTest, GetOldestQueueInSet_MultipleAgesInSet_RemoveQueue) {
182 WorkQueue* queue1 = NewTaskQueue("queue1");
183 WorkQueue* queue2 = NewTaskQueue("queue2");
184 WorkQueue* queue3 = NewTaskQueue("queue3");
185 queue1->Push(FakeTaskWithEnqueueOrder(6));
186 queue2->Push(FakeTaskWithEnqueueOrder(5));
187 queue3->Push(FakeTaskWithEnqueueOrder(4));
188 size_t set = 1;
189 work_queue_sets_->ChangeSetIndex(queue1, set);
190 work_queue_sets_->ChangeSetIndex(queue2, set);
191 work_queue_sets_->ChangeSetIndex(queue3, set);
192 work_queue_sets_->RemoveQueue(queue3);
193
194 WorkQueue* selected_work_queue;
195 EXPECT_TRUE(work_queue_sets_->GetOldestQueueInSet(set, &selected_work_queue));
196 EXPECT_EQ(queue2, selected_work_queue);
197 }
198
199 TEST_F(WorkQueueSetsTest, ChangeSetIndex_Complex) {
200 WorkQueue* queue1 = NewTaskQueue("queue1");
201 WorkQueue* queue2 = NewTaskQueue("queue2");
202 WorkQueue* queue3 = NewTaskQueue("queue3");
203 WorkQueue* queue4 = NewTaskQueue("queue4");
204 queue1->Push(FakeTaskWithEnqueueOrder(6));
205 queue2->Push(FakeTaskWithEnqueueOrder(5));
206 queue3->Push(FakeTaskWithEnqueueOrder(4));
207 queue4->Push(FakeTaskWithEnqueueOrder(3));
208 size_t set1 = 1;
209 size_t set2 = 2;
210 work_queue_sets_->ChangeSetIndex(queue1, set1);
211 work_queue_sets_->ChangeSetIndex(queue2, set1);
212 work_queue_sets_->ChangeSetIndex(queue3, set2);
213 work_queue_sets_->ChangeSetIndex(queue4, set2);
214
215 WorkQueue* selected_work_queue;
216 EXPECT_TRUE(
217 work_queue_sets_->GetOldestQueueInSet(set1, &selected_work_queue));
218 EXPECT_EQ(queue2, selected_work_queue);
219
220 EXPECT_TRUE(
221 work_queue_sets_->GetOldestQueueInSet(set2, &selected_work_queue));
222 EXPECT_EQ(queue4, selected_work_queue);
223
224 work_queue_sets_->ChangeSetIndex(queue4, set1);
225
226 EXPECT_TRUE(
227 work_queue_sets_->GetOldestQueueInSet(set1, &selected_work_queue));
228 EXPECT_EQ(queue4, selected_work_queue);
229
230 EXPECT_TRUE(
231 work_queue_sets_->GetOldestQueueInSet(set2, &selected_work_queue));
232 EXPECT_EQ(queue3, selected_work_queue);
233 }
234
235 TEST_F(WorkQueueSetsTest, IsSetEmpty_NoWork) {
236 size_t set = 2;
237 EXPECT_TRUE(work_queue_sets_->IsSetEmpty(set));
238
239 WorkQueue* work_queue = NewTaskQueue("queue");
240 work_queue_sets_->ChangeSetIndex(work_queue, set);
241 EXPECT_TRUE(work_queue_sets_->IsSetEmpty(set));
242 }
243
244 TEST_F(WorkQueueSetsTest, IsSetEmpty_Work) {
245 size_t set = 2;
246 EXPECT_TRUE(work_queue_sets_->IsSetEmpty(set));
247
248 WorkQueue* work_queue = NewTaskQueue("queue");
249 work_queue->Push(FakeTaskWithEnqueueOrder(1));
250 work_queue_sets_->ChangeSetIndex(work_queue, set);
251 EXPECT_FALSE(work_queue_sets_->IsSetEmpty(set));
252
253 work_queue->PopTaskForTest();
254 work_queue_sets_->OnPopQueue(work_queue);
255 EXPECT_TRUE(work_queue_sets_->IsSetEmpty(set));
256 }
257
258 } // namespace internal
259 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/base/work_queue_sets.cc ('k') | components/scheduler/child/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698