Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(513)

Side by Side Diff: cc/resources/gpu_raster_worker_pool.cc

Issue 786583002: cc: Renaming Rasterizer and RasterWorkerPool interfaces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/gpu_raster_worker_pool.h" 5 #include "cc/resources/gpu_raster_worker_pool.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "cc/output/context_provider.h" 10 #include "cc/output/context_provider.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 const Resource* resource_; 69 const Resource* resource_;
70 SkMultiPictureDraw* multi_picture_draw_; 70 SkMultiPictureDraw* multi_picture_draw_;
71 bool use_distance_field_text_; 71 bool use_distance_field_text_;
72 72
73 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); 73 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl);
74 }; 74 };
75 75
76 } // namespace 76 } // namespace
77 77
78 // static 78 // static
79 scoped_ptr<RasterWorkerPool> GpuRasterWorkerPool::Create( 79 scoped_ptr<TileTaskWorkerPool> GpuTileTaskWorkerPool::Create(
80 base::SequencedTaskRunner* task_runner, 80 base::SequencedTaskRunner* task_runner,
81 ContextProvider* context_provider, 81 ContextProvider* context_provider,
82 ResourceProvider* resource_provider, 82 ResourceProvider* resource_provider,
83 bool use_distance_field_text) { 83 bool use_distance_field_text) {
84 return make_scoped_ptr<RasterWorkerPool>( 84 return make_scoped_ptr<TileTaskWorkerPool>(
85 new GpuRasterWorkerPool(task_runner, 85 new GpuTileTaskWorkerPool(task_runner, context_provider,
86 context_provider, 86 resource_provider, use_distance_field_text));
87 resource_provider,
88 use_distance_field_text));
89 } 87 }
90 88
91 GpuRasterWorkerPool::GpuRasterWorkerPool(base::SequencedTaskRunner* task_runner, 89 GpuTileTaskWorkerPool::GpuTileTaskWorkerPool(
92 ContextProvider* context_provider, 90 base::SequencedTaskRunner* task_runner,
93 ResourceProvider* resource_provider, 91 ContextProvider* context_provider,
94 bool use_distance_field_text) 92 ResourceProvider* resource_provider,
93 bool use_distance_field_text)
95 : task_runner_(task_runner), 94 : task_runner_(task_runner),
96 task_graph_runner_(new TaskGraphRunner), 95 task_graph_runner_(new TaskGraphRunner),
97 namespace_token_(task_graph_runner_->GetNamespaceToken()), 96 namespace_token_(task_graph_runner_->GetNamespaceToken()),
98 context_provider_(context_provider), 97 context_provider_(context_provider),
99 resource_provider_(resource_provider), 98 resource_provider_(resource_provider),
100 run_tasks_on_origin_thread_pending_(false), 99 run_tasks_on_origin_thread_pending_(false),
101 use_distance_field_text_(use_distance_field_text), 100 use_distance_field_text_(use_distance_field_text),
102 raster_finished_weak_ptr_factory_(this), 101 task_set_finished_weak_ptr_factory_(this),
103 weak_ptr_factory_(this) { 102 weak_ptr_factory_(this) {
104 DCHECK(context_provider_); 103 DCHECK(context_provider_);
105 } 104 }
106 105
107 GpuRasterWorkerPool::~GpuRasterWorkerPool() { 106 GpuTileTaskWorkerPool::~GpuTileTaskWorkerPool() {
108 DCHECK_EQ(0u, completed_tasks_.size()); 107 DCHECK_EQ(0u, completed_tasks_.size());
109 } 108 }
110 109
111 Rasterizer* GpuRasterWorkerPool::AsRasterizer() { 110 TileTaskRunner* GpuTileTaskWorkerPool::AsTileTaskRunner() {
112 return this; 111 return this;
113 } 112 }
114 113
115 void GpuRasterWorkerPool::SetClient(RasterizerClient* client) { 114 void GpuTileTaskWorkerPool::SetClient(TileTaskRunnerClient* client) {
116 client_ = client; 115 client_ = client;
117 } 116 }
118 117
119 void GpuRasterWorkerPool::Shutdown() { 118 void GpuTileTaskWorkerPool::Shutdown() {
120 TRACE_EVENT0("cc", "GpuRasterWorkerPool::Shutdown"); 119 TRACE_EVENT0("cc", "GpuTileTaskWorkerPool::Shutdown");
121 120
122 TaskGraph empty; 121 TaskGraph empty;
123 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); 122 task_graph_runner_->ScheduleTasks(namespace_token_, &empty);
124 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); 123 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_);
125 } 124 }
126 125
127 void GpuRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { 126 void GpuTileTaskWorkerPool::ScheduleTasks(TileTaskQueue* queue) {
128 TRACE_EVENT0("cc", "GpuRasterWorkerPool::ScheduleTasks"); 127 TRACE_EVENT0("cc", "GpuTileTaskWorkerPool::ScheduleTasks");
129 128
130 // Mark all task sets as pending. 129 // Mark all task sets as pending.
131 raster_pending_.set(); 130 tasks_pending_.set();
132 131
133 unsigned priority = kRasterTaskPriorityBase; 132 unsigned priority = kTileTaskPriorityBase;
134 133
135 graph_.Reset(); 134 graph_.Reset();
136 135
137 // Cancel existing OnRasterFinished callbacks. 136 // Cancel existing OnTaskSetFinished callbacks.
138 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); 137 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs();
139 138
140 scoped_refptr<RasterizerTask> new_raster_finished_tasks[kNumberOfTaskSets]; 139 scoped_refptr<TileTask> new_task_set_finished_tasks[kNumberOfTaskSets];
141 140
142 size_t task_count[kNumberOfTaskSets] = {0}; 141 size_t task_count[kNumberOfTaskSets] = {0};
143 142
144 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { 143 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
145 new_raster_finished_tasks[task_set] = CreateRasterFinishedTask( 144 new_task_set_finished_tasks[task_set] = CreateTaskSetFinishedTask(
146 task_runner_.get(), 145 task_runner_.get(),
147 base::Bind(&GpuRasterWorkerPool::OnRasterFinished, 146 base::Bind(&GpuTileTaskWorkerPool::OnTaskSetFinished,
148 raster_finished_weak_ptr_factory_.GetWeakPtr(), 147 task_set_finished_weak_ptr_factory_.GetWeakPtr(), task_set));
149 task_set));
150 } 148 }
151 149
152 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); 150 for (TileTaskQueue::Item::Vector::const_iterator it = queue->items.begin();
153 it != queue->items.end(); 151 it != queue->items.end(); ++it) {
154 ++it) { 152 const TileTaskQueue::Item& item = *it;
155 const RasterTaskQueue::Item& item = *it;
156 RasterTask* task = item.task; 153 RasterTask* task = item.task;
157 DCHECK(!task->HasCompleted()); 154 DCHECK(!task->HasCompleted());
158 155
159 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { 156 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
160 if (!item.task_sets[task_set]) 157 if (!item.task_sets[task_set])
161 continue; 158 continue;
162 159
163 ++task_count[task_set]; 160 ++task_count[task_set];
164 161
165 graph_.edges.push_back( 162 graph_.edges.push_back(
166 TaskGraph::Edge(task, new_raster_finished_tasks[task_set].get())); 163 TaskGraph::Edge(task, new_task_set_finished_tasks[task_set].get()));
167 } 164 }
168 165
169 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++); 166 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++);
170 } 167 }
171 168
172 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { 169 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
173 InsertNodeForTask(&graph_, 170 InsertNodeForTask(&graph_, new_task_set_finished_tasks[task_set].get(),
174 new_raster_finished_tasks[task_set].get(), 171 kTaskSetFinishedTaskPriority, task_count[task_set]);
175 kRasterFinishedTaskPriority,
176 task_count[task_set]);
177 } 172 }
178 173
179 ScheduleTasksOnOriginThread(this, &graph_); 174 ScheduleTasksOnOriginThread(this, &graph_);
180 task_graph_runner_->ScheduleTasks(namespace_token_, &graph_); 175 task_graph_runner_->ScheduleTasks(namespace_token_, &graph_);
181 176
182 ScheduleRunTasksOnOriginThread(); 177 ScheduleRunTasksOnOriginThread();
183 178
184 std::copy(new_raster_finished_tasks, 179 std::copy(new_task_set_finished_tasks,
185 new_raster_finished_tasks + kNumberOfTaskSets, 180 new_task_set_finished_tasks + kNumberOfTaskSets,
186 raster_finished_tasks_); 181 task_set_finished_tasks_);
187 } 182 }
188 183
189 void GpuRasterWorkerPool::CheckForCompletedTasks() { 184 void GpuTileTaskWorkerPool::CheckForCompletedTasks() {
190 TRACE_EVENT0("cc", "GpuRasterWorkerPool::CheckForCompletedTasks"); 185 TRACE_EVENT0("cc", "GpuTileTaskWorkerPool::CheckForCompletedTasks");
191 186
192 task_graph_runner_->CollectCompletedTasks(namespace_token_, 187 task_graph_runner_->CollectCompletedTasks(namespace_token_,
193 &completed_tasks_); 188 &completed_tasks_);
194 for (Task::Vector::const_iterator it = completed_tasks_.begin(); 189 for (Task::Vector::const_iterator it = completed_tasks_.begin();
195 it != completed_tasks_.end(); 190 it != completed_tasks_.end();
196 ++it) { 191 ++it) {
197 RasterizerTask* task = static_cast<RasterizerTask*>(it->get()); 192 TileTask* task = static_cast<TileTask*>(it->get());
198 193
199 task->WillComplete(); 194 task->WillComplete();
200 task->CompleteOnOriginThread(this); 195 task->CompleteOnOriginThread(this);
201 task->DidComplete(); 196 task->DidComplete();
202 197
203 task->RunReplyOnOriginThread(); 198 task->RunReplyOnOriginThread();
204 } 199 }
205 completed_tasks_.clear(); 200 completed_tasks_.clear();
206 } 201 }
207 202
208 scoped_ptr<RasterBuffer> GpuRasterWorkerPool::AcquireBufferForRaster( 203 scoped_ptr<RasterBuffer> GpuTileTaskWorkerPool::AcquireBufferForRaster(
209 const Resource* resource) { 204 const Resource* resource) {
210 return make_scoped_ptr<RasterBuffer>( 205 return make_scoped_ptr<RasterBuffer>(
211 new RasterBufferImpl(resource_provider_, 206 new RasterBufferImpl(resource_provider_,
212 resource, 207 resource,
213 &multi_picture_draw_, 208 &multi_picture_draw_,
214 use_distance_field_text_)); 209 use_distance_field_text_));
215 } 210 }
216 211
217 void GpuRasterWorkerPool::ReleaseBufferForRaster( 212 void GpuTileTaskWorkerPool::ReleaseBufferForRaster(
218 scoped_ptr<RasterBuffer> buffer) { 213 scoped_ptr<RasterBuffer> buffer) {
219 // Nothing to do here. RasterBufferImpl destructor cleans up after itself. 214 // Nothing to do here. RasterBufferImpl destructor cleans up after itself.
220 } 215 }
221 216
222 void GpuRasterWorkerPool::OnRasterFinished(TaskSet task_set) { 217 void GpuTileTaskWorkerPool::OnTaskSetFinished(TaskSet task_set) {
223 TRACE_EVENT1( 218 TRACE_EVENT1("cc", "GpuTileTaskWorkerPool::OnTaskSetFinished", "task_set",
224 "cc", "GpuRasterWorkerPool::OnRasterFinished", "task_set", task_set); 219 task_set);
225 220
226 DCHECK(raster_pending_[task_set]); 221 DCHECK(tasks_pending_[task_set]);
227 raster_pending_[task_set] = false; 222 tasks_pending_[task_set] = false;
228 client_->DidFinishRunningTasks(task_set); 223 client_->DidFinishRunningTileTasks(task_set);
229 } 224 }
230 225
231 void GpuRasterWorkerPool::ScheduleRunTasksOnOriginThread() { 226 void GpuTileTaskWorkerPool::ScheduleRunTasksOnOriginThread() {
232 if (run_tasks_on_origin_thread_pending_) 227 if (run_tasks_on_origin_thread_pending_)
233 return; 228 return;
234 229
235 task_runner_->PostTask( 230 task_runner_->PostTask(
236 FROM_HERE, 231 FROM_HERE, base::Bind(&GpuTileTaskWorkerPool::RunTasksOnOriginThread,
237 base::Bind(&GpuRasterWorkerPool::RunTasksOnOriginThread, 232 weak_ptr_factory_.GetWeakPtr()));
238 weak_ptr_factory_.GetWeakPtr()));
239 run_tasks_on_origin_thread_pending_ = true; 233 run_tasks_on_origin_thread_pending_ = true;
240 } 234 }
241 235
242 void GpuRasterWorkerPool::RunTasksOnOriginThread() { 236 void GpuTileTaskWorkerPool::RunTasksOnOriginThread() {
243 TRACE_EVENT0("cc", "GpuRasterWorkerPool::RunTasksOnOriginThread"); 237 TRACE_EVENT0("cc", "GpuTileTaskWorkerPool::RunTasksOnOriginThread");
244 238
245 DCHECK(run_tasks_on_origin_thread_pending_); 239 DCHECK(run_tasks_on_origin_thread_pending_);
246 run_tasks_on_origin_thread_pending_ = false; 240 run_tasks_on_origin_thread_pending_ = false;
247 241
248 ScopedGpuRaster gpu_raster(context_provider_); 242 ScopedGpuRaster gpu_raster(context_provider_);
249 task_graph_runner_->RunUntilIdle(); 243 task_graph_runner_->RunUntilIdle();
250 244
251 // Draw each all of the pictures that were collected. This will also clear 245 // Draw each all of the pictures that were collected. This will also clear
252 // the pictures and canvases added to |multi_picture_draw_| 246 // the pictures and canvases added to |multi_picture_draw_|
253 multi_picture_draw_.draw(); 247 multi_picture_draw_.draw();
254 } 248 }
255 249
256 } // namespace cc 250 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698