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