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

Side by Side Diff: cc/test/task_graph_runner_test_template.h

Issue 1489233003: TaskGraphRunner Group support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor
Patch Set: feedback Created 5 years 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
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 #ifndef CC_TEST_TASK_GRAPH_RUNNER_TEST_TEMPLATE_H_ 5 #ifndef CC_TEST_TASK_GRAPH_RUNNER_TEST_TEMPLATE_H_
6 #define CC_TEST_TASK_GRAPH_RUNNER_TEST_TEMPLATE_H_ 6 #define CC_TEST_TASK_GRAPH_RUNNER_TEST_TEMPLATE_H_
7 7
8 #include "cc/raster/task_graph_runner.h" 8 #include "cc/raster/task_graph_runner.h"
9 9
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/synchronization/lock.h" 14 #include "base/synchronization/lock.h"
15 #include "base/threading/simple_thread.h" 15 #include "base/threading/simple_thread.h"
16 #include "cc/raster/task_category.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 18
18 namespace cc { 19 namespace cc {
19 20
20 class TaskGraphRunnerTestBase { 21 class TaskGraphRunnerTestBase {
21 public: 22 public:
22 struct TaskInfo { 23 struct TaskInfo {
23 TaskInfo(int namespace_index, 24 TaskInfo(int namespace_index,
24 unsigned id, 25 unsigned id,
25 unsigned dependent_id, 26 unsigned dependent_id,
26 unsigned dependent_count, 27 unsigned dependent_count,
28 unsigned category,
27 unsigned priority) 29 unsigned priority)
28 : namespace_index(namespace_index), 30 : namespace_index(namespace_index),
29 id(id), 31 id(id),
30 dependent_id(dependent_id), 32 dependent_id(dependent_id),
31 dependent_count(dependent_count), 33 dependent_count(dependent_count),
34 category(category),
32 priority(priority) {} 35 priority(priority) {}
33 36
34 int namespace_index; 37 int namespace_index;
35 unsigned id; 38 unsigned id;
36 unsigned dependent_id; 39 unsigned dependent_id;
37 unsigned dependent_count; 40 unsigned dependent_count;
41 unsigned category;
38 unsigned priority; 42 unsigned priority;
39 }; 43 };
40 44
41 TaskGraphRunnerTestBase() {} 45 TaskGraphRunnerTestBase() {}
42 46
43 void SetTaskGraphRunner(TaskGraphRunner* task_graph_runner); 47 void SetTaskGraphRunner(TaskGraphRunner* task_graph_runner);
44 void ResetIds(int namespace_index); 48 void ResetIds(int namespace_index);
45 void RunAllTasks(int namespace_index); 49 void RunAllTasks(int namespace_index);
46 void RunTaskOnWorkerThread(int namespace_index, unsigned id); 50 void RunTaskOnWorkerThread(int namespace_index, unsigned id);
47 void OnTaskCompleted(int namespace_index, unsigned id); 51 void OnTaskCompleted(int namespace_index, unsigned id);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 TYPED_TEST_CASE_P(TaskGraphRunnerTest); 123 TYPED_TEST_CASE_P(TaskGraphRunnerTest);
120 124
121 TYPED_TEST_P(TaskGraphRunnerTest, Basic) { 125 TYPED_TEST_P(TaskGraphRunnerTest, Basic) {
122 const int kNamespaceCount = TaskGraphRunnerTestBase::kNamespaceCount; 126 const int kNamespaceCount = TaskGraphRunnerTestBase::kNamespaceCount;
123 using TaskInfo = TaskGraphRunnerTestBase::TaskInfo; 127 using TaskInfo = TaskGraphRunnerTestBase::TaskInfo;
124 128
125 for (int i = 0; i < kNamespaceCount; ++i) { 129 for (int i = 0; i < kNamespaceCount; ++i) {
126 EXPECT_EQ(0u, this->run_task_ids(i).size()); 130 EXPECT_EQ(0u, this->run_task_ids(i).size());
127 EXPECT_EQ(0u, this->on_task_completed_ids(i).size()); 131 EXPECT_EQ(0u, this->on_task_completed_ids(i).size());
128 132
129 this->ScheduleTasks(i, 133 this->ScheduleTasks(
130 std::vector<TaskInfo>(1, TaskInfo(i, 0u, 0u, 0u, 0u))); 134 i, std::vector<TaskInfo>(
135 1, TaskInfo(i, 0u, 0u, 0u, TASK_CATEGORY_HIGH_PRIORITY, 0u)));
131 } 136 }
132 137
133 for (int i = 0; i < kNamespaceCount; ++i) { 138 for (int i = 0; i < kNamespaceCount; ++i) {
134 this->RunAllTasks(i); 139 this->RunAllTasks(i);
135 140
136 EXPECT_EQ(1u, this->run_task_ids(i).size()); 141 EXPECT_EQ(1u, this->run_task_ids(i).size());
137 EXPECT_EQ(1u, this->on_task_completed_ids(i).size()); 142 EXPECT_EQ(1u, this->on_task_completed_ids(i).size());
138 } 143 }
139 144
140 for (int i = 0; i < kNamespaceCount; ++i) 145 for (int i = 0; i < kNamespaceCount; ++i)
141 this->ScheduleTasks(i, 146 this->ScheduleTasks(
142 std::vector<TaskInfo>(1, TaskInfo(i, 0u, 0u, 1u, 0u))); 147 i, std::vector<TaskInfo>(
148 1, TaskInfo(i, 0u, 0u, 1u, TASK_CATEGORY_HIGH_PRIORITY, 0u)));
143 149
144 for (int i = 0; i < kNamespaceCount; ++i) { 150 for (int i = 0; i < kNamespaceCount; ++i) {
145 this->RunAllTasks(i); 151 this->RunAllTasks(i);
146 152
147 EXPECT_EQ(3u, this->run_task_ids(i).size()); 153 EXPECT_EQ(3u, this->run_task_ids(i).size());
148 EXPECT_EQ(2u, this->on_task_completed_ids(i).size()); 154 EXPECT_EQ(2u, this->on_task_completed_ids(i).size());
149 } 155 }
150 156
151 for (int i = 0; i < kNamespaceCount; ++i) 157 for (int i = 0; i < kNamespaceCount; ++i)
152 this->ScheduleTasks(i, 158 this->ScheduleTasks(
153 std::vector<TaskInfo>(1, TaskInfo(i, 0u, 0u, 2u, 0u))); 159 i, std::vector<TaskInfo>(
160 1, TaskInfo(i, 0u, 0u, 2u, TASK_CATEGORY_HIGH_PRIORITY, 0u)));
154 161
155 for (int i = 0; i < kNamespaceCount; ++i) { 162 for (int i = 0; i < kNamespaceCount; ++i) {
156 this->RunAllTasks(i); 163 this->RunAllTasks(i);
157 164
158 EXPECT_EQ(6u, this->run_task_ids(i).size()); 165 EXPECT_EQ(6u, this->run_task_ids(i).size());
159 EXPECT_EQ(3u, this->on_task_completed_ids(i).size()); 166 EXPECT_EQ(3u, this->on_task_completed_ids(i).size());
160 } 167 }
161 } 168 }
162 169
163 TYPED_TEST_P(TaskGraphRunnerTest, Dependencies) { 170 TYPED_TEST_P(TaskGraphRunnerTest, Dependencies) {
164 const int kNamespaceCount = TaskGraphRunnerTestBase::kNamespaceCount; 171 const int kNamespaceCount = TaskGraphRunnerTestBase::kNamespaceCount;
165 using TaskInfo = TaskGraphRunnerTestBase::TaskInfo; 172 using TaskInfo = TaskGraphRunnerTestBase::TaskInfo;
166 173
167 for (int i = 0; i < kNamespaceCount; ++i) { 174 for (int i = 0; i < kNamespaceCount; ++i) {
168 this->ScheduleTasks(i, std::vector<TaskInfo>(1, TaskInfo(i, 0u, 1u, 175 this->ScheduleTasks(
169 1u, // 1 dependent 176 i, std::vector<TaskInfo>(1, TaskInfo(i, 0u, 1u,
170 0u))); 177 1u, // 1 dependent
178 TASK_CATEGORY_HIGH_PRIORITY, 0u)));
171 } 179 }
172 180
173 for (int i = 0; i < kNamespaceCount; ++i) { 181 for (int i = 0; i < kNamespaceCount; ++i) {
174 this->RunAllTasks(i); 182 this->RunAllTasks(i);
175 183
176 // Check if task ran before dependent. 184 // Check if task ran before dependent.
177 ASSERT_EQ(2u, this->run_task_ids(i).size()); 185 ASSERT_EQ(2u, this->run_task_ids(i).size());
178 EXPECT_EQ(0u, this->run_task_ids(i)[0]); 186 EXPECT_EQ(0u, this->run_task_ids(i)[0]);
179 EXPECT_EQ(1u, this->run_task_ids(i)[1]); 187 EXPECT_EQ(1u, this->run_task_ids(i)[1]);
180 ASSERT_EQ(1u, this->on_task_completed_ids(i).size()); 188 ASSERT_EQ(1u, this->on_task_completed_ids(i).size());
181 EXPECT_EQ(0u, this->on_task_completed_ids(i)[0]); 189 EXPECT_EQ(0u, this->on_task_completed_ids(i)[0]);
182 } 190 }
183 191
184 for (int i = 0; i < kNamespaceCount; ++i) { 192 for (int i = 0; i < kNamespaceCount; ++i) {
185 this->ScheduleTasks(i, 193 this->ScheduleTasks(
186 std::vector<TaskInfo>(1, TaskInfo(i, 2u, 3u, 194 i, std::vector<TaskInfo>(1, TaskInfo(i, 2u, 3u,
187 2u, // 2 dependents 195 2u, // 2 dependents
188 0u))); 196 TASK_CATEGORY_HIGH_PRIORITY, 0u)));
189 } 197 }
190 198
191 for (int i = 0; i < kNamespaceCount; ++i) { 199 for (int i = 0; i < kNamespaceCount; ++i) {
192 this->RunAllTasks(i); 200 this->RunAllTasks(i);
193 201
194 // Task should only run once. 202 // Task should only run once.
195 ASSERT_EQ(5u, this->run_task_ids(i).size()); 203 ASSERT_EQ(5u, this->run_task_ids(i).size());
196 EXPECT_EQ(2u, this->run_task_ids(i)[2]); 204 EXPECT_EQ(2u, this->run_task_ids(i)[2]);
197 EXPECT_EQ(3u, this->run_task_ids(i)[3]); 205 EXPECT_EQ(3u, this->run_task_ids(i)[3]);
198 EXPECT_EQ(3u, this->run_task_ids(i)[4]); 206 EXPECT_EQ(3u, this->run_task_ids(i)[4]);
199 ASSERT_EQ(2u, this->on_task_completed_ids(i).size()); 207 ASSERT_EQ(2u, this->on_task_completed_ids(i).size());
200 EXPECT_EQ(2u, this->on_task_completed_ids(i)[1]); 208 EXPECT_EQ(2u, this->on_task_completed_ids(i)[1]);
201 } 209 }
202 } 210 }
203 211
204 REGISTER_TYPED_TEST_CASE_P(TaskGraphRunnerTest, Basic, Dependencies); 212 TYPED_TEST_P(TaskGraphRunnerTest, Categorys) {
213 const int kNamespaceCount = TaskGraphRunnerTestBase::kNamespaceCount;
214 using TaskInfo = TaskGraphRunnerTestBase::TaskInfo;
215
216 for (int i = 0; i < kNamespaceCount; ++i) {
217 EXPECT_EQ(0u, this->run_task_ids(i).size());
218 EXPECT_EQ(0u, this->on_task_completed_ids(i).size());
219 std::vector<TaskInfo> tasks;
220 for (unsigned j = 0; j < kNumTaskCategories; ++j) {
221 tasks.emplace_back(i, 0u, 0u, 0u, j, 0u);
222 }
223 this->ScheduleTasks(i, tasks);
224 }
225
226 for (int i = 0; i < kNamespaceCount; ++i) {
227 this->RunAllTasks(i);
228
229 EXPECT_EQ(kNumTaskCategories, this->run_task_ids(i).size());
230 EXPECT_EQ(kNumTaskCategories, this->on_task_completed_ids(i).size());
231 }
232
233 for (int i = 0; i < kNamespaceCount; ++i) {
234 std::vector<TaskInfo> tasks;
235 for (unsigned j = 0; j < kNumTaskCategories; ++j) {
236 tasks.emplace_back(i, 0u, 0u, 1u, j, 0u);
237 }
238 this->ScheduleTasks(i, tasks);
239 }
240
241 for (int i = 0; i < kNamespaceCount; ++i) {
242 this->RunAllTasks(i);
243
244 EXPECT_EQ(kNumTaskCategories * 3u, this->run_task_ids(i).size());
245 EXPECT_EQ(kNumTaskCategories * 2u, this->on_task_completed_ids(i).size());
246 }
247
248 for (int i = 0; i < kNamespaceCount; ++i) {
249 std::vector<TaskInfo> tasks;
250 for (unsigned j = 0; j < kNumTaskCategories; ++j) {
251 tasks.emplace_back(i, 0u, 0u, 2u, j, 0u);
252 }
253 this->ScheduleTasks(i, tasks);
254 }
255
256 for (int i = 0; i < kNamespaceCount; ++i) {
257 this->RunAllTasks(i);
258
259 EXPECT_EQ(kNumTaskCategories * 6u, this->run_task_ids(i).size());
260 EXPECT_EQ(kNumTaskCategories * 3u, this->on_task_completed_ids(i).size());
261 }
262 }
263
264 REGISTER_TYPED_TEST_CASE_P(TaskGraphRunnerTest, Basic, Dependencies, Categorys);
205 265
206 template <typename TaskRunnerTestDelegate> 266 template <typename TaskRunnerTestDelegate>
207 using SingleThreadTaskGraphRunnerTest = 267 using SingleThreadTaskGraphRunnerTest =
208 TaskGraphRunnerTest<TaskRunnerTestDelegate>; 268 TaskGraphRunnerTest<TaskRunnerTestDelegate>;
209 269
210 TYPED_TEST_CASE_P(SingleThreadTaskGraphRunnerTest); 270 TYPED_TEST_CASE_P(SingleThreadTaskGraphRunnerTest);
211 271
212 TYPED_TEST_P(SingleThreadTaskGraphRunnerTest, Priority) { 272 TYPED_TEST_P(SingleThreadTaskGraphRunnerTest, Priority) {
213 const int kNamespaceCount = TaskGraphRunnerTestBase::kNamespaceCount; 273 const int kNamespaceCount = TaskGraphRunnerTestBase::kNamespaceCount;
214 using TaskInfo = TaskGraphRunnerTestBase::TaskInfo; 274 using TaskInfo = TaskGraphRunnerTestBase::TaskInfo;
215 275
216 for (int i = 0; i < kNamespaceCount; ++i) { 276 for (int i = 0; i < kNamespaceCount; ++i) {
217 TaskInfo tasks[] = { 277 TaskInfo tasks[] = {
218 TaskInfo(i, 0u, 2u, 1u, 1u), // Priority 1 278 TaskInfo(i, 0u, 2u, 1u, 0u, 1u), // Priority 1
219 TaskInfo(i, 1u, 3u, 1u, 0u) // Priority 0 279 TaskInfo(i, 1u, 3u, 1u, 0u, 0u) // Priority 0
220 }; 280 };
221 this->ScheduleTasks(i, 281 this->ScheduleTasks(i,
222 std::vector<TaskInfo>(tasks, tasks + arraysize(tasks))); 282 std::vector<TaskInfo>(tasks, tasks + arraysize(tasks)));
223 } 283 }
224 284
225 for (int i = 0; i < kNamespaceCount; ++i) { 285 for (int i = 0; i < kNamespaceCount; ++i) {
226 this->RunAllTasks(i); 286 this->RunAllTasks(i);
227 287
228 // Check if tasks ran in order of priority. 288 // Check if tasks ran in order of priority.
229 ASSERT_EQ(4u, this->run_task_ids(i).size()); 289 ASSERT_EQ(4u, this->run_task_ids(i).size());
230 EXPECT_EQ(1u, this->run_task_ids(i)[0]); 290 EXPECT_EQ(1u, this->run_task_ids(i)[0]);
231 EXPECT_EQ(3u, this->run_task_ids(i)[1]); 291 EXPECT_EQ(3u, this->run_task_ids(i)[1]);
232 EXPECT_EQ(0u, this->run_task_ids(i)[2]); 292 EXPECT_EQ(0u, this->run_task_ids(i)[2]);
233 EXPECT_EQ(2u, this->run_task_ids(i)[3]); 293 EXPECT_EQ(2u, this->run_task_ids(i)[3]);
234 ASSERT_EQ(2u, this->on_task_completed_ids(i).size()); 294 ASSERT_EQ(2u, this->on_task_completed_ids(i).size());
235 EXPECT_EQ(1u, this->on_task_completed_ids(i)[0]); 295 EXPECT_EQ(1u, this->on_task_completed_ids(i)[0]);
236 EXPECT_EQ(0u, this->on_task_completed_ids(i)[1]); 296 EXPECT_EQ(0u, this->on_task_completed_ids(i)[1]);
237 } 297 }
238 } 298 }
239 299
240 REGISTER_TYPED_TEST_CASE_P(SingleThreadTaskGraphRunnerTest, Priority); 300 REGISTER_TYPED_TEST_CASE_P(SingleThreadTaskGraphRunnerTest, Priority);
241 301
242 } // namespace cc 302 } // namespace cc
243 303
244 #endif // CC_TEST_TASK_GRAPH_RUNNER_TEST_TEMPLATE_H_ 304 #endif // CC_TEST_TASK_GRAPH_RUNNER_TEST_TEMPLATE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698