OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/resources/image_raster_worker_pool.h" | 5 #include "cc/resources/image_raster_worker_pool.h" |
6 | 6 |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "cc/resources/resource.h" | 8 #include "cc/resources/resource.h" |
9 #include "third_party/skia/include/core/SkDevice.h" | 9 #include "third_party/skia/include/core/SkDevice.h" |
10 | 10 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 RasterWorkerPool::SetRasterTasks(queue); | 72 RasterWorkerPool::SetRasterTasks(queue); |
73 | 73 |
74 RasterTaskGraph graph; | 74 RasterTaskGraph graph; |
75 for (RasterTaskVector::const_iterator it = raster_tasks().begin(); | 75 for (RasterTaskVector::const_iterator it = raster_tasks().begin(); |
76 it != raster_tasks().end(); ++it) { | 76 it != raster_tasks().end(); ++it) { |
77 internal::RasterWorkerPoolTask* task = it->get(); | 77 internal::RasterWorkerPoolTask* task = it->get(); |
78 | 78 |
79 TaskMap::iterator image_it = image_tasks_.find(task); | 79 TaskMap::iterator image_it = image_tasks_.find(task); |
80 if (image_it != image_tasks_.end()) { | 80 if (image_it != image_tasks_.end()) { |
81 internal::WorkerPoolTask* image_task = image_it->second.get(); | 81 internal::WorkerPoolTask* image_task = image_it->second.get(); |
82 graph.InsertRasterTask(image_task, task->dependencies()); | 82 graph.InsertRasterTask(image_task, |
| 83 task->dependencies(), |
| 84 IsRasterTaskRequiredForActivation(task)); |
83 continue; | 85 continue; |
84 } | 86 } |
85 | 87 |
86 // Acquire image for resource. | 88 // Acquire image for resource. |
87 resource_provider()->AcquireImage(task->resource()->id()); | 89 resource_provider()->AcquireImage(task->resource()->id()); |
88 | 90 |
89 // Map image for raster. | 91 // Map image for raster. |
90 uint8* buffer = resource_provider()->MapImage(task->resource()->id()); | 92 uint8* buffer = resource_provider()->MapImage(task->resource()->id()); |
91 int stride = resource_provider()->GetImageStride(task->resource()->id()); | 93 int stride = resource_provider()->GetImageStride(task->resource()->id()); |
92 | 94 |
93 scoped_refptr<internal::WorkerPoolTask> new_image_task( | 95 scoped_refptr<internal::WorkerPoolTask> new_image_task( |
94 new ImageWorkerPoolTaskImpl( | 96 new ImageWorkerPoolTaskImpl( |
95 task, | 97 task, |
96 buffer, | 98 buffer, |
97 stride, | 99 stride, |
98 base::Bind(&ImageRasterWorkerPool::OnRasterTaskCompleted, | 100 base::Bind(&ImageRasterWorkerPool::OnRasterTaskCompleted, |
99 base::Unretained(this), | 101 base::Unretained(this), |
100 make_scoped_refptr(task)))); | 102 make_scoped_refptr(task)))); |
101 image_tasks_[task] = new_image_task; | 103 image_tasks_[task] = new_image_task; |
102 graph.InsertRasterTask(new_image_task.get(), task->dependencies()); | 104 graph.InsertRasterTask(new_image_task.get(), |
| 105 task->dependencies(), |
| 106 IsRasterTaskRequiredForActivation(task)); |
103 } | 107 } |
104 | 108 |
105 SetRasterTaskGraph(&graph); | 109 SetRasterTaskGraph(&graph); |
106 } | 110 } |
107 | 111 |
| 112 void ImageRasterWorkerPool::OnRasterTasksFinished() { |
| 113 client()->DidFinishedRunningTasks(); |
| 114 } |
| 115 |
| 116 void ImageRasterWorkerPool::OnRasterTasksRequiredForActivationFinished() { |
| 117 client()->DidFinishedRunningTasksRequiredForActivation(); |
| 118 } |
| 119 |
108 void ImageRasterWorkerPool::OnRasterTaskCompleted( | 120 void ImageRasterWorkerPool::OnRasterTaskCompleted( |
109 scoped_refptr<internal::RasterWorkerPoolTask> task, | 121 scoped_refptr<internal::RasterWorkerPoolTask> task, |
110 bool was_canceled) { | 122 bool was_canceled) { |
111 TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted", | 123 TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted", |
112 "was_canceled", was_canceled); | 124 "was_canceled", was_canceled); |
113 | 125 |
114 DCHECK(image_tasks_.find(task.get()) != image_tasks_.end()); | 126 DCHECK(image_tasks_.find(task.get()) != image_tasks_.end()); |
115 | 127 |
116 // Balanced with MapImage() call in ScheduleTasks(). | 128 // Balanced with MapImage() call in ScheduleTasks(). |
117 resource_provider()->UnmapImage(task->resource()->id()); | 129 resource_provider()->UnmapImage(task->resource()->id()); |
118 | 130 |
119 // Bind image to resource. | 131 // Bind image to resource. |
120 resource_provider()->BindImage(task->resource()->id()); | 132 resource_provider()->BindImage(task->resource()->id()); |
121 | 133 |
122 task->DidRun(was_canceled); | 134 task->DidRun(was_canceled); |
123 task->DidComplete(); | 135 task->DidComplete(); |
124 task->DispatchCompletionCallback(); | 136 task->DispatchCompletionCallback(); |
125 | 137 |
126 image_tasks_.erase(task.get()); | 138 image_tasks_.erase(task.get()); |
127 } | 139 } |
128 | 140 |
129 } // namespace cc | 141 } // namespace cc |
OLD | NEW |