| Index: cc/resources/image_raster_worker_pool.cc
|
| diff --git a/cc/resources/image_raster_worker_pool.cc b/cc/resources/image_raster_worker_pool.cc
|
| index 1d96b27815e8e1e6d78407a8200b6666a0bead47..675686d6690b9c2ca62c10b196ca1c4f82c73166 100644
|
| --- a/cc/resources/image_raster_worker_pool.cc
|
| +++ b/cc/resources/image_raster_worker_pool.cc
|
| @@ -28,6 +28,7 @@ class ImageWorkerPoolTaskImpl : public internal::WorkerPoolTask {
|
|
|
| // Overridden from internal::WorkerPoolTask:
|
| virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
|
| + TRACE_EVENT0("cc", "ImageWorkerPoolTaskImpl::RunOnWorkerThread");
|
| if (!buffer_)
|
| return;
|
|
|
| @@ -71,7 +72,25 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) {
|
|
|
| RasterWorkerPool::SetRasterTasks(queue);
|
|
|
| - RasterTaskGraph graph;
|
| + unsigned priority = 0u;
|
| + TaskGraph graph;
|
| +
|
| + scoped_refptr<internal::WorkerPoolTask>
|
| + new_raster_required_for_activation_finished_task(
|
| + CreateRasterRequiredForActivationFinishedTask());
|
| + GraphNode* raster_required_for_activation_finished_node =
|
| + CreateGraphNodeForTask(
|
| + new_raster_required_for_activation_finished_task.get(),
|
| + priority++,
|
| + &graph);
|
| +
|
| + scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task(
|
| + CreateRasterFinishedTask());
|
| + GraphNode* raster_finished_node =
|
| + CreateGraphNodeForTask(new_raster_finished_task.get(),
|
| + priority++,
|
| + &graph);
|
| +
|
| for (RasterTaskVector::const_iterator it = raster_tasks().begin();
|
| it != raster_tasks().end(); ++it) {
|
| internal::RasterWorkerPoolTask* task = it->get();
|
| @@ -79,7 +98,14 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) {
|
| TaskMap::iterator image_it = image_tasks_.find(task);
|
| if (image_it != image_tasks_.end()) {
|
| internal::WorkerPoolTask* image_task = image_it->second.get();
|
| - graph.InsertRasterTask(image_task, task->dependencies());
|
| + CreateGraphNodeForImageTask(
|
| + image_task,
|
| + task->dependencies(),
|
| + priority++,
|
| + IsRasterTaskRequiredForActivation(task),
|
| + raster_required_for_activation_finished_node,
|
| + raster_finished_node,
|
| + &graph);
|
| continue;
|
| }
|
|
|
| @@ -99,10 +125,29 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) {
|
| base::Unretained(this),
|
| make_scoped_refptr(task))));
|
| image_tasks_[task] = new_image_task;
|
| - graph.InsertRasterTask(new_image_task.get(), task->dependencies());
|
| + CreateGraphNodeForImageTask(
|
| + new_image_task.get(),
|
| + task->dependencies(),
|
| + priority++,
|
| + IsRasterTaskRequiredForActivation(task),
|
| + raster_required_for_activation_finished_node,
|
| + raster_finished_node,
|
| + &graph);
|
| }
|
|
|
| - SetRasterTaskGraph(&graph);
|
| + SetTaskGraph(&graph);
|
| +
|
| + set_raster_finished_task(new_raster_finished_task);
|
| + set_raster_required_for_activation_finished_task(
|
| + new_raster_required_for_activation_finished_task);
|
| +}
|
| +
|
| +void ImageRasterWorkerPool::OnRasterTasksFinished() {
|
| + client()->DidFinishedRunningTasks();
|
| +}
|
| +
|
| +void ImageRasterWorkerPool::OnRasterTasksRequiredForActivationFinished() {
|
| + client()->DidFinishedRunningTasksRequiredForActivation();
|
| }
|
|
|
| void ImageRasterWorkerPool::OnRasterTaskCompleted(
|
| @@ -127,4 +172,27 @@ void ImageRasterWorkerPool::OnRasterTaskCompleted(
|
| image_tasks_.erase(task.get());
|
| }
|
|
|
| +// static
|
| +void ImageRasterWorkerPool::CreateGraphNodeForImageTask(
|
| + internal::WorkerPoolTask* image_task,
|
| + const TaskVector& decode_tasks,
|
| + unsigned priority,
|
| + bool is_required_for_activation,
|
| + GraphNode* raster_required_for_activation_finished_node,
|
| + GraphNode* raster_finished_node,
|
| + TaskGraph* graph) {
|
| + GraphNode* image_node = CreateGraphNodeForRasterTask(image_task,
|
| + decode_tasks,
|
| + priority,
|
| + graph);
|
| +
|
| + if (is_required_for_activation) {
|
| + raster_required_for_activation_finished_node->add_dependency();
|
| + image_node->add_dependent(raster_required_for_activation_finished_node);
|
| + }
|
| +
|
| + raster_finished_node->add_dependency();
|
| + image_node->add_dependent(raster_finished_node);
|
| +}
|
| +
|
| } // namespace cc
|
|
|