Chromium Code Reviews| 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" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 53 dependent_count(dependent_count), | 53 dependent_count(dependent_count), |
| 54 priority(priority) { | 54 priority(priority) { |
| 55 } | 55 } |
| 56 | 56 |
| 57 base::Closure callback; | 57 base::Closure callback; |
| 58 base::Closure reply; | 58 base::Closure reply; |
| 59 base::Closure dependent; | 59 base::Closure dependent; |
| 60 unsigned dependent_count; | 60 unsigned dependent_count; |
| 61 unsigned priority; | 61 unsigned priority; |
| 62 }; | 62 }; |
| 63 FakeWorkerPool() : WorkerPool(1, "test") {} | 63 FakeWorkerPool() : WorkerPool() {} |
| 64 virtual ~FakeWorkerPool() {} | 64 virtual ~FakeWorkerPool() {} |
| 65 | 65 |
| 66 static scoped_ptr<FakeWorkerPool> Create() { | 66 static scoped_ptr<FakeWorkerPool> Create() { |
| 67 return make_scoped_ptr(new FakeWorkerPool); | 67 return make_scoped_ptr(new FakeWorkerPool); |
| 68 } | 68 } |
| 69 | 69 |
| 70 void ScheduleTasks(const std::vector<Task>& tasks) { | 70 void ScheduleTasks(const std::vector<Task>& tasks) { |
| 71 TaskVector new_tasks; | 71 TaskVector new_tasks; |
| 72 TaskVector new_dependents; | 72 TaskVector new_dependents; |
| 73 TaskGraph new_graph; | 73 TaskGraph new_graph; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 174 } | 174 } |
| 175 | 175 |
| 176 const std::vector<unsigned>& run_task_ids() { | 176 const std::vector<unsigned>& run_task_ids() { |
| 177 return run_task_ids_; | 177 return run_task_ids_; |
| 178 } | 178 } |
| 179 | 179 |
| 180 const std::vector<unsigned>& on_task_completed_ids() { | 180 const std::vector<unsigned>& on_task_completed_ids() { |
| 181 return on_task_completed_ids_; | 181 return on_task_completed_ids_; |
| 182 } | 182 } |
| 183 | 183 |
| 184 unsigned find_run_task_id(unsigned prio, unsigned size) { | |
| 185 unsigned id = 9999; | |
| 186 for (unsigned i = 0; i < size; ++i) { | |
| 187 if (run_task_ids_[i] == prio) | |
| 188 id = i; | |
| 189 } | |
| 190 return id; | |
| 191 } | |
|
reveman
2014/01/10 21:22:03
not sure why you need this but it looks like you'r
sohanjg
2014/01/13 13:24:51
Done.
| |
| 192 | |
| 184 private: | 193 private: |
| 185 scoped_ptr<FakeWorkerPool> worker_pool_; | 194 scoped_ptr<FakeWorkerPool> worker_pool_; |
|
reveman
2014/01/10 21:22:03
why not make this a ScopedVector and add a "const
sohanjg
2014/01/13 13:24:51
Done.
| |
| 186 std::vector<unsigned> run_task_ids_; | 195 std::vector<unsigned> run_task_ids_; |
| 187 std::vector<unsigned> on_task_completed_ids_; | 196 std::vector<unsigned> on_task_completed_ids_; |
|
reveman
2014/01/10 21:22:03
and maybe turn these into arrays of vectors. exist
sohanjg
2014/01/13 13:24:51
Done.
| |
| 188 }; | 197 }; |
| 189 | 198 |
| 190 TEST_F(WorkerPoolTest, Basic) { | 199 TEST_F(WorkerPoolTest, Basic) { |
| 191 EXPECT_EQ(0u, run_task_ids().size()); | 200 EXPECT_EQ(0u, run_task_ids().size()); |
| 192 EXPECT_EQ(0u, on_task_completed_ids().size()); | 201 EXPECT_EQ(0u, on_task_completed_ids().size()); |
| 193 | 202 |
| 194 worker_pool()->ScheduleTasks( | 203 const int pool_size = 3; |
| 204 scoped_ptr<FakeWorkerPool> worker_pools[pool_size]; | |
| 205 | |
| 206 for (int i = 0; i < pool_size ; i++) | |
| 207 worker_pools[i] = FakeWorkerPool::Create(); | |
| 208 | |
| 209 worker_pools[0]->ScheduleTasks( | |
| 210 std::vector<FakeWorkerPool::Task>( | |
| 211 1, | |
| 212 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | |
| 213 base::Unretained(this), | |
| 214 0u), | |
| 215 base::Bind(&WorkerPoolTest::OnTaskCompleted, | |
| 216 base::Unretained(this), | |
| 217 0u), | |
| 218 base::Closure(), | |
| 219 1u, | |
| 220 0u))); | |
| 221 | |
| 222 worker_pools[1]->ScheduleTasks( | |
| 195 std::vector<FakeWorkerPool::Task>( | 223 std::vector<FakeWorkerPool::Task>( |
| 196 1, | 224 1, |
| 197 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 225 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 198 base::Unretained(this), | |
| 199 0u), | |
| 200 base::Bind(&WorkerPoolTest::OnTaskCompleted, | |
| 201 base::Unretained(this), | |
| 202 0u), | |
| 203 base::Closure(), | |
| 204 1u, | |
| 205 0u))); | |
| 206 RunAllTasks(); | |
| 207 | |
| 208 EXPECT_EQ(1u, run_task_ids().size()); | |
| 209 EXPECT_EQ(1u, on_task_completed_ids().size()); | |
| 210 | |
| 211 worker_pool()->ScheduleTasks( | |
| 212 std::vector<FakeWorkerPool::Task>( | |
| 213 1, | |
| 214 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | |
| 215 base::Unretained(this), | 226 base::Unretained(this), |
| 216 0u), | 227 0u), |
| 217 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 228 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 218 base::Unretained(this), | 229 base::Unretained(this), |
| 219 0u), | 230 0u), |
| 220 base::Bind(&WorkerPoolTest::RunTask, | 231 base::Bind(&WorkerPoolTest::RunTask, |
| 221 base::Unretained(this), | 232 base::Unretained(this), |
| 222 0u), | 233 0u), |
| 223 1u, | 234 1u, |
| 224 0u))); | 235 0u))); |
| 225 RunAllTasks(); | |
| 226 | 236 |
| 227 EXPECT_EQ(3u, run_task_ids().size()); | 237 worker_pools[2]->ScheduleTasks( |
| 228 EXPECT_EQ(2u, on_task_completed_ids().size()); | |
| 229 | |
| 230 worker_pool()->ScheduleTasks( | |
| 231 std::vector<FakeWorkerPool::Task>( | 238 std::vector<FakeWorkerPool::Task>( |
| 232 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 239 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 233 base::Unretained(this), | 240 base::Unretained(this), |
| 234 0u), | 241 0u), |
| 235 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 242 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 236 base::Unretained(this), | 243 base::Unretained(this), |
| 237 0u), | 244 0u), |
| 238 base::Bind(&WorkerPoolTest::RunTask, | 245 base::Bind(&WorkerPoolTest::RunTask, |
| 239 base::Unretained(this), | 246 base::Unretained(this), |
| 240 0u), | 247 0u), |
| 241 2u, | 248 2u, |
| 242 0u))); | 249 0u))); |
| 243 RunAllTasks(); | 250 for (int i = 0; i < pool_size ; i++) { |
| 251 worker_pools[i]->WaitForTasksToComplete(); | |
| 252 worker_pools[i]->CheckForCompletedTasks(); | |
| 253 } | |
| 244 | 254 |
| 245 EXPECT_EQ(6u, run_task_ids().size()); | 255 EXPECT_EQ(6u, run_task_ids().size()); |
| 246 EXPECT_EQ(3u, on_task_completed_ids().size()); | 256 EXPECT_EQ(3u, on_task_completed_ids().size()); |
| 247 } | 257 } |
| 248 | 258 |
| 249 TEST_F(WorkerPoolTest, Dependencies) { | 259 TEST_F(WorkerPoolTest, Dependencies) { |
| 250 worker_pool()->ScheduleTasks( | 260 const int pool_size = 2; |
| 261 scoped_ptr<FakeWorkerPool> worker_pools[pool_size]; | |
| 262 for (int i = 0; i < pool_size ; i++) | |
| 263 worker_pools[i] = FakeWorkerPool::Create(); | |
| 264 | |
| 265 worker_pools[0]->ScheduleTasks( | |
| 251 std::vector<FakeWorkerPool::Task>( | 266 std::vector<FakeWorkerPool::Task>( |
| 252 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 267 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 253 base::Unretained(this), | 268 base::Unretained(this), |
| 254 0u), | 269 0u), |
| 255 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 270 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 256 base::Unretained(this), | 271 base::Unretained(this), |
| 257 0u), | 272 0u), |
| 258 base::Bind(&WorkerPoolTest::RunTask, | 273 base::Bind(&WorkerPoolTest::RunTask, |
| 259 base::Unretained(this), | 274 base::Unretained(this), |
| 260 1u), | 275 1u), |
| 261 1u, | 276 1u, |
| 262 0u))); | 277 0u))); |
| 263 RunAllTasks(); | |
| 264 | 278 |
| 265 // Check if task ran before dependent. | 279 worker_pools[1]->ScheduleTasks( |
| 266 ASSERT_EQ(2u, run_task_ids().size()); | |
| 267 EXPECT_EQ(0u, run_task_ids()[0]); | |
| 268 EXPECT_EQ(1u, run_task_ids()[1]); | |
| 269 ASSERT_EQ(1u, on_task_completed_ids().size()); | |
| 270 EXPECT_EQ(0u, on_task_completed_ids()[0]); | |
| 271 | |
| 272 worker_pool()->ScheduleTasks( | |
| 273 std::vector<FakeWorkerPool::Task>( | 280 std::vector<FakeWorkerPool::Task>( |
| 274 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 281 1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 275 base::Unretained(this), | 282 base::Unretained(this), |
| 276 2u), | 283 2u), |
| 277 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 284 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 278 base::Unretained(this), | 285 base::Unretained(this), |
| 279 2u), | 286 2u), |
| 280 base::Bind(&WorkerPoolTest::RunTask, | 287 base::Bind(&WorkerPoolTest::RunTask, |
| 281 base::Unretained(this), | 288 base::Unretained(this), |
| 282 3u), | 289 3u), |
| 283 2u, | 290 2u, |
| 284 0u))); | 291 0u))); |
| 285 RunAllTasks(); | 292 for (int i = 0; i < pool_size ; i++) { |
| 293 worker_pools[i]->WaitForTasksToComplete(); | |
| 294 worker_pools[i]->CheckForCompletedTasks(); | |
| 295 } | |
| 286 | 296 |
| 287 // Task should only run once. | 297 // Check if task ran before dependent. |
| 288 ASSERT_EQ(5u, run_task_ids().size()); | 298 ASSERT_EQ(5u, run_task_ids().size()); |
| 289 EXPECT_EQ(2u, run_task_ids()[2]); | 299 unsigned id_task = find_run_task_id(0u, run_task_ids().size()); |
| 290 EXPECT_EQ(3u, run_task_ids()[3]); | 300 unsigned id_dep = find_run_task_id(1u, run_task_ids().size()); |
| 291 EXPECT_EQ(3u, run_task_ids()[4]); | 301 EXPECT_EQ((id_dep-id_task) > 0, 1); |
| 302 id_task = find_run_task_id(2u, run_task_ids().size()); | |
| 303 id_dep = find_run_task_id(3u, run_task_ids().size()); | |
| 304 EXPECT_EQ((id_dep-id_task) > 0, 1); | |
| 292 ASSERT_EQ(2u, on_task_completed_ids().size()); | 305 ASSERT_EQ(2u, on_task_completed_ids().size()); |
| 293 EXPECT_EQ(2u, on_task_completed_ids()[1]); | 306 EXPECT_EQ(2u, on_task_completed_ids()[1]); |
| 294 } | 307 } |
| 295 | 308 |
| 296 TEST_F(WorkerPoolTest, Priority) { | 309 TEST_F(WorkerPoolTest, Priority) { |
| 310 const int pool_size = 4; | |
| 311 scoped_ptr<FakeWorkerPool> worker_pools[pool_size]; | |
| 312 for (int i = 0; i < pool_size ; i++) | |
| 313 worker_pools[i] = FakeWorkerPool::Create(); | |
| 314 | |
| 297 { | 315 { |
| 298 FakeWorkerPool::Task tasks[] = { | 316 FakeWorkerPool::Task tasks1[] = { |
| 299 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 317 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 300 base::Unretained(this), | 318 base::Unretained(this), |
| 301 0u), | 319 0u), |
| 302 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 320 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 303 base::Unretained(this), | 321 base::Unretained(this), |
| 304 0u), | 322 0u), |
| 305 base::Bind(&WorkerPoolTest::RunTask, | 323 base::Bind(&WorkerPoolTest::RunTask, |
| 306 base::Unretained(this), | 324 base::Unretained(this), |
| 307 2u), | 325 2u), |
| 308 1u, | 326 1u, |
| 309 1u), // Priority 1 | 327 1u), // Priority 1 |
| 310 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 328 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 311 base::Unretained(this), | 329 base::Unretained(this), |
| 312 1u), | 330 1u), |
| 313 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 331 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 314 base::Unretained(this), | 332 base::Unretained(this), |
| 315 1u), | 333 1u), |
| 316 base::Bind(&WorkerPoolTest::RunTask, | 334 base::Bind(&WorkerPoolTest::RunTask, |
| 317 base::Unretained(this), | 335 base::Unretained(this), |
| 318 3u), | 336 3u), |
| 319 1u, | 337 1u, |
| 320 0u) // Priority 0 | 338 0u) // Priority 0 |
| 321 }; | 339 }; |
| 322 worker_pool()->ScheduleTasks( | 340 FakeWorkerPool::Task tasks2[] = { |
| 323 std::vector<FakeWorkerPool::Task>(tasks, tasks + arraysize(tasks))); | 341 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 342 base::Unretained(this), | |
| 343 0u), | |
| 344 base::Bind(&WorkerPoolTest::OnTaskCompleted, | |
| 345 base::Unretained(this), | |
| 346 0u), | |
| 347 base::Bind(&WorkerPoolTest::RunTask, | |
| 348 base::Unretained(this), | |
| 349 4u), | |
| 350 1u, | |
| 351 2u), // Priority 2 | |
| 352 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | |
| 353 base::Unretained(this), | |
| 354 1u), | |
| 355 base::Bind(&WorkerPoolTest::OnTaskCompleted, | |
| 356 base::Unretained(this), | |
| 357 1u), | |
| 358 base::Bind(&WorkerPoolTest::RunTask, | |
| 359 base::Unretained(this), | |
| 360 5u), | |
| 361 1u, | |
| 362 3u) // Priority 3 | |
| 363 }; | |
| 364 worker_pools[0]->ScheduleTasks( | |
| 365 std::vector<FakeWorkerPool::Task>(tasks1, tasks1 + arraysize(tasks1))); | |
| 366 worker_pools[1]->ScheduleTasks( | |
| 367 std::vector<FakeWorkerPool::Task>(tasks2, tasks2 + arraysize(tasks2))); | |
| 324 } | 368 } |
| 325 RunAllTasks(); | 369 for (int i = 0; i < 2 ; i++) { |
| 370 worker_pools[i]->WaitForTasksToComplete(); | |
| 371 worker_pools[i]->CheckForCompletedTasks(); | |
| 372 } | |
| 326 | 373 |
| 327 // Check if tasks ran in order of priority. | 374 // Check if tasks ran in order of priority. |
| 328 ASSERT_EQ(4u, run_task_ids().size()); | 375 ASSERT_EQ(8u, run_task_ids().size()); |
| 329 EXPECT_EQ(1u, run_task_ids()[0]); | 376 EXPECT_EQ(1u, run_task_ids()[0]); |
| 330 EXPECT_EQ(3u, run_task_ids()[1]); | 377 EXPECT_EQ(3u, run_task_ids()[1]); |
| 331 EXPECT_EQ(0u, run_task_ids()[2]); | 378 EXPECT_EQ(0u, run_task_ids()[2]); |
| 332 EXPECT_EQ(2u, run_task_ids()[3]); | 379 EXPECT_EQ(2u, run_task_ids()[3]); |
| 333 ASSERT_EQ(2u, on_task_completed_ids().size()); | 380 EXPECT_EQ(0u, run_task_ids()[4]); |
| 381 EXPECT_EQ(4u, run_task_ids()[5]); | |
| 382 EXPECT_EQ(1u, run_task_ids()[6]); | |
| 383 EXPECT_EQ(5u, run_task_ids()[7]); | |
| 384 ASSERT_EQ(4u, on_task_completed_ids().size()); | |
| 334 EXPECT_EQ(1u, on_task_completed_ids()[0]); | 385 EXPECT_EQ(1u, on_task_completed_ids()[0]); |
| 335 EXPECT_EQ(0u, on_task_completed_ids()[1]); | 386 EXPECT_EQ(0u, on_task_completed_ids()[1]); |
| 387 EXPECT_EQ(0u, on_task_completed_ids()[2]); | |
| 388 EXPECT_EQ(1u, on_task_completed_ids()[3]); | |
| 336 | 389 |
| 337 ResetIds(); | 390 ResetIds(); |
| 338 { | 391 { |
| 339 std::vector<FakeWorkerPool::Task> tasks; | 392 std::vector<FakeWorkerPool::Task> tasks1; |
| 340 tasks.push_back( | 393 tasks1.push_back( |
| 341 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 394 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 342 base::Unretained(this), | 395 base::Unretained(this), |
| 343 0u), | 396 0u), |
| 344 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 397 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 345 base::Unretained(this), | 398 base::Unretained(this), |
| 346 0u), | 399 0u), |
| 347 base::Bind(&WorkerPoolTest::RunTask, | 400 base::Bind(&WorkerPoolTest::RunTask, |
| 348 base::Unretained(this), | 401 base::Unretained(this), |
| 349 3u), | 402 3u), |
| 350 1u, // 1 dependent | 403 1u, // 1 dependent |
| 351 1u)); // Priority 1 | 404 1u)); // Priority 1 |
| 352 tasks.push_back( | 405 tasks1.push_back( |
| 353 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 406 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 354 base::Unretained(this), | 407 base::Unretained(this), |
| 355 1u), | 408 1u), |
| 356 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 409 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 357 base::Unretained(this), | 410 base::Unretained(this), |
| 358 1u), | 411 1u), |
| 359 base::Bind(&WorkerPoolTest::RunTask, | 412 base::Bind(&WorkerPoolTest::RunTask, |
| 360 base::Unretained(this), | 413 base::Unretained(this), |
| 361 4u), | 414 4u), |
| 362 2u, // 2 dependents | 415 2u, // 2 dependents |
| 363 1u)); // Priority 1 | 416 1u)); // Priority 1 |
| 364 tasks.push_back( | 417 tasks1.push_back( |
| 365 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | 418 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
| 366 base::Unretained(this), | 419 base::Unretained(this), |
| 367 2u), | 420 2u), |
| 368 base::Bind(&WorkerPoolTest::OnTaskCompleted, | 421 base::Bind(&WorkerPoolTest::OnTaskCompleted, |
| 369 base::Unretained(this), | 422 base::Unretained(this), |
| 370 2u), | 423 2u), |
| 371 base::Bind(&WorkerPoolTest::RunTask, | 424 base::Bind(&WorkerPoolTest::RunTask, |
| 372 base::Unretained(this), | 425 base::Unretained(this), |
| 373 5u), | 426 5u), |
| 374 1u, // 1 dependent | 427 1u, // 1 dependent |
| 375 0u)); // Priority 0 | 428 0u)); // Priority 0 |
| 376 worker_pool()->ScheduleTasks(tasks); | 429 worker_pools[3]->ScheduleTasks(tasks1); |
| 430 | |
| 431 std::vector<FakeWorkerPool::Task> tasks2; | |
| 432 tasks2.push_back( | |
| 433 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | |
| 434 base::Unretained(this), | |
| 435 5u), | |
| 436 base::Bind(&WorkerPoolTest::OnTaskCompleted, | |
| 437 base::Unretained(this), | |
| 438 5u), | |
| 439 base::Bind(&WorkerPoolTest::RunTask, | |
| 440 base::Unretained(this), | |
| 441 6u), | |
| 442 3u, // 3 dependent | |
| 443 3u)); // Priority 3 | |
| 444 tasks2.push_back( | |
| 445 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | |
| 446 base::Unretained(this), | |
| 447 4u), | |
| 448 base::Bind(&WorkerPoolTest::OnTaskCompleted, | |
| 449 base::Unretained(this), | |
| 450 4u), | |
| 451 base::Bind(&WorkerPoolTest::RunTask, | |
| 452 base::Unretained(this), | |
| 453 7u), | |
| 454 3u, // 3 dependents | |
| 455 2u)); // Priority 2 | |
| 456 tasks2.push_back( | |
| 457 FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, | |
| 458 base::Unretained(this), | |
| 459 3u), | |
| 460 base::Bind(&WorkerPoolTest::OnTaskCompleted, | |
| 461 base::Unretained(this), | |
| 462 3u), | |
| 463 base::Bind(&WorkerPoolTest::RunTask, | |
| 464 base::Unretained(this), | |
| 465 8u), | |
| 466 4u, // 4 dependent | |
| 467 0u)); // Priority 0 | |
| 468 worker_pools[4]->ScheduleTasks(tasks2); | |
| 377 } | 469 } |
| 378 RunAllTasks(); | 470 for (int i = 2; i < pool_size ; i++) { |
| 471 worker_pools[i]->WaitForTasksToComplete(); | |
| 472 worker_pools[i]->CheckForCompletedTasks(); | |
| 473 } | |
| 379 | 474 |
| 380 // Check if tasks ran in order of priority and that task with more | 475 // Check if tasks ran in order of priority and that task with more |
| 381 // dependents ran first when priority is the same. | 476 // dependents ran first when priority is the same. |
| 382 ASSERT_LE(3u, run_task_ids().size()); | 477 ASSERT_LE(6u, run_task_ids().size()); |
| 383 EXPECT_EQ(2u, run_task_ids()[0]); | 478 EXPECT_EQ(3u, run_task_ids()[0]); |
| 384 EXPECT_EQ(5u, run_task_ids()[1]); | 479 EXPECT_EQ(8u, run_task_ids()[1]); |
| 385 EXPECT_EQ(1u, run_task_ids()[2]); | 480 EXPECT_EQ(2u, run_task_ids()[2]); |
| 386 ASSERT_EQ(3u, on_task_completed_ids().size()); | 481 EXPECT_EQ(5u, run_task_ids()[3]); |
| 482 EXPECT_EQ(8u, run_task_ids()[4]); | |
| 483 EXPECT_EQ(8u, run_task_ids()[5]); | |
| 484 EXPECT_EQ(8u, run_task_ids()[6]); | |
| 485 ASSERT_EQ(6u, on_task_completed_ids().size()); | |
| 387 EXPECT_EQ(2u, on_task_completed_ids()[0]); | 486 EXPECT_EQ(2u, on_task_completed_ids()[0]); |
| 388 EXPECT_EQ(1u, on_task_completed_ids()[1]); | 487 EXPECT_EQ(1u, on_task_completed_ids()[1]); |
| 389 EXPECT_EQ(0u, on_task_completed_ids()[2]); | 488 EXPECT_EQ(0u, on_task_completed_ids()[2]); |
| 489 EXPECT_EQ(3u, on_task_completed_ids()[3]); | |
| 490 EXPECT_EQ(4u, on_task_completed_ids()[4]); | |
| 491 EXPECT_EQ(5u, on_task_completed_ids()[5]); | |
| 390 } | 492 } |
|
reveman
2014/01/10 21:22:03
The way you're modifying these tests make it reall
sohanjg
2014/01/13 13:24:51
Done.
| |
| 391 | 493 |
| 392 } // namespace | 494 } // namespace |
| 393 | 495 |
| 394 } // namespace cc | 496 } // namespace cc |
| OLD | NEW |