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

Side by Side Diff: cc/resources/raster_worker_pool.h

Issue 110883015: Add preliminary support for hw-accelerated tile rasterization. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: avoid implementing TestContextProvider::GrContext for now Created 6 years, 11 months 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 | Annotate | Revision Log
« no previous file with comments | « cc/resources/pixel_buffer_raster_worker_pool.cc ('k') | cc/resources/raster_worker_pool.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef CC_RESOURCES_RASTER_WORKER_POOL_H_ 5 #ifndef CC_RESOURCES_RASTER_WORKER_POOL_H_
6 #define CC_RESOURCES_RASTER_WORKER_POOL_H_ 6 #define CC_RESOURCES_RASTER_WORKER_POOL_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 16 matching lines...) Expand all
27 public: 27 public:
28 typedef std::vector<scoped_refptr<WorkerPoolTask> > TaskVector; 28 typedef std::vector<scoped_refptr<WorkerPoolTask> > TaskVector;
29 29
30 // Returns true if |buffer| was written to. False indicate that 30 // Returns true if |buffer| was written to. False indicate that
31 // the content of |buffer| is undefined and the resource doesn't 31 // the content of |buffer| is undefined and the resource doesn't
32 // need to be initialized. 32 // need to be initialized.
33 virtual bool RunOnWorkerThread(unsigned thread_index, 33 virtual bool RunOnWorkerThread(unsigned thread_index,
34 void* buffer, 34 void* buffer,
35 gfx::Size size, 35 gfx::Size size,
36 int stride) = 0; 36 int stride) = 0;
37 virtual void RunOnOriginThread(ResourceProvider* resource_provider,
38 ContextProvider* context_provider) = 0;
37 virtual void CompleteOnOriginThread() = 0; 39 virtual void CompleteOnOriginThread() = 0;
38 40
39 void DidRun(bool was_canceled); 41 void DidRun(bool was_canceled);
40 bool HasFinishedRunning() const; 42 bool HasFinishedRunning() const;
41 bool WasCanceled() const; 43 bool WasCanceled() const;
42 void WillComplete(); 44 void WillComplete();
43 void DidComplete(); 45 void DidComplete();
44 bool HasCompleted() const; 46 bool HasCompleted() const;
45 47
46 const Resource* resource() const { return resource_; } 48 const Resource* resource() const { return resource_; }
47 const TaskVector& dependencies() const { return dependencies_; } 49 const TaskVector& dependencies() const { return dependencies_; }
50 bool use_gpu_rasterization() const { return use_gpu_rasterization_; }
48 51
49 protected: 52 protected:
50 friend class base::RefCounted<RasterWorkerPoolTask>; 53 friend class base::RefCounted<RasterWorkerPoolTask>;
51 54
52 RasterWorkerPoolTask(const Resource* resource, TaskVector* dependencies); 55 RasterWorkerPoolTask(const Resource* resource,
56 TaskVector* dependencies,
57 bool use_gpu_rasterization);
53 virtual ~RasterWorkerPoolTask(); 58 virtual ~RasterWorkerPoolTask();
54 59
55 private: 60 private:
56 bool did_run_; 61 bool did_run_;
57 bool did_complete_; 62 bool did_complete_;
58 bool was_canceled_; 63 bool was_canceled_;
59 const Resource* resource_; 64 const Resource* resource_;
60 TaskVector dependencies_; 65 TaskVector dependencies_;
66 bool use_gpu_rasterization_;
61 }; 67 };
62 68
63 } // namespace internal 69 } // namespace internal
64 } // namespace cc 70 } // namespace cc
65 71
66 #if defined(COMPILER_GCC) 72 #if defined(COMPILER_GCC)
67 namespace BASE_HASH_NAMESPACE { 73 namespace BASE_HASH_NAMESPACE {
68 template <> struct hash<cc::internal::RasterWorkerPoolTask*> { 74 template <> struct hash<cc::internal::RasterWorkerPoolTask*> {
69 size_t operator()(cc::internal::RasterWorkerPoolTask* ptr) const { 75 size_t operator()(cc::internal::RasterWorkerPoolTask* ptr) const {
70 return hash<size_t>()(reinterpret_cast<size_t>(ptr)); 76 return hash<size_t>()(reinterpret_cast<size_t>(ptr));
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 168
163 explicit RasterTask(internal::RasterWorkerPoolTask* internal); 169 explicit RasterTask(internal::RasterWorkerPoolTask* internal);
164 170
165 scoped_refptr<internal::RasterWorkerPoolTask> internal_; 171 scoped_refptr<internal::RasterWorkerPoolTask> internal_;
166 }; 172 };
167 173
168 virtual ~RasterWorkerPool(); 174 virtual ~RasterWorkerPool();
169 175
170 void SetClient(RasterWorkerPoolClient* client); 176 void SetClient(RasterWorkerPoolClient* client);
171 177
172 // Tells the worker pool to shutdown after canceling all previously 178 // Overidden from WorkerPool:
173 // scheduled tasks. Reply callbacks are still guaranteed to run.
174 virtual void Shutdown() OVERRIDE; 179 virtual void Shutdown() OVERRIDE;
175 180
176 // Schedule running of raster tasks in |queue| and all dependencies. 181 // Schedule running of raster tasks in |queue| and all dependencies.
177 // Previously scheduled tasks that are no longer needed to run 182 // Previously scheduled tasks that are no longer needed to run
178 // raster tasks in |queue| will be canceled unless already running. 183 // raster tasks in |queue| will be canceled unless already running.
179 // Once scheduled, reply callbacks are guaranteed to run for all tasks 184 // Once scheduled, reply callbacks are guaranteed to run for all tasks
180 // even if they later get canceled by another call to ScheduleTasks(). 185 // even if they later get canceled by another call to ScheduleTasks().
181 virtual void ScheduleTasks(RasterTask::Queue* queue) = 0; 186 virtual void ScheduleTasks(RasterTask::Queue* queue) = 0;
182 187
183 // Returns the target that needs to be used for raster task resources. 188 // Returns the target that needs to be used for raster task resources.
184 virtual GLenum GetResourceTarget() const = 0; 189 virtual GLenum GetResourceTarget() const = 0;
185 190
186 // Returns the format that needs to be used for raster task resources. 191 // Returns the format that needs to be used for raster task resources.
187 virtual ResourceFormat GetResourceFormat() const = 0; 192 virtual ResourceFormat GetResourceFormat() const = 0;
188 193
194 // Force a check for completed raster tasks.
195 // Calls completion callbacks on completed tasks.
196 virtual void CheckForCompletedTasks();
197
189 // TODO(vmpstr): Figure out an elegant way to not pass this many parameters. 198 // TODO(vmpstr): Figure out an elegant way to not pass this many parameters.
190 static RasterTask CreateRasterTask( 199 static RasterTask CreateRasterTask(
191 const Resource* resource, 200 const Resource* resource,
192 PicturePileImpl* picture_pile, 201 PicturePileImpl* picture_pile,
193 gfx::Rect content_rect, 202 gfx::Rect content_rect,
194 float contents_scale, 203 float contents_scale,
195 RasterMode raster_mode, 204 RasterMode raster_mode,
196 TileResolution tile_resolution, 205 TileResolution tile_resolution,
197 int layer_id, 206 int layer_id,
198 const void* tile_id, 207 const void* tile_id,
199 int source_frame_number, 208 int source_frame_number,
209 bool use_gpu_rasterization,
200 RenderingStatsInstrumentation* rendering_stats, 210 RenderingStatsInstrumentation* rendering_stats,
201 const RasterTask::Reply& reply, 211 const RasterTask::Reply& reply,
202 Task::Set* dependencies); 212 Task::Set* dependencies);
203 213
204 static Task CreateImageDecodeTask( 214 static Task CreateImageDecodeTask(
205 SkPixelRef* pixel_ref, 215 SkPixelRef* pixel_ref,
206 int layer_id, 216 int layer_id,
207 RenderingStatsInstrumentation* stats_instrumentation, 217 RenderingStatsInstrumentation* stats_instrumentation,
208 const Task::Reply& reply); 218 const Task::Reply& reply);
209 219
210 protected: 220 protected:
211 typedef std::vector<scoped_refptr<internal::WorkerPoolTask> > TaskVector; 221 typedef std::vector<scoped_refptr<internal::WorkerPoolTask> > TaskVector;
212 typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> > 222 typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> >
213 RasterTaskVector; 223 RasterTaskVector;
224 typedef std::deque<scoped_refptr<internal::RasterWorkerPoolTask> >
225 RasterTaskDeque;
214 typedef base::hash_set<internal::RasterWorkerPoolTask*> RasterTaskSet; 226 typedef base::hash_set<internal::RasterWorkerPoolTask*> RasterTaskSet;
215 typedef internal::RasterWorkerPoolTask* TaskMapKey; 227 typedef internal::RasterWorkerPoolTask* TaskMapKey;
216 typedef base::hash_map<TaskMapKey, 228 typedef base::hash_map<TaskMapKey,
217 scoped_refptr<internal::WorkerPoolTask> > TaskMap; 229 scoped_refptr<internal::WorkerPoolTask> > TaskMap;
218 230
219 RasterWorkerPool(ResourceProvider* resource_provider, size_t num_threads); 231 RasterWorkerPool(ResourceProvider* resource_provider,
232 ContextProvider* context_provider,
233 size_t num_threads);
220 234
221 virtual void OnRasterTasksFinished() = 0; 235 virtual void OnRasterTasksFinished() = 0;
222 virtual void OnRasterTasksRequiredForActivationFinished() = 0; 236 virtual void OnRasterTasksRequiredForActivationFinished() = 0;
223 237
224 void SetRasterTasks(RasterTask::Queue* queue); 238 void SetRasterTasks(RasterTask::Queue* queue);
225 bool IsRasterTaskRequiredForActivation( 239 bool IsRasterTaskRequiredForActivation(
226 internal::RasterWorkerPoolTask* task) const; 240 internal::RasterWorkerPoolTask* task) const;
241 // Run raster tasks that use GPU on current thread.
242 void RunGpuRasterTasks(const RasterTaskVector& tasks);
227 243
228 RasterWorkerPoolClient* client() const { return client_; } 244 RasterWorkerPoolClient* client() const { return client_; }
229 ResourceProvider* resource_provider() const { return resource_provider_; } 245 ResourceProvider* resource_provider() const { return resource_provider_; }
246 ContextProvider* context_provider() const { return context_provider_; }
230 const RasterTaskVector& raster_tasks() const { return raster_tasks_; } 247 const RasterTaskVector& raster_tasks() const { return raster_tasks_; }
231 const RasterTaskSet& raster_tasks_required_for_activation() const { 248 const RasterTaskSet& raster_tasks_required_for_activation() const {
232 return raster_tasks_required_for_activation_; 249 return raster_tasks_required_for_activation_;
233 } 250 }
234 void set_raster_finished_task( 251 void set_raster_finished_task(
235 scoped_refptr<internal::WorkerPoolTask> raster_finished_task) { 252 scoped_refptr<internal::WorkerPoolTask> raster_finished_task) {
236 raster_finished_task_ = raster_finished_task; 253 raster_finished_task_ = raster_finished_task;
237 } 254 }
238 void set_raster_required_for_activation_finished_task( 255 void set_raster_required_for_activation_finished_task(
239 scoped_refptr<internal::WorkerPoolTask> 256 scoped_refptr<internal::WorkerPoolTask>
(...skipping 19 matching lines...) Expand all
259 unsigned priority, 276 unsigned priority,
260 TaskGraph* graph); 277 TaskGraph* graph);
261 278
262 private: 279 private:
263 void OnRasterFinished(const internal::WorkerPoolTask* source); 280 void OnRasterFinished(const internal::WorkerPoolTask* source);
264 void OnRasterRequiredForActivationFinished( 281 void OnRasterRequiredForActivationFinished(
265 const internal::WorkerPoolTask* source); 282 const internal::WorkerPoolTask* source);
266 283
267 RasterWorkerPoolClient* client_; 284 RasterWorkerPoolClient* client_;
268 ResourceProvider* resource_provider_; 285 ResourceProvider* resource_provider_;
286 ContextProvider* context_provider_;
269 RasterTask::Queue::TaskVector raster_tasks_; 287 RasterTask::Queue::TaskVector raster_tasks_;
270 RasterTask::Queue::TaskSet raster_tasks_required_for_activation_; 288 RasterTask::Queue::TaskSet raster_tasks_required_for_activation_;
289 RasterTaskDeque completed_gpu_raster_tasks_;
271 290
272 scoped_refptr<internal::WorkerPoolTask> raster_finished_task_; 291 scoped_refptr<internal::WorkerPoolTask> raster_finished_task_;
273 scoped_refptr<internal::WorkerPoolTask> 292 scoped_refptr<internal::WorkerPoolTask>
274 raster_required_for_activation_finished_task_; 293 raster_required_for_activation_finished_task_;
275 base::WeakPtrFactory<RasterWorkerPool> weak_ptr_factory_; 294 base::WeakPtrFactory<RasterWorkerPool> weak_ptr_factory_;
276 }; 295 };
277 296
278 } // namespace cc 297 } // namespace cc
279 298
280 #endif // CC_RESOURCES_RASTER_WORKER_POOL_H_ 299 #endif // CC_RESOURCES_RASTER_WORKER_POOL_H_
OLDNEW
« no previous file with comments | « cc/resources/pixel_buffer_raster_worker_pool.cc ('k') | cc/resources/raster_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698