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 "base/values.h" | 8 #include "base/values.h" |
9 #include "cc/debug/traced_value.h" | 9 #include "cc/debug/traced_value.h" |
10 #include "cc/resources/resource.h" | 10 #include "cc/resources/resource.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 int stride_; | 51 int stride_; |
52 const Reply reply_; | 52 const Reply reply_; |
53 | 53 |
54 DISALLOW_COPY_AND_ASSIGN(ImageWorkerPoolTaskImpl); | 54 DISALLOW_COPY_AND_ASSIGN(ImageWorkerPoolTaskImpl); |
55 }; | 55 }; |
56 | 56 |
57 } // namespace | 57 } // namespace |
58 | 58 |
59 ImageRasterWorkerPool::ImageRasterWorkerPool( | 59 ImageRasterWorkerPool::ImageRasterWorkerPool( |
60 ResourceProvider* resource_provider, | 60 ResourceProvider* resource_provider, |
| 61 ContextProvider* context_provider, |
61 size_t num_threads, | 62 size_t num_threads, |
62 GLenum texture_target) | 63 GLenum texture_target) |
63 : RasterWorkerPool(resource_provider, num_threads), | 64 : RasterWorkerPool(resource_provider, context_provider, num_threads), |
64 texture_target_(texture_target), | 65 texture_target_(texture_target), |
65 raster_tasks_pending_(false), | 66 raster_tasks_pending_(false), |
66 raster_tasks_required_for_activation_pending_(false) { | 67 raster_tasks_required_for_activation_pending_(false) { |
67 } | 68 } |
68 | 69 |
69 ImageRasterWorkerPool::~ImageRasterWorkerPool() { | 70 ImageRasterWorkerPool::~ImageRasterWorkerPool() { |
70 DCHECK_EQ(0u, image_tasks_.size()); | 71 DCHECK_EQ(0u, image_tasks_.size()); |
71 } | 72 } |
72 | 73 |
73 void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) { | 74 void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) { |
(...skipping 19 matching lines...) Expand all Loading... |
93 priority++, | 94 priority++, |
94 &graph); | 95 &graph); |
95 | 96 |
96 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( | 97 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( |
97 CreateRasterFinishedTask()); | 98 CreateRasterFinishedTask()); |
98 internal::GraphNode* raster_finished_node = | 99 internal::GraphNode* raster_finished_node = |
99 CreateGraphNodeForTask(new_raster_finished_task.get(), | 100 CreateGraphNodeForTask(new_raster_finished_task.get(), |
100 priority++, | 101 priority++, |
101 &graph); | 102 &graph); |
102 | 103 |
| 104 RasterTaskVector gpu_raster_tasks; |
| 105 |
103 for (RasterTaskVector::const_iterator it = raster_tasks().begin(); | 106 for (RasterTaskVector::const_iterator it = raster_tasks().begin(); |
104 it != raster_tasks().end(); ++it) { | 107 it != raster_tasks().end(); ++it) { |
105 internal::RasterWorkerPoolTask* task = it->get(); | 108 internal::RasterWorkerPoolTask* task = it->get(); |
106 DCHECK(!task->HasCompleted()); | 109 DCHECK(!task->HasCompleted()); |
107 DCHECK(!task->WasCanceled()); | 110 DCHECK(!task->WasCanceled()); |
108 | 111 |
| 112 if (task->use_gpu_rasterization()) { |
| 113 gpu_raster_tasks.push_back(task); |
| 114 continue; |
| 115 } |
| 116 |
109 TaskMap::iterator image_it = image_tasks_.find(task); | 117 TaskMap::iterator image_it = image_tasks_.find(task); |
110 if (image_it != image_tasks_.end()) { | 118 if (image_it != image_tasks_.end()) { |
111 internal::WorkerPoolTask* image_task = image_it->second.get(); | 119 internal::WorkerPoolTask* image_task = image_it->second.get(); |
112 CreateGraphNodeForImageTask( | 120 CreateGraphNodeForImageTask( |
113 image_task, | 121 image_task, |
114 task->dependencies(), | 122 task->dependencies(), |
115 priority++, | 123 priority++, |
116 IsRasterTaskRequiredForActivation(task), | 124 IsRasterTaskRequiredForActivation(task), |
117 raster_required_for_activation_finished_node, | 125 raster_required_for_activation_finished_node, |
118 raster_finished_node, | 126 raster_finished_node, |
(...skipping 26 matching lines...) Expand all Loading... |
145 raster_finished_node, | 153 raster_finished_node, |
146 &graph); | 154 &graph); |
147 } | 155 } |
148 | 156 |
149 SetTaskGraph(&graph); | 157 SetTaskGraph(&graph); |
150 | 158 |
151 set_raster_finished_task(new_raster_finished_task); | 159 set_raster_finished_task(new_raster_finished_task); |
152 set_raster_required_for_activation_finished_task( | 160 set_raster_required_for_activation_finished_task( |
153 new_raster_required_for_activation_finished_task); | 161 new_raster_required_for_activation_finished_task); |
154 | 162 |
| 163 RunGpuRasterTasks(gpu_raster_tasks); |
| 164 |
155 TRACE_EVENT_ASYNC_STEP_INTO1( | 165 TRACE_EVENT_ASYNC_STEP_INTO1( |
156 "cc", "ScheduledTasks", this, "rasterizing", | 166 "cc", "ScheduledTasks", this, "rasterizing", |
157 "state", TracedValue::FromValue(StateAsValue().release())); | 167 "state", TracedValue::FromValue(StateAsValue().release())); |
158 } | 168 } |
159 | 169 |
160 GLenum ImageRasterWorkerPool::GetResourceTarget() const { | 170 GLenum ImageRasterWorkerPool::GetResourceTarget() const { |
161 return texture_target_; | 171 return texture_target_; |
162 } | 172 } |
163 | 173 |
164 ResourceFormat ImageRasterWorkerPool::GetResourceFormat() const { | 174 ResourceFormat ImageRasterWorkerPool::GetResourceFormat() const { |
(...skipping 15 matching lines...) Expand all Loading... |
180 "state", TracedValue::FromValue(StateAsValue().release())); | 190 "state", TracedValue::FromValue(StateAsValue().release())); |
181 client()->DidFinishRunningTasksRequiredForActivation(); | 191 client()->DidFinishRunningTasksRequiredForActivation(); |
182 } | 192 } |
183 | 193 |
184 void ImageRasterWorkerPool::OnRasterTaskCompleted( | 194 void ImageRasterWorkerPool::OnRasterTaskCompleted( |
185 scoped_refptr<internal::RasterWorkerPoolTask> task, | 195 scoped_refptr<internal::RasterWorkerPoolTask> task, |
186 bool was_canceled) { | 196 bool was_canceled) { |
187 TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted", | 197 TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted", |
188 "was_canceled", was_canceled); | 198 "was_canceled", was_canceled); |
189 | 199 |
| 200 DCHECK(!task->use_gpu_rasterization()); |
190 DCHECK(image_tasks_.find(task.get()) != image_tasks_.end()); | 201 DCHECK(image_tasks_.find(task.get()) != image_tasks_.end()); |
191 | 202 |
192 // Balanced with MapImage() call in ScheduleTasks(). | 203 // Balanced with MapImage() call in ScheduleTasks(). |
193 resource_provider()->UnmapImage(task->resource()->id()); | 204 resource_provider()->UnmapImage(task->resource()->id()); |
194 | 205 |
195 task->DidRun(was_canceled); | 206 task->DidRun(was_canceled); |
196 task->WillComplete(); | 207 task->WillComplete(); |
197 task->CompleteOnOriginThread(); | 208 task->CompleteOnOriginThread(); |
198 task->DidComplete(); | 209 task->DidComplete(); |
199 | 210 |
(...skipping 26 matching lines...) Expand all Loading... |
226 if (is_required_for_activation) { | 237 if (is_required_for_activation) { |
227 raster_required_for_activation_finished_node->add_dependency(); | 238 raster_required_for_activation_finished_node->add_dependency(); |
228 image_node->add_dependent(raster_required_for_activation_finished_node); | 239 image_node->add_dependent(raster_required_for_activation_finished_node); |
229 } | 240 } |
230 | 241 |
231 raster_finished_node->add_dependency(); | 242 raster_finished_node->add_dependency(); |
232 image_node->add_dependent(raster_finished_node); | 243 image_node->add_dependent(raster_finished_node); |
233 } | 244 } |
234 | 245 |
235 } // namespace cc | 246 } // namespace cc |
OLD | NEW |