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

Side by Side Diff: components/scheduler/child/task_queue_sets_unittest.cc

Issue 1259583006: Reland: Explicitly track the scheduler task enqueueing order in a new field (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix the DCHECK Created 5 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/child/task_queue_sets.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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
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
OLDNEW
« no previous file with comments | « components/scheduler/child/task_queue_sets.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698