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

Unified Diff: cc/resources/worker_pool_unittest.cc

Issue 73923003: Shared Raster Worker Threads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unit test updated Created 6 years, 11 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/worker_pool_perftest.cc ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « cc/resources/worker_pool_perftest.cc ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698