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 |