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 389ac4178e47cce50d66d9c53789e290e023419d..b2ea581d7ba7d9c5d3eaeac92cdf877ad758b595 100644 |
| --- a/cc/resources/raster_worker_pool.h |
| +++ b/cc/resources/raster_worker_pool.h |
| @@ -41,7 +41,10 @@ class CC_EXPORT WorkerPoolTaskClient { |
| class CC_EXPORT WorkerPoolTask : public Task { |
| public: |
| + typedef std::vector<scoped_refptr<WorkerPoolTask> > Vector; |
| + |
| virtual void ScheduleOnOriginThread(WorkerPoolTaskClient* client) = 0; |
| + virtual void RunOnOriginThread() = 0; |
| virtual void CompleteOnOriginThread(WorkerPoolTaskClient* client) = 0; |
| virtual void RunReplyOnOriginThread() = 0; |
| @@ -63,23 +66,19 @@ class CC_EXPORT WorkerPoolTask : public Task { |
| class CC_EXPORT RasterWorkerPoolTask : public WorkerPoolTask { |
|
reveman
2014/02/14 16:11:53
should now be relatively easy to remove this class
|
| public: |
| - virtual void RunOnOriginThread(ResourceProvider* resource_provider, |
| - ContextProvider* context_provider) = 0; |
| - |
| const Resource* resource() const { return resource_; } |
| - const internal::Task::Vector& dependencies() const { return dependencies_; } |
| - bool use_gpu_rasterization() const { return use_gpu_rasterization_; } |
| + const internal::WorkerPoolTask::Vector& dependencies() const { |
| + return dependencies_; |
| + } |
| protected: |
| RasterWorkerPoolTask(const Resource* resource, |
| - internal::Task::Vector* dependencies, |
| - bool use_gpu_rasterization); |
| + internal::WorkerPoolTask::Vector* dependencies); |
| virtual ~RasterWorkerPoolTask(); |
| private: |
| const Resource* resource_; |
| - Task::Vector dependencies_; |
| - bool use_gpu_rasterization_; |
| + WorkerPoolTask::Vector dependencies_; |
| }; |
| } // namespace internal |
| @@ -94,101 +93,37 @@ class CC_EXPORT RasterWorkerPoolClient { |
| virtual ~RasterWorkerPoolClient() {} |
| }; |
| -// A worker thread pool that runs raster tasks. |
| -class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| - public: |
| - class CC_EXPORT Task { |
| - public: |
| - typedef base::Callback<void(bool was_canceled)> Reply; |
| - |
| - class CC_EXPORT Set { |
| - public: |
| - Set(); |
| - ~Set(); |
| - |
| - void Insert(const Task& task); |
| - |
| - private: |
| - friend class RasterWorkerPool; |
| +struct CC_EXPORT RasterTaskQueue { |
| + struct CC_EXPORT Task { |
| + typedef std::vector<Task> Vector; |
| - internal::Task::Vector tasks_; |
| - }; |
| - |
| - Task(); |
| + Task(internal::RasterWorkerPoolTask* task, bool required_for_activation); |
| ~Task(); |
| - // Returns true if Task is null (doesn't refer to anything). |
| - bool is_null() const { return !internal_.get(); } |
| - |
| - // Returns the Task into an uninitialized state. |
| - void Reset(); |
| - |
| - protected: |
| - friend class RasterWorkerPool; |
| - |
| - explicit Task(internal::WorkerPoolTask* internal); |
| + static bool IsRequiredForActivation(const Task& task) { |
| + return task.required_for_activation; |
| + } |
| - scoped_refptr<internal::WorkerPoolTask> internal_; |
| + scoped_refptr<internal::RasterWorkerPoolTask> task; |
| + bool required_for_activation; |
| }; |
| - class CC_EXPORT RasterTask { |
| - public: |
| - typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, |
| - bool was_canceled)> Reply; |
| - |
| - class CC_EXPORT Queue { |
| - public: |
| - Queue(); |
| - ~Queue(); |
| - |
| - void Reset(); |
| - void Append(const RasterTask& task, bool required_for_activation); |
| - void Swap(Queue* other); |
| - |
| - size_t count() const { return tasks_.size(); } |
| - size_t required_for_activation_count() const { |
| - return required_for_activation_count_; |
| - } |
| + RasterTaskQueue(); |
| + ~RasterTaskQueue(); |
| - private: |
| - friend class RasterWorkerPool; |
| + void Swap(RasterTaskQueue* other); |
| + void Reset(); |
| - struct QueuedTask { |
| - typedef std::vector<QueuedTask> Vector; |
| - |
| - QueuedTask(internal::RasterWorkerPoolTask* task, |
| - bool required_for_activation); |
| - ~QueuedTask(); |
| - |
| - scoped_refptr<internal::RasterWorkerPoolTask> task; |
| - bool required_for_activation; |
| - }; |
| - |
| - QueuedTask::Vector tasks_; |
| - size_t required_for_activation_count_; |
| - }; |
| - |
| - RasterTask(); |
| - ~RasterTask(); |
| - |
| - // Returns true if Task is null (doesn't refer to anything). |
| - bool is_null() const { return !internal_.get(); } |
| - |
| - // Returns the Task into an uninitialized state. |
| - void Reset(); |
| - |
| - protected: |
| - friend class RasterWorkerPool; |
| - |
| - explicit RasterTask(internal::RasterWorkerPoolTask* internal); |
| - |
| - scoped_refptr<internal::RasterWorkerPoolTask> internal_; |
| - }; |
| + Task::Vector tasks; |
| + size_t required_for_activation_count; |
| +}; |
| +// A worker thread pool that runs raster tasks. |
| +class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| + public: |
| virtual ~RasterWorkerPool(); |
| static void SetNumRasterThreads(int num_threads); |
| - |
| static int GetNumRasterThreads(); |
| static internal::TaskGraphRunner* GetTaskGraphRunner(); |
| @@ -199,7 +134,7 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| static unsigned kRasterTaskPriorityBase; |
| // TODO(vmpstr): Figure out an elegant way to not pass this many parameters. |
| - static RasterTask CreateRasterTask( |
| + static scoped_refptr<internal::RasterWorkerPoolTask> CreateRasterTask( |
|
reveman
2014/02/14 16:11:53
Fyi, I'll remove this in follow up patch that make
vmpstr
2014/02/14 17:16:51
That would be awesome.
|
| const Resource* resource, |
| PicturePileImpl* picture_pile, |
| const gfx::Rect& content_rect, |
| @@ -209,16 +144,16 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| int layer_id, |
| const void* tile_id, |
| int source_frame_number, |
| - bool use_gpu_rasterization, |
| RenderingStatsInstrumentation* rendering_stats, |
| - const RasterTask::Reply& reply, |
| - Task::Set* dependencies); |
| + const base::Callback<void(const PicturePileImpl::Analysis&, bool)>& reply, |
| + internal::WorkerPoolTask::Vector* dependencies, |
| + ContextProvider* context_provider); |
| - static Task CreateImageDecodeTask( |
| + static scoped_refptr<internal::WorkerPoolTask> CreateImageDecodeTask( |
| SkPixelRef* pixel_ref, |
| int layer_id, |
| RenderingStatsInstrumentation* rendering_stats, |
| - const Task::Reply& reply); |
| + const base::Callback<void(bool was_canceled)>& reply); |
| void SetClient(RasterWorkerPoolClient* client); |
| @@ -231,7 +166,7 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| // 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; |
| + virtual void ScheduleTasks(RasterTaskQueue* queue) = 0; |
| // Force a check for completed tasks. |
| virtual void CheckForCompletedTasks() = 0; |
| @@ -245,8 +180,8 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| protected: |
| class RasterTaskQueueIterator { |
| public: |
| - explicit RasterTaskQueueIterator(const RasterTask::Queue* queue) |
| - : tasks_(&queue->tasks_), current_index_(0u) {} |
| + explicit RasterTaskQueueIterator(const RasterTaskQueue* queue) |
| + : tasks_(&queue->tasks), current_index_(0u) {} |
| ~RasterTaskQueueIterator() {} |
| bool required_for_activation() const { |
| @@ -273,7 +208,7 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| operator bool() const { return current_index_ < tasks_->size(); } |
| private: |
| - const RasterTask::Queue::QueuedTask::Vector* tasks_; |
| + const RasterTaskQueue::Task::Vector* tasks_; |
| size_t current_index_; |
| }; |
| typedef std::vector<scoped_refptr<internal::WorkerPoolTask> > TaskVector; |
| @@ -282,8 +217,7 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| RasterTaskVector; |
| RasterWorkerPool(internal::TaskGraphRunner* task_graph_runner, |
| - ResourceProvider* resource_provider, |
| - ContextProvider* context_provider); |
| + ResourceProvider* resource_provider); |
| virtual void OnRasterTasksFinished() = 0; |
| virtual void OnRasterTasksRequiredForActivationFinished() = 0; |
| @@ -291,30 +225,32 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| void SetTaskGraph(internal::TaskGraph* graph); |
| void CollectCompletedWorkerPoolTasks(internal::Task::Vector* completed_tasks); |
| - // Run raster tasks that use GPU on current thread. |
| - void RunGpuRasterTasks(const RasterTaskVector& tasks); |
| - void CheckForCompletedGpuRasterTasks(); |
| - |
| RasterWorkerPoolClient* client() const { return client_; } |
| ResourceProvider* resource_provider() const { return resource_provider_; } |
| - ContextProvider* context_provider() const { return context_provider_; } |
| void set_raster_finished_task( |
| internal::WorkerPoolTask* raster_finished_task) { |
| raster_finished_task_ = raster_finished_task; |
| } |
| + internal::WorkerPoolTask* raster_finished_task() const { |
| + return raster_finished_task_.get(); |
| + } |
| void set_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; |
| } |
| + internal::WorkerPoolTask* raster_required_for_activation_finished_task() |
| + const { |
| + return raster_required_for_activation_finished_task_.get(); |
| + } |
| scoped_refptr<internal::WorkerPoolTask> CreateRasterFinishedTask(); |
| scoped_refptr<internal::WorkerPoolTask> |
| CreateRasterRequiredForActivationFinishedTask( |
| size_t tasks_required_for_activation_count); |
| - scoped_ptr<base::Value> ScheduledStateAsValue() const; |
| + void RunTaskOnOriginThread(internal::WorkerPoolTask* task); |
| static void InsertNodeForTask(internal::TaskGraph* graph, |
| internal::WorkerPoolTask* task, |
| @@ -324,7 +260,7 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| static void InsertNodeForRasterTask( |
| internal::TaskGraph* graph, |
| internal::WorkerPoolTask* task, |
| - const internal::Task::Vector& decode_tasks, |
| + const internal::WorkerPoolTask::Vector& decode_tasks, |
| unsigned priority); |
| private: |
| @@ -336,8 +272,6 @@ class CC_EXPORT RasterWorkerPool : public internal::WorkerPoolTaskClient { |
| internal::NamespaceToken namespace_token_; |
| RasterWorkerPoolClient* client_; |
| ResourceProvider* resource_provider_; |
| - ContextProvider* context_provider_; |
| - TaskDeque completed_gpu_raster_tasks_; |
| scoped_refptr<internal::WorkerPoolTask> raster_finished_task_; |
| scoped_refptr<internal::WorkerPoolTask> |