Index: cc/resources/worker_pool_unittest.cc |
diff --git a/cc/resources/worker_pool_unittest.cc b/cc/resources/worker_pool_unittest.cc |
index babf7fbec7acfb61a75115ae18446111d348a2c9..5c946e001d0e9fdbe32d186ac5b50c08ae627131 100644 |
--- a/cc/resources/worker_pool_unittest.cc |
+++ b/cc/resources/worker_pool_unittest.cc |
@@ -13,16 +13,10 @@ namespace cc { |
namespace { |
-class FakeTaskImpl : public internal::WorkerPoolTask { |
+class FakeWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
public: |
- FakeTaskImpl(const base::Closure& callback, |
- const base::Closure& reply, |
- internal::WorkerPoolTask::TaskVector* dependencies) |
- : internal::WorkerPoolTask(dependencies), |
- callback_(callback), |
- reply_(reply) { |
- } |
- FakeTaskImpl(const base::Closure& callback, const base::Closure& reply) |
+ FakeWorkerPoolTaskImpl(const base::Closure& callback, |
+ const base::Closure& reply) |
: callback_(callback), |
reply_(reply) { |
} |
@@ -38,10 +32,12 @@ class FakeTaskImpl : public internal::WorkerPoolTask { |
} |
private: |
- virtual ~FakeTaskImpl() {} |
+ virtual ~FakeWorkerPoolTaskImpl() {} |
const base::Closure callback_; |
const base::Closure reply_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeWorkerPoolTaskImpl); |
}; |
class FakeWorkerPool : public WorkerPool { |
@@ -57,26 +53,49 @@ class FakeWorkerPool : public WorkerPool { |
const base::Closure& reply, |
const base::Closure& dependency, |
int count) { |
- scoped_refptr<FakeTaskImpl> dependency_task( |
- new FakeTaskImpl(dependency, base::Closure())); |
+ unsigned priority = 0u; |
+ TaskGraph graph; |
+ |
+ scoped_refptr<FakeWorkerPoolTaskImpl> completion_task( |
+ new FakeWorkerPoolTaskImpl( |
+ base::Bind(&FakeWorkerPool::OnTasksCompleted, |
+ base::Unretained(this)), |
+ base::Closure())); |
+ scoped_ptr<GraphNode> completion_node(new GraphNode); |
+ completion_node->set_task(completion_task.get()); |
+ |
+ scoped_refptr<FakeWorkerPoolTaskImpl> dependency_task( |
+ new FakeWorkerPoolTaskImpl(dependency, base::Closure())); |
+ scoped_ptr<GraphNode> dependency_node(new GraphNode); |
+ dependency_node->set_task(dependency_task.get()); |
- internal::WorkerPoolTask::TaskVector tasks; |
+ TaskVector tasks; |
for (int i = 0; i < count; ++i) { |
- internal::WorkerPoolTask::TaskVector dependencies(1, dependency_task); |
- tasks.push_back(new FakeTaskImpl(callback, reply, &dependencies)); |
+ scoped_refptr<FakeWorkerPoolTaskImpl> task( |
+ new FakeWorkerPoolTaskImpl(callback, reply)); |
+ scoped_ptr<GraphNode> node(new GraphNode); |
+ node->set_task(task.get()); |
+ node->add_dependent(completion_node.get()); |
+ completion_node->add_dependency(); |
+ dependency_node->add_dependent(node.get()); |
+ node->add_dependency(); |
+ node->set_priority(priority++); |
+ graph.set(task.get(), node.Pass()); |
+ tasks.push_back(task.get()); |
} |
- scoped_refptr<FakeTaskImpl> completion_task( |
- new FakeTaskImpl(base::Bind(&FakeWorkerPool::OnTasksCompleted, |
- base::Unretained(this)), |
- base::Closure(), |
- &tasks)); |
+ |
+ completion_node->set_priority(priority++); |
+ graph.set(completion_task.get(), completion_node.Pass()); |
+ dependency_node->set_priority(priority++); |
+ graph.set(dependency_task.get(), dependency_node.Pass()); |
scheduled_tasks_completion_.reset(new CompletionEvent); |
- TaskGraph graph; |
- BuildTaskGraph(completion_task.get(), &graph); |
- WorkerPool::SetTaskGraph(&graph); |
- root_.swap(completion_task); |
+ SetTaskGraph(&graph); |
+ |
+ tasks_.swap(tasks); |
+ completion_task_.swap(completion_task); |
+ dependency_task_.swap(dependency_task); |
} |
void WaitForTasksToComplete() { |
@@ -85,13 +104,19 @@ class FakeWorkerPool : public WorkerPool { |
} |
private: |
+ typedef std::vector<scoped_refptr<internal::WorkerPoolTask> > TaskVector; |
+ |
void OnTasksCompleted() { |
DCHECK(scheduled_tasks_completion_); |
scheduled_tasks_completion_->Signal(); |
} |
- scoped_refptr<FakeTaskImpl> root_; |
+ TaskVector tasks_; |
+ scoped_refptr<FakeWorkerPoolTaskImpl> completion_task_; |
+ scoped_refptr<FakeWorkerPoolTaskImpl> dependency_task_; |
scoped_ptr<CompletionEvent> scheduled_tasks_completion_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeWorkerPool); |
}; |
class WorkerPoolTest : public testing::Test { |