Index: cc/resources/worker_pool_unittest.cc |
diff --git a/cc/resources/worker_pool_unittest.cc b/cc/resources/worker_pool_unittest.cc |
old mode 100644 |
new mode 100755 |
index f7c5a951df6de92dffb4b344f2fce408b06f3298..50e3fe77ef876d4227b1ffbac3ff34261bff55c7 |
--- a/cc/resources/worker_pool_unittest.cc |
+++ b/cc/resources/worker_pool_unittest.cc |
@@ -60,7 +60,7 @@ class FakeWorkerPool : public WorkerPool { |
unsigned dependent_count; |
unsigned priority; |
}; |
- FakeWorkerPool() : WorkerPool(1, "test") {} |
+ FakeWorkerPool() : WorkerPool() {} |
virtual ~FakeWorkerPool() {} |
static scoped_ptr<FakeWorkerPool> Create() { |
@@ -181,6 +181,15 @@ class WorkerPoolTest : public testing::Test { |
return on_task_completed_ids_; |
} |
+ unsigned find_run_task_id(unsigned prio, unsigned size) { |
+ unsigned id = 9999; |
+ for (unsigned i = 0; i < size; ++i) { |
+ if (run_task_ids_[i] == prio) |
+ id = i; |
+ } |
+ return id; |
+ } |
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.
|
+ |
private: |
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.
|
std::vector<unsigned> run_task_ids_; |
@@ -191,24 +200,26 @@ TEST_F(WorkerPoolTest, Basic) { |
EXPECT_EQ(0u, run_task_ids().size()); |
EXPECT_EQ(0u, on_task_completed_ids().size()); |
- worker_pool()->ScheduleTasks( |
- std::vector<FakeWorkerPool::Task>( |
- 1, |
- FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
- base::Unretained(this), |
- 0u), |
- base::Bind(&WorkerPoolTest::OnTaskCompleted, |
- base::Unretained(this), |
- 0u), |
- base::Closure(), |
- 1u, |
- 0u))); |
- RunAllTasks(); |
- |
- EXPECT_EQ(1u, run_task_ids().size()); |
- EXPECT_EQ(1u, on_task_completed_ids().size()); |
- |
- worker_pool()->ScheduleTasks( |
+ const int pool_size = 3; |
+ scoped_ptr<FakeWorkerPool> worker_pools[pool_size]; |
+ |
+ for (int i = 0; i < pool_size ; i++) |
+ worker_pools[i] = FakeWorkerPool::Create(); |
+ |
+ worker_pools[0]->ScheduleTasks( |
+ std::vector<FakeWorkerPool::Task>( |
+ 1, |
+ FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 0u), |
+ base::Bind(&WorkerPoolTest::OnTaskCompleted, |
+ base::Unretained(this), |
+ 0u), |
+ base::Closure(), |
+ 1u, |
+ 0u))); |
+ |
+ worker_pools[1]->ScheduleTasks( |
std::vector<FakeWorkerPool::Task>( |
1, |
FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
@@ -222,12 +233,8 @@ TEST_F(WorkerPoolTest, Basic) { |
0u), |
1u, |
0u))); |
- RunAllTasks(); |
- EXPECT_EQ(3u, run_task_ids().size()); |
- EXPECT_EQ(2u, on_task_completed_ids().size()); |
- |
- worker_pool()->ScheduleTasks( |
+ worker_pools[2]->ScheduleTasks( |
std::vector<FakeWorkerPool::Task>( |
1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
base::Unretained(this), |
@@ -240,14 +247,22 @@ TEST_F(WorkerPoolTest, Basic) { |
0u), |
2u, |
0u))); |
- RunAllTasks(); |
+ for (int i = 0; i < pool_size ; i++) { |
+ worker_pools[i]->WaitForTasksToComplete(); |
+ worker_pools[i]->CheckForCompletedTasks(); |
+ } |
EXPECT_EQ(6u, run_task_ids().size()); |
EXPECT_EQ(3u, on_task_completed_ids().size()); |
} |
TEST_F(WorkerPoolTest, Dependencies) { |
- worker_pool()->ScheduleTasks( |
+ const int pool_size = 2; |
+ scoped_ptr<FakeWorkerPool> worker_pools[pool_size]; |
+ for (int i = 0; i < pool_size ; i++) |
+ worker_pools[i] = FakeWorkerPool::Create(); |
+ |
+ worker_pools[0]->ScheduleTasks( |
std::vector<FakeWorkerPool::Task>( |
1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
base::Unretained(this), |
@@ -260,16 +275,8 @@ TEST_F(WorkerPoolTest, Dependencies) { |
1u), |
1u, |
0u))); |
- RunAllTasks(); |
- |
- // Check if task ran before dependent. |
- ASSERT_EQ(2u, run_task_ids().size()); |
- EXPECT_EQ(0u, run_task_ids()[0]); |
- EXPECT_EQ(1u, run_task_ids()[1]); |
- ASSERT_EQ(1u, on_task_completed_ids().size()); |
- EXPECT_EQ(0u, on_task_completed_ids()[0]); |
- worker_pool()->ScheduleTasks( |
+ worker_pools[1]->ScheduleTasks( |
std::vector<FakeWorkerPool::Task>( |
1, FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
base::Unretained(this), |
@@ -282,20 +289,31 @@ TEST_F(WorkerPoolTest, Dependencies) { |
3u), |
2u, |
0u))); |
- RunAllTasks(); |
+ for (int i = 0; i < pool_size ; i++) { |
+ worker_pools[i]->WaitForTasksToComplete(); |
+ worker_pools[i]->CheckForCompletedTasks(); |
+ } |
- // Task should only run once. |
+ // Check if task ran before dependent. |
ASSERT_EQ(5u, run_task_ids().size()); |
- EXPECT_EQ(2u, run_task_ids()[2]); |
- EXPECT_EQ(3u, run_task_ids()[3]); |
- EXPECT_EQ(3u, run_task_ids()[4]); |
+ unsigned id_task = find_run_task_id(0u, run_task_ids().size()); |
+ unsigned id_dep = find_run_task_id(1u, run_task_ids().size()); |
+ EXPECT_EQ((id_dep-id_task) > 0, 1); |
+ id_task = find_run_task_id(2u, run_task_ids().size()); |
+ id_dep = find_run_task_id(3u, run_task_ids().size()); |
+ EXPECT_EQ((id_dep-id_task) > 0, 1); |
ASSERT_EQ(2u, on_task_completed_ids().size()); |
EXPECT_EQ(2u, on_task_completed_ids()[1]); |
} |
TEST_F(WorkerPoolTest, Priority) { |
+ const int pool_size = 4; |
+ scoped_ptr<FakeWorkerPool> worker_pools[pool_size]; |
+ for (int i = 0; i < pool_size ; i++) |
+ worker_pools[i] = FakeWorkerPool::Create(); |
+ |
{ |
- FakeWorkerPool::Task tasks[] = { |
+ FakeWorkerPool::Task tasks1[] = { |
FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
base::Unretained(this), |
0u), |
@@ -319,25 +337,60 @@ TEST_F(WorkerPoolTest, Priority) { |
1u, |
0u) // Priority 0 |
}; |
- worker_pool()->ScheduleTasks( |
- std::vector<FakeWorkerPool::Task>(tasks, tasks + arraysize(tasks))); |
+ FakeWorkerPool::Task tasks2[] = { |
+ FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 0u), |
+ base::Bind(&WorkerPoolTest::OnTaskCompleted, |
+ base::Unretained(this), |
+ 0u), |
+ base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 4u), |
+ 1u, |
+ 2u), // Priority 2 |
+ FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 1u), |
+ base::Bind(&WorkerPoolTest::OnTaskCompleted, |
+ base::Unretained(this), |
+ 1u), |
+ base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 5u), |
+ 1u, |
+ 3u) // Priority 3 |
+ }; |
+ worker_pools[0]->ScheduleTasks( |
+ std::vector<FakeWorkerPool::Task>(tasks1, tasks1 + arraysize(tasks1))); |
+ worker_pools[1]->ScheduleTasks( |
+ std::vector<FakeWorkerPool::Task>(tasks2, tasks2 + arraysize(tasks2))); |
+ } |
+ for (int i = 0; i < 2 ; i++) { |
+ worker_pools[i]->WaitForTasksToComplete(); |
+ worker_pools[i]->CheckForCompletedTasks(); |
} |
- RunAllTasks(); |
// Check if tasks ran in order of priority. |
- ASSERT_EQ(4u, run_task_ids().size()); |
+ ASSERT_EQ(8u, run_task_ids().size()); |
EXPECT_EQ(1u, run_task_ids()[0]); |
EXPECT_EQ(3u, run_task_ids()[1]); |
EXPECT_EQ(0u, run_task_ids()[2]); |
EXPECT_EQ(2u, run_task_ids()[3]); |
- ASSERT_EQ(2u, on_task_completed_ids().size()); |
+ EXPECT_EQ(0u, run_task_ids()[4]); |
+ EXPECT_EQ(4u, run_task_ids()[5]); |
+ EXPECT_EQ(1u, run_task_ids()[6]); |
+ EXPECT_EQ(5u, run_task_ids()[7]); |
+ ASSERT_EQ(4u, on_task_completed_ids().size()); |
EXPECT_EQ(1u, on_task_completed_ids()[0]); |
EXPECT_EQ(0u, on_task_completed_ids()[1]); |
+ EXPECT_EQ(0u, on_task_completed_ids()[2]); |
+ EXPECT_EQ(1u, on_task_completed_ids()[3]); |
ResetIds(); |
{ |
- std::vector<FakeWorkerPool::Task> tasks; |
- tasks.push_back( |
+ std::vector<FakeWorkerPool::Task> tasks1; |
+ tasks1.push_back( |
FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
base::Unretained(this), |
0u), |
@@ -349,7 +402,7 @@ TEST_F(WorkerPoolTest, Priority) { |
3u), |
1u, // 1 dependent |
1u)); // Priority 1 |
- tasks.push_back( |
+ tasks1.push_back( |
FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
base::Unretained(this), |
1u), |
@@ -361,7 +414,7 @@ TEST_F(WorkerPoolTest, Priority) { |
4u), |
2u, // 2 dependents |
1u)); // Priority 1 |
- tasks.push_back( |
+ tasks1.push_back( |
FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
base::Unretained(this), |
2u), |
@@ -373,20 +426,69 @@ TEST_F(WorkerPoolTest, Priority) { |
5u), |
1u, // 1 dependent |
0u)); // Priority 0 |
- worker_pool()->ScheduleTasks(tasks); |
+ worker_pools[3]->ScheduleTasks(tasks1); |
+ |
+ std::vector<FakeWorkerPool::Task> tasks2; |
+ tasks2.push_back( |
+ FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 5u), |
+ base::Bind(&WorkerPoolTest::OnTaskCompleted, |
+ base::Unretained(this), |
+ 5u), |
+ base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 6u), |
+ 3u, // 3 dependent |
+ 3u)); // Priority 3 |
+ tasks2.push_back( |
+ FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 4u), |
+ base::Bind(&WorkerPoolTest::OnTaskCompleted, |
+ base::Unretained(this), |
+ 4u), |
+ base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 7u), |
+ 3u, // 3 dependents |
+ 2u)); // Priority 2 |
+ tasks2.push_back( |
+ FakeWorkerPool::Task(base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 3u), |
+ base::Bind(&WorkerPoolTest::OnTaskCompleted, |
+ base::Unretained(this), |
+ 3u), |
+ base::Bind(&WorkerPoolTest::RunTask, |
+ base::Unretained(this), |
+ 8u), |
+ 4u, // 4 dependent |
+ 0u)); // Priority 0 |
+ worker_pools[4]->ScheduleTasks(tasks2); |
+ } |
+ for (int i = 2; i < pool_size ; i++) { |
+ worker_pools[i]->WaitForTasksToComplete(); |
+ worker_pools[i]->CheckForCompletedTasks(); |
} |
- RunAllTasks(); |
// Check if tasks ran in order of priority and that task with more |
// dependents ran first when priority is the same. |
- ASSERT_LE(3u, run_task_ids().size()); |
- EXPECT_EQ(2u, run_task_ids()[0]); |
- EXPECT_EQ(5u, run_task_ids()[1]); |
- EXPECT_EQ(1u, run_task_ids()[2]); |
- ASSERT_EQ(3u, on_task_completed_ids().size()); |
+ ASSERT_LE(6u, run_task_ids().size()); |
+ EXPECT_EQ(3u, run_task_ids()[0]); |
+ EXPECT_EQ(8u, run_task_ids()[1]); |
+ EXPECT_EQ(2u, run_task_ids()[2]); |
+ EXPECT_EQ(5u, run_task_ids()[3]); |
+ EXPECT_EQ(8u, run_task_ids()[4]); |
+ EXPECT_EQ(8u, run_task_ids()[5]); |
+ EXPECT_EQ(8u, run_task_ids()[6]); |
+ ASSERT_EQ(6u, on_task_completed_ids().size()); |
EXPECT_EQ(2u, on_task_completed_ids()[0]); |
EXPECT_EQ(1u, on_task_completed_ids()[1]); |
EXPECT_EQ(0u, on_task_completed_ids()[2]); |
+ EXPECT_EQ(3u, on_task_completed_ids()[3]); |
+ EXPECT_EQ(4u, on_task_completed_ids()[4]); |
+ EXPECT_EQ(5u, on_task_completed_ids()[5]); |
} |
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.
|
} // namespace |