OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/resources/worker_pool.h" | 5 #include "cc/resources/worker_pool.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "cc/base/completion_event.h" | 9 #include "cc/base/completion_event.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 | 11 |
12 namespace cc { | 12 namespace cc { |
13 | 13 |
14 namespace { | 14 namespace { |
15 | 15 |
| 16 const int kWorkerPoolCount = 3; |
| 17 |
16 class FakeWorkerPoolTaskImpl : public internal::WorkerPoolTask { | 18 class FakeWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
17 public: | 19 public: |
18 FakeWorkerPoolTaskImpl(const base::Closure& callback, | 20 FakeWorkerPoolTaskImpl(const base::Closure& callback, |
19 const base::Closure& reply) | 21 const base::Closure& reply) |
20 : callback_(callback), | 22 : callback_(callback), |
21 reply_(reply) { | 23 reply_(reply) { |
22 } | 24 } |
23 | 25 |
24 // Overridden from internal::WorkerPoolTask: | 26 // Overridden from internal::WorkerPoolTask: |
25 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { | 27 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { |
(...skipping 27 matching lines...) Expand all Loading... |
53 dependent_count(dependent_count), | 55 dependent_count(dependent_count), |
54 priority(priority) { | 56 priority(priority) { |
55 } | 57 } |
56 | 58 |
57 base::Closure callback; | 59 base::Closure callback; |
58 base::Closure reply; | 60 base::Closure reply; |
59 base::Closure dependent; | 61 base::Closure dependent; |
60 unsigned dependent_count; | 62 unsigned dependent_count; |
61 unsigned priority; | 63 unsigned priority; |
62 }; | 64 }; |
63 FakeWorkerPool() : WorkerPool(1, "test") {} | 65 FakeWorkerPool() : WorkerPool() {} |
64 virtual ~FakeWorkerPool() {} | 66 virtual ~FakeWorkerPool() {} |
65 | 67 |
66 static scoped_ptr<FakeWorkerPool> Create() { | 68 static scoped_ptr<FakeWorkerPool> Create() { |
67 return make_scoped_ptr(new FakeWorkerPool); | 69 return make_scoped_ptr(new FakeWorkerPool); |
68 } | 70 } |
69 | 71 |
70 void ScheduleTasks(const std::vector<Task>& tasks) { | 72 void ScheduleTasks(const std::vector<Task>& tasks) { |
71 TaskVector new_tasks; | 73 TaskVector new_tasks; |
72 TaskVector new_dependents; | 74 TaskVector new_dependents; |
73 TaskGraph new_graph; | 75 TaskGraph new_graph; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 DISALLOW_COPY_AND_ASSIGN(FakeWorkerPool); | 143 DISALLOW_COPY_AND_ASSIGN(FakeWorkerPool); |
142 }; | 144 }; |
143 | 145 |
144 class WorkerPoolTest : public testing::Test { | 146 class WorkerPoolTest : public testing::Test { |
145 public: | 147 public: |
146 WorkerPoolTest() {} | 148 WorkerPoolTest() {} |
147 virtual ~WorkerPoolTest() {} | 149 virtual ~WorkerPoolTest() {} |
148 | 150 |
149 // Overridden from testing::Test: | 151 // Overridden from testing::Test: |
150 virtual void SetUp() OVERRIDE { | 152 virtual void SetUp() OVERRIDE { |
151 worker_pool_ = FakeWorkerPool::Create(); | 153 for (int i = 0; i < kWorkerPoolCount; ++i) |
| 154 worker_pools_[i] = FakeWorkerPool::Create(); |
152 } | 155 } |
153 virtual void TearDown() OVERRIDE { | 156 virtual void TearDown() OVERRIDE { |
154 worker_pool_->Shutdown(); | 157 for (int i = 0; i < kWorkerPoolCount; ++i) { |
155 worker_pool_->CheckForCompletedTasks(); | 158 worker_pools_[i]->Shutdown(); |
156 } | 159 worker_pools_[i]->CheckForCompletedTasks(); |
157 | 160 } |
158 void ResetIds() { | 161 } |
159 run_task_ids_.clear(); | 162 |
160 on_task_completed_ids_.clear(); | 163 void ResetAllIdsforWorkerPool(int worker_pool_index) { |
161 } | 164 run_task_ids_[worker_pool_index].clear(); |
162 | 165 on_task_completed_ids_[worker_pool_index].clear(); |
163 void RunAllTasks() { | 166 } |
164 worker_pool_->WaitForTasksToComplete(); | 167 |
165 worker_pool_->CheckForCompletedTasks(); | 168 void RunAllTasksforWorkerPool(int worker_pool_index) { |
166 } | 169 worker_pools_[worker_pool_index]->WaitForTasksToComplete(); |
167 | 170 worker_pools_[worker_pool_index]->CheckForCompletedTasks(); |
168 FakeWorkerPool* worker_pool() { | 171 } |
169 return worker_pool_.get(); | 172 |
170 } | 173 FakeWorkerPool* worker_pool(int worker_pool_index) { |
171 | 174 return worker_pools_[worker_pool_index].get(); |
172 void RunTask(unsigned id) { | 175 } |
173 run_task_ids_.push_back(id); | 176 |
174 } | 177 void RunTask(int worker_pool_index, unsigned id) { |
175 | 178 run_task_ids_[worker_pool_index].push_back(id); |
176 void OnTaskCompleted(unsigned id) { | 179 } |
177 on_task_completed_ids_.push_back(id); | 180 |
178 } | 181 void OnTaskCompleted(int worker_pool_index, unsigned id) { |
179 | 182 on_task_completed_ids_[worker_pool_index].push_back(id); |
180 const std::vector<unsigned>& run_task_ids() { | 183 } |
181 return run_task_ids_; | 184 |
182 } | 185 const std::vector<unsigned>& run_task_ids(int worker_pool_index) { |
183 | 186 return run_task_ids_[worker_pool_index]; |
184 const std::vector<unsigned>& on_task_completed_ids() { | 187 } |
185 return on_task_completed_ids_; | 188 |
| 189 const std::vector<unsigned>& on_task_completed_ids(int worker_pool_index) { |
| 190 return on_task_completed_ids_[worker_pool_index]; |
186 } | 191 } |
187 | 192 |
188 private: | 193 private: |
189 scoped_ptr<FakeWorkerPool> worker_pool_; | 194 scoped_ptr<FakeWorkerPool> worker_pools_[kWorkerPoolCount]; |
190 std::vector<unsigned> run_task_ids_; | 195 std::vector<unsigned> run_task_ids_[kWorkerPoolCount]; |
191 std::vector<unsigned> on_task_completed_ids_; | 196 std::vector<unsigned> on_task_completed_ids_[kWorkerPoolCount]; |
192 }; | 197 }; |
193 | 198 |
194 TEST_F(WorkerPoolTest, Basic) { | 199 TEST_F(WorkerPoolTest, Basic) { |
195 EXPECT_EQ(0u, run_task_ids().size()); | 200 for (int i = 0; i < kWorkerPoolCount; ++i) { |
196 EXPECT_EQ(0u, on_task_completed_ids().size()); | 201 EXPECT_EQ(0u, run_task_ids(i).size()); |
197 | 202 EXPECT_EQ(0u, on_task_completed_ids(i).size()); |
198 worker_pool()->ScheduleTasks( | 203 |
199 std::vector<FakeWorkerPool::Task>( | 204 worker_pool(i)->ScheduleTasks( |
200 1, | 205 std::vector<FakeWorkerPool::Task>( |
201 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 206 1, |
202 base::Unretained(this), | 207 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
203 0u), | 208 base::Unretained(this), |
204 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 209 i, |
205 base::Unretained(this), | 210 0u), |
206 0u), | 211 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
207 base::Closure(), | 212 base::Unretained(this), |
208 1u, | 213 i, |
209 0u))); | 214 0u), |
210 RunAllTasks(); | 215 base::Closure(), |
211 | 216 1u, |
212 EXPECT_EQ(1u, run_task_ids().size()); | 217 0u))); |
213 EXPECT_EQ(1u, on_task_completed_ids().size()); | 218 } |
214 | 219 |
215 worker_pool()->ScheduleTasks( | 220 for (int i = 0; i < kWorkerPoolCount; ++i) { |
216 std::vector<FakeWorkerPool::Task>( | 221 RunAllTasksforWorkerPool(i); |
217 1, | 222 |
218 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 223 EXPECT_EQ(1u, run_task_ids(i).size()); |
219 base::Unretained(this), | 224 EXPECT_EQ(1u, on_task_completed_ids(i).size()); |
220 0u), | 225 } |
221 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 226 |
222 base::Unretained(this), | 227 for (int i = 0; i < kWorkerPoolCount; ++i) { |
223 0u), | 228 worker_pool(i)->ScheduleTasks( |
224 base::Bind(&WorkerPoolTest::RunTask, | 229 std::vector<FakeWorkerPool::Task>( |
225 base::Unretained(this), | 230 1, |
226 0u), | 231 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
227 1u, | 232 base::Unretained(this), |
228 0u))); | 233 i, |
229 RunAllTasks(); | 234 0u), |
230 | 235 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
231 EXPECT_EQ(3u, run_task_ids().size()); | 236 base::Unretained(this), |
232 EXPECT_EQ(2u, on_task_completed_ids().size()); | 237 i, |
233 | 238 0u), |
234 worker_pool()->ScheduleTasks( | 239 base::Bind(&WorkerPoolTest::RunTask, |
235 std::vector<FakeWorkerPool::Task>( | 240 base::Unretained(this), |
236 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 241 i, |
237 base::Unretained(this), | 242 0u), |
238 0u), | 243 1u, |
239 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 244 0u))); |
240 base::Unretained(this), | 245 } |
241 0u), | 246 |
242 base::Bind(&WorkerPoolTest::RunTask, | 247 for (int i = 0; i < kWorkerPoolCount; ++i) { |
243 base::Unretained(this), | 248 RunAllTasksforWorkerPool(i); |
244 0u), | 249 |
245 2u, | 250 EXPECT_EQ(3u, run_task_ids(i).size()); |
246 0u))); | 251 EXPECT_EQ(2u, on_task_completed_ids(i).size()); |
247 RunAllTasks(); | 252 } |
248 | 253 |
249 EXPECT_EQ(6u, run_task_ids().size()); | 254 for (int i = 0; i < kWorkerPoolCount; ++i) { |
250 EXPECT_EQ(3u, on_task_completed_ids().size()); | 255 worker_pool(i)->ScheduleTasks( |
| 256 std::vector<FakeWorkerPool::Task>( |
| 257 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 258 base::Unretained(this), |
| 259 i, |
| 260 0u), |
| 261 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 262 base::Unretained(this), |
| 263 i, |
| 264 0u), |
| 265 base::Bind(&WorkerPoolTest::RunTask, |
| 266 base::Unretained(this), |
| 267 i, |
| 268 0u), |
| 269 2u, |
| 270 0u))); |
| 271 } |
| 272 |
| 273 for (int i = 0; i < kWorkerPoolCount; ++i) { |
| 274 RunAllTasksforWorkerPool(i); |
| 275 |
| 276 EXPECT_EQ(6u, run_task_ids(i).size()); |
| 277 EXPECT_EQ(3u, on_task_completed_ids(i).size()); |
| 278 } |
251 } | 279 } |
252 | 280 |
253 TEST_F(WorkerPoolTest, Dependencies) { | 281 TEST_F(WorkerPoolTest, Dependencies) { |
254 worker_pool()->ScheduleTasks( | 282 for (int i = 0; i < kWorkerPoolCount; ++i) { |
255 std::vector<FakeWorkerPool::Task>( | 283 worker_pool(i)->ScheduleTasks( |
256 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 284 std::vector<FakeWorkerPool::Task>( |
257 base::Unretained(this), | 285 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
258 0u), | 286 base::Unretained(this), |
259 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 287 i, |
260 base::Unretained(this), | 288 0u), |
261 0u), | 289 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
262 base::Bind(&WorkerPoolTest::RunTask, | 290 base::Unretained(this), |
263 base::Unretained(this), | 291 i, |
264 1u), | 292 0u), |
265 1u, | 293 base::Bind(&WorkerPoolTest::RunTask, |
266 0u))); | 294 base::Unretained(this), |
267 RunAllTasks(); | 295 i, |
268 | 296 1u), |
269 // Check if task ran before dependent. | 297 1u, |
270 ASSERT_EQ(2u, run_task_ids().size()); | 298 0u))); |
271 EXPECT_EQ(0u, run_task_ids()[0]); | 299 } |
272 EXPECT_EQ(1u, run_task_ids()[1]); | 300 |
273 ASSERT_EQ(1u, on_task_completed_ids().size()); | 301 for (int i = 0; i < kWorkerPoolCount; ++i) { |
274 EXPECT_EQ(0u, on_task_completed_ids()[0]); | 302 RunAllTasksforWorkerPool(i); |
275 | 303 |
276 worker_pool()->ScheduleTasks( | 304 // Check if task ran before dependent. |
277 std::vector<FakeWorkerPool::Task>( | 305 ASSERT_EQ(2u, run_task_ids(i).size()); |
278 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 306 EXPECT_EQ(0u, run_task_ids(i)[0]); |
279 base::Unretained(this), | 307 EXPECT_EQ(1u, run_task_ids(i)[1]); |
280 2u), | 308 ASSERT_EQ(1u, on_task_completed_ids(i).size()); |
281 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 309 EXPECT_EQ(0u, on_task_completed_ids(i)[0]); |
282 base::Unretained(this), | 310 } |
283 2u), | 311 |
284 base::Bind(&WorkerPoolTest::RunTask, | 312 for (int i = 0; i < kWorkerPoolCount; ++i) { |
285 base::Unretained(this), | 313 worker_pool(i)->ScheduleTasks( |
286 3u), | 314 std::vector<FakeWorkerPool::Task>( |
287 2u, | 315 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
288 0u))); | 316 base::Unretained(this), |
289 RunAllTasks(); | 317 i, |
290 | 318 2u), |
291 // Task should only run once. | 319 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
292 ASSERT_EQ(5u, run_task_ids().size()); | 320 base::Unretained(this), |
293 EXPECT_EQ(2u, run_task_ids()[2]); | 321 i, |
294 EXPECT_EQ(3u, run_task_ids()[3]); | 322 2u), |
295 EXPECT_EQ(3u, run_task_ids()[4]); | 323 base::Bind(&WorkerPoolTest::RunTask, |
296 ASSERT_EQ(2u, on_task_completed_ids().size()); | 324 base::Unretained(this), |
297 EXPECT_EQ(2u, on_task_completed_ids()[1]); | 325 i, |
| 326 3u), |
| 327 2u, |
| 328 0u))); |
| 329 } |
| 330 |
| 331 for (int i = 0; i < kWorkerPoolCount; ++i) { |
| 332 RunAllTasksforWorkerPool(i); |
| 333 |
| 334 // Task should only run once. |
| 335 ASSERT_EQ(5u, run_task_ids(i).size()); |
| 336 EXPECT_EQ(2u, run_task_ids(i)[2]); |
| 337 EXPECT_EQ(3u, run_task_ids(i)[3]); |
| 338 EXPECT_EQ(3u, run_task_ids(i)[4]); |
| 339 ASSERT_EQ(2u, on_task_completed_ids(i).size()); |
| 340 EXPECT_EQ(2u, on_task_completed_ids(i)[1]); |
| 341 } |
298 } | 342 } |
299 | 343 |
300 TEST_F(WorkerPoolTest, Priority) { | 344 TEST_F(WorkerPoolTest, Priority) { |
301 { | 345 for (int i = 0; i < kWorkerPoolCount; ++i) { |
302 FakeWorkerPool::Task tasks[] = { | 346 FakeWorkerPool::Task tasks[] = { |
303 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 347 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
304 base::Unretained(this), | 348 base::Unretained(this), |
| 349 i, |
305 0u), | 350 0u), |
306 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 351 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
307 base::Unretained(this), | 352 base::Unretained(this), |
| 353 i, |
308 0u), | 354 0u), |
309 base::Bind(&WorkerPoolTest::RunTask, | 355 base::Bind(&WorkerPoolTest::RunTask, |
310 base::Unretained(this), | 356 base::Unretained(this), |
| 357 i, |
311 2u), | 358 2u), |
312 1u, | 359 1u, |
313 1u), // Priority 1 | 360 1u), // Priority 1 |
314 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 361 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
315 base::Unretained(this), | 362 base::Unretained(this), |
| 363 i, |
316 1u), | 364 1u), |
317 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 365 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
318 base::Unretained(this), | 366 base::Unretained(this), |
| 367 i, |
319 1u), | 368 1u), |
320 base::Bind(&WorkerPoolTest::RunTask, | 369 base::Bind(&WorkerPoolTest::RunTask, |
321 base::Unretained(this), | 370 base::Unretained(this), |
| 371 i, |
322 3u), | 372 3u), |
323 1u, | 373 1u, |
324 0u) // Priority 0 | 374 0u) // Priority 0 |
325 }; | 375 }; |
326 worker_pool()->ScheduleTasks( | 376 worker_pool(i)->ScheduleTasks( |
327 std::vector<FakeWorkerPool::Task>(tasks, tasks + arraysize(tasks))); | 377 std::vector<FakeWorkerPool::Task>(tasks, tasks + arraysize(tasks))); |
328 } | 378 } |
329 RunAllTasks(); | 379 |
330 | 380 for (int i = 0; i < kWorkerPoolCount; ++i) { |
331 // Check if tasks ran in order of priority. | 381 RunAllTasksforWorkerPool(i); |
332 ASSERT_EQ(4u, run_task_ids().size()); | 382 |
333 EXPECT_EQ(1u, run_task_ids()[0]); | 383 // Check if tasks ran in order of priority. |
334 EXPECT_EQ(3u, run_task_ids()[1]); | 384 ASSERT_EQ(4u, run_task_ids(i).size()); |
335 EXPECT_EQ(0u, run_task_ids()[2]); | 385 EXPECT_EQ(1u, run_task_ids(i)[0]); |
336 EXPECT_EQ(2u, run_task_ids()[3]); | 386 EXPECT_EQ(3u, run_task_ids(i)[1]); |
337 ASSERT_EQ(2u, on_task_completed_ids().size()); | 387 EXPECT_EQ(0u, run_task_ids(i)[2]); |
338 EXPECT_EQ(1u, on_task_completed_ids()[0]); | 388 EXPECT_EQ(2u, run_task_ids(i)[3]); |
339 EXPECT_EQ(0u, on_task_completed_ids()[1]); | 389 ASSERT_EQ(2u, on_task_completed_ids(i).size()); |
340 | 390 EXPECT_EQ(1u, on_task_completed_ids(i)[0]); |
341 ResetIds(); | 391 EXPECT_EQ(0u, on_task_completed_ids(i)[1]); |
342 { | 392 } |
| 393 |
| 394 for (int i = 0; i < kWorkerPoolCount; ++i) |
| 395 ResetAllIdsforWorkerPool(i); |
| 396 |
| 397 for (int i = 0; i < kWorkerPoolCount; ++i) { |
343 std::vector<FakeWorkerPool::Task> tasks; | 398 std::vector<FakeWorkerPool::Task> tasks; |
344 tasks.push_back( | 399 tasks.push_back( |
345 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 400 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
346 base::Unretained(this), | 401 base::Unretained(this), |
| 402 i, |
347 0u), | 403 0u), |
348 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 404 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
349 base::Unretained(this), | 405 base::Unretained(this), |
| 406 i, |
350 0u), | 407 0u), |
351 base::Bind(&WorkerPoolTest::RunTask, | 408 base::Bind(&WorkerPoolTest::RunTask, |
352 base::Unretained(this), | 409 base::Unretained(this), |
| 410 i, |
353 3u), | 411 3u), |
354 1u, // 1 dependent | 412 1u, // 1 dependent |
355 1u)); // Priority 1 | 413 1u)); // Priority 1 |
356 tasks.push_back( | 414 tasks.push_back( |
357 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 415 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
358 base::Unretained(this), | 416 base::Unretained(this), |
| 417 i, |
359 1u), | 418 1u), |
360 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 419 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
361 base::Unretained(this), | 420 base::Unretained(this), |
| 421 i, |
362 1u), | 422 1u), |
363 base::Bind(&WorkerPoolTest::RunTask, | 423 base::Bind(&WorkerPoolTest::RunTask, |
364 base::Unretained(this), | 424 base::Unretained(this), |
| 425 i, |
365 4u), | 426 4u), |
366 2u, // 2 dependents | 427 2u, // 2 dependents |
367 1u)); // Priority 1 | 428 1u)); // Priority 1 |
368 tasks.push_back( | 429 tasks.push_back( |
369 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 430 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
370 base::Unretained(this), | 431 base::Unretained(this), |
| 432 i, |
371 2u), | 433 2u), |
372 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 434 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
373 base::Unretained(this), | 435 base::Unretained(this), |
| 436 i, |
374 2u), | 437 2u), |
375 base::Bind(&WorkerPoolTest::RunTask, | 438 base::Bind(&WorkerPoolTest::RunTask, |
376 base::Unretained(this), | 439 base::Unretained(this), |
| 440 i, |
377 5u), | 441 5u), |
378 1u, // 1 dependent | 442 1u, // 1 dependent |
379 0u)); // Priority 0 | 443 0u)); // Priority 0 |
380 worker_pool()->ScheduleTasks(tasks); | 444 worker_pool(i)->ScheduleTasks(tasks); |
381 } | 445 } |
382 RunAllTasks(); | 446 |
383 | 447 for (int i = 0; i < kWorkerPoolCount; ++i) { |
384 // Check if tasks ran in order of priority and that task with more | 448 RunAllTasksforWorkerPool(i); |
385 // dependents ran first when priority is the same. | 449 |
386 ASSERT_LE(3u, run_task_ids().size()); | 450 // Check if tasks ran in order of priority and that task with more |
387 EXPECT_EQ(2u, run_task_ids()[0]); | 451 // dependents ran first when priority is the same. |
388 EXPECT_EQ(5u, run_task_ids()[1]); | 452 ASSERT_LE(3u, run_task_ids(i).size()); |
389 EXPECT_EQ(1u, run_task_ids()[2]); | 453 EXPECT_EQ(2u, run_task_ids(i)[0]); |
390 ASSERT_EQ(3u, on_task_completed_ids().size()); | 454 EXPECT_EQ(5u, run_task_ids(i)[1]); |
391 EXPECT_EQ(2u, on_task_completed_ids()[0]); | 455 EXPECT_EQ(1u, run_task_ids(i)[2]); |
392 EXPECT_EQ(1u, on_task_completed_ids()[1]); | 456 ASSERT_EQ(3u, on_task_completed_ids(i).size()); |
393 EXPECT_EQ(0u, on_task_completed_ids()[2]); | 457 EXPECT_EQ(2u, on_task_completed_ids(i)[0]); |
| 458 EXPECT_EQ(1u, on_task_completed_ids(i)[1]); |
| 459 EXPECT_EQ(0u, on_task_completed_ids(i)[2]); |
| 460 } |
394 } | 461 } |
395 | 462 |
396 } // namespace | 463 } // namespace |
397 | 464 |
398 } // namespace cc | 465 } // namespace cc |
OLD | NEW |