Chromium Code Reviews| Index: cc/resources/raster_worker_pool.h |
| diff --git a/cc/resources/raster_worker_pool.h b/cc/resources/raster_worker_pool.h |
| index 7a821fd1a82f75fb224fc30eb2891868cae8c3dd..b4a266a8fc0c3dd1bf8116e2a2bc98b7fee246ad 100644 |
| --- a/cc/resources/raster_worker_pool.h |
| +++ b/cc/resources/raster_worker_pool.h |
| @@ -12,22 +12,39 @@ |
| #include "cc/debug/rendering_stats_instrumentation.h" |
| #include "cc/resources/picture_pile_impl.h" |
| #include "cc/resources/raster_mode.h" |
| -#include "cc/resources/resource.h" |
| -#include "cc/resources/resource_provider.h" |
| +#include "cc/resources/resource_format.h" |
| +#include "cc/resources/task_graph_runner.h" |
| #include "cc/resources/tile_priority.h" |
| -#include "cc/resources/worker_pool.h" |
| -#include "third_party/khronos/GLES2/gl2.h" |
| class SkPixelRef; |
| namespace cc { |
| + |
| +class ContextProvider; |
| +class Resource; |
| +class ResourceProvider; |
| + |
| namespace internal { |
| +class CC_EXPORT WorkerPoolTask : public Task { |
|
vmpstr
2014/01/21 18:14:04
Do you think it's worth it to just merge the *Comp
alokp
2014/01/21 18:42:50
I agree. If Complete is the only extra, it seems w
reveman
2014/01/21 19:51:32
The raster tasks passed to the TaskGraphRunner by
vmpstr
2014/01/21 20:30:43
Right... I forgot about the uploads in PBRWP.
|
| + public: |
| + virtual void CompleteOnOriginThread() = 0; |
| + |
| + void WillComplete(); |
| + void DidComplete(); |
| + bool HasCompleted() const; |
| + |
| + protected: |
| + WorkerPoolTask(); |
| + virtual ~WorkerPoolTask(); |
| + |
| + private: |
| + bool did_complete_; |
| +}; |
| + |
| class CC_EXPORT RasterWorkerPoolTask |
| : public base::RefCounted<RasterWorkerPoolTask> { |
| public: |
| - typedef std::vector<scoped_refptr<WorkerPoolTask> > TaskVector; |
| - |
| // Returns true if |buffer| was written to. False indicate that |
| // the content of |buffer| is undefined and the resource doesn't |
| // need to be initialized. |
| @@ -47,14 +64,14 @@ class CC_EXPORT RasterWorkerPoolTask |
| bool HasCompleted() const; |
| const Resource* resource() const { return resource_; } |
| - const TaskVector& dependencies() const { return dependencies_; } |
| + const internal::Task::Vector& dependencies() const { return dependencies_; } |
|
sohanjg
2014/01/21 09:41:08
How is it helpful to change WorkerPoolTask to Task
reveman
2014/01/21 15:37:48
First, there's no base WorkerPool class anymore so
|
| bool use_gpu_rasterization() const { return use_gpu_rasterization_; } |
| protected: |
| friend class base::RefCounted<RasterWorkerPoolTask>; |
| RasterWorkerPoolTask(const Resource* resource, |
| - TaskVector* dependencies, |
| + internal::Task::Vector* dependencies, |
| bool use_gpu_rasterization); |
| virtual ~RasterWorkerPoolTask(); |
| @@ -63,7 +80,7 @@ class CC_EXPORT RasterWorkerPoolTask |
| bool did_complete_; |
| bool was_canceled_; |
| const Resource* resource_; |
| - TaskVector dependencies_; |
| + Task::Vector dependencies_; |
| bool use_gpu_rasterization_; |
| }; |
| @@ -93,7 +110,7 @@ class CC_EXPORT RasterWorkerPoolClient { |
| }; |
| // A worker thread pool that runs raster tasks. |
| -class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| +class CC_EXPORT RasterWorkerPool { |
| public: |
| class CC_EXPORT Task { |
| public: |
| @@ -110,8 +127,7 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| friend class RasterWorkerPool; |
| friend class RasterWorkerPoolTest; |
| - typedef internal::RasterWorkerPoolTask::TaskVector TaskVector; |
| - TaskVector tasks_; |
| + internal::Task::Vector tasks_; |
|
sohanjg
2014/01/21 09:41:08
And here from RasterWorkerPoolTask to Task ?
reveman
2014/01/21 15:37:48
Type didn't change. Just removed confusing typedef
|
| }; |
| Task(); |
| @@ -174,27 +190,9 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| virtual ~RasterWorkerPool(); |
| - void SetClient(RasterWorkerPoolClient* client); |
| - |
| - // Overidden from WorkerPool: |
| - virtual void Shutdown() OVERRIDE; |
| - |
| - // Schedule running of raster tasks in |queue| and all dependencies. |
| - // Previously scheduled tasks that are no longer needed to run |
| - // raster tasks in |queue| will be canceled unless already running. |
| - // Once scheduled, reply callbacks are guaranteed to run for all tasks |
| - // even if they later get canceled by another call to ScheduleTasks(). |
| - virtual void ScheduleTasks(RasterTask::Queue* queue) = 0; |
| - |
| - // Returns the target that needs to be used for raster task resources. |
| - virtual GLenum GetResourceTarget() const = 0; |
| + static void SetNumRasterThreads(int num_threads); |
| - // Returns the format that needs to be used for raster task resources. |
| - virtual ResourceFormat GetResourceFormat() const = 0; |
| - |
| - // Force a check for completed raster tasks. |
| - // Calls completion callbacks on completed tasks. |
| - virtual void CheckForCompletedTasks(); |
| + static int GetNumRasterThreads(); |
| // TODO(vmpstr): Figure out an elegant way to not pass this many parameters. |
| static RasterTask CreateRasterTask( |
| @@ -218,7 +216,30 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| RenderingStatsInstrumentation* stats_instrumentation, |
| const Task::Reply& reply); |
| + void SetClient(RasterWorkerPoolClient* client); |
| + |
| + // Tells the worker pool to shutdown after canceling all previously |
| + // scheduled tasks. Reply callbacks are still guaranteed to run. |
| + virtual void Shutdown(); |
| + |
| + // Schedule running of raster tasks in |queue| and all dependencies. |
| + // Previously scheduled tasks that are no longer needed to run |
| + // raster tasks in |queue| will be canceled unless already running. |
| + // Once scheduled, reply callbacks are guaranteed to run for all tasks |
| + // even if they later get canceled by another call to ScheduleTasks(). |
| + virtual void ScheduleTasks(RasterTask::Queue* queue) = 0; |
| + |
| + // Force a check for completed tasks. |
| + virtual void CheckForCompletedTasks(); |
| + |
| + // Returns the target that needs to be used for raster task resources. |
| + virtual unsigned GetResourceTarget() const = 0; |
| + |
| + // Returns the format that needs to be used for raster task resources. |
| + virtual ResourceFormat GetResourceFormat() const = 0; |
| + |
| protected: |
| + typedef internal::TaskGraphRunner::TaskGraph TaskGraph; |
| typedef std::vector<scoped_refptr<internal::WorkerPoolTask> > TaskVector; |
| typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> > |
| RasterTaskVector; |
| @@ -226,8 +247,8 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| RasterTaskDeque; |
| typedef base::hash_set<internal::RasterWorkerPoolTask*> RasterTaskSet; |
| typedef internal::RasterWorkerPoolTask* TaskMapKey; |
| - typedef base::hash_map<TaskMapKey, |
| - scoped_refptr<internal::WorkerPoolTask> > TaskMap; |
| + typedef base::hash_map<TaskMapKey, scoped_refptr<internal::WorkerPoolTask> > |
| + TaskMap; |
| RasterWorkerPool(ResourceProvider* resource_provider, |
| ContextProvider* context_provider); |
| @@ -235,6 +256,9 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| virtual void OnRasterTasksFinished() = 0; |
| virtual void OnRasterTasksRequiredForActivationFinished() = 0; |
| + void CheckForCompletedWorkerPoolTasks(); |
| + void SetTaskGraph(TaskGraph* graph); |
| + |
| void SetRasterTasks(RasterTask::Queue* queue); |
| bool IsRasterTaskRequiredForActivation( |
| internal::RasterWorkerPoolTask* task) const; |
| @@ -249,12 +273,11 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| return raster_tasks_required_for_activation_; |
| } |
| void set_raster_finished_task( |
| - scoped_refptr<internal::WorkerPoolTask> raster_finished_task) { |
| + internal::WorkerPoolTask* raster_finished_task) { |
| raster_finished_task_ = raster_finished_task; |
| } |
| void set_raster_required_for_activation_finished_task( |
| - scoped_refptr<internal::WorkerPoolTask> |
| - raster_required_for_activation_finished_task) { |
| + internal::WorkerPoolTask* raster_required_for_activation_finished_task) { |
| raster_required_for_activation_finished_task_ = |
| raster_required_for_activation_finished_task; |
| } |
| @@ -273,7 +296,7 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| static internal::GraphNode* CreateGraphNodeForRasterTask( |
| internal::WorkerPoolTask* raster_task, |
| - const TaskVector& decode_tasks, |
| + const internal::Task::Vector& decode_tasks, |
| unsigned priority, |
| TaskGraph* graph); |
| @@ -282,6 +305,7 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool { |
| void OnRasterRequiredForActivationFinished( |
| const internal::WorkerPoolTask* source); |
| + internal::NamespaceToken namespace_token_; |
| RasterWorkerPoolClient* client_; |
| ResourceProvider* resource_provider_; |
| ContextProvider* context_provider_; |