| Index: cc/resources/raster_worker_pool.h
|
| diff --git a/cc/resources/raster_worker_pool.h b/cc/resources/raster_worker_pool.h
|
| index f168cbc8b7b68e0eff3b3de3dfca83c5ee378d1b..c868be757903354a754900206cfab8e503970dcf 100644
|
| --- a/cc/resources/raster_worker_pool.h
|
| +++ b/cc/resources/raster_worker_pool.h
|
| @@ -30,7 +30,7 @@ namespace internal {
|
| class CC_EXPORT RasterWorkerPoolTask
|
| : public base::RefCounted<RasterWorkerPoolTask> {
|
| public:
|
| - typedef std::vector<scoped_refptr<RasterWorkerPoolTask> > TaskVector;
|
| + typedef std::vector<scoped_refptr<WorkerPoolTask> > TaskVector;
|
|
|
| // Returns true if |device| was written to. False indicate that
|
| // the content of |device| is undefined and the resource doesn't
|
| @@ -45,15 +45,12 @@ class CC_EXPORT RasterWorkerPoolTask
|
| bool HasCompleted() const;
|
|
|
| const Resource* resource() const { return resource_; }
|
| - const WorkerPoolTask::TaskVector& dependencies() const {
|
| - return dependencies_;
|
| - }
|
| + const TaskVector& dependencies() const { return dependencies_; }
|
|
|
| protected:
|
| friend class base::RefCounted<RasterWorkerPoolTask>;
|
|
|
| - RasterWorkerPoolTask(const Resource* resource,
|
| - WorkerPoolTask::TaskVector* dependencies);
|
| + RasterWorkerPoolTask(const Resource* resource, TaskVector* dependencies);
|
| virtual ~RasterWorkerPoolTask();
|
|
|
| private:
|
| @@ -61,7 +58,7 @@ class CC_EXPORT RasterWorkerPoolTask
|
| bool did_complete_;
|
| bool was_canceled_;
|
| const Resource* resource_;
|
| - WorkerPoolTask::TaskVector dependencies_;
|
| + TaskVector dependencies_;
|
| };
|
|
|
| } // namespace internal
|
| @@ -128,7 +125,7 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool {
|
| friend class RasterWorkerPool;
|
| friend class RasterWorkerPoolTest;
|
|
|
| - typedef internal::WorkerPoolTask::TaskVector TaskVector;
|
| + typedef internal::RasterWorkerPoolTask::TaskVector TaskVector;
|
| TaskVector tasks_;
|
| };
|
|
|
| @@ -157,8 +154,6 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool {
|
|
|
| class CC_EXPORT Queue {
|
| public:
|
| - typedef internal::RasterWorkerPoolTask::TaskVector TaskVector;
|
| -
|
| Queue();
|
| ~Queue();
|
|
|
| @@ -167,6 +162,8 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool {
|
| private:
|
| friend class RasterWorkerPool;
|
|
|
| + typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> >
|
| + TaskVector;
|
| TaskVector tasks_;
|
| typedef base::hash_set<internal::RasterWorkerPoolTask*> TaskSet;
|
| TaskSet tasks_required_for_activation_;
|
| @@ -182,7 +179,6 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool {
|
| void Reset();
|
|
|
| protected:
|
| - friend class PixelBufferRasterWorkerPool;
|
| friend class RasterWorkerPool;
|
| friend class RasterWorkerPoolTest;
|
|
|
| @@ -217,7 +213,7 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool {
|
| const RasterTaskMetadata& metadata,
|
| RenderingStatsInstrumentation* rendering_stats,
|
| const RasterTask::Reply& reply,
|
| - Task::Set& dependencies);
|
| + Task::Set* dependencies);
|
|
|
| static Task CreateImageDecodeTask(
|
| skia::LazyPixelRef* pixel_ref,
|
| @@ -226,28 +222,38 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool {
|
| const Task::Reply& reply);
|
|
|
| protected:
|
| - class RootTask {
|
| + typedef std::vector<scoped_refptr<internal::WorkerPoolTask> > TaskVector;
|
| + typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> >
|
| + RasterTaskVector;
|
| + typedef internal::RasterWorkerPoolTask* TaskMapKey;
|
| + typedef base::hash_map<TaskMapKey,
|
| + scoped_refptr<internal::WorkerPoolTask> > TaskMap;
|
| +
|
| + class CC_EXPORT RasterTaskGraph {
|
| public:
|
| - RootTask();
|
| - explicit RootTask(internal::WorkerPoolTask::TaskVector* dependencies);
|
| - RootTask(const base::Closure& callback,
|
| - internal::WorkerPoolTask::TaskVector* dependencies);
|
| - ~RootTask();
|
| + RasterTaskGraph();
|
| + ~RasterTaskGraph();
|
|
|
| - protected:
|
| + void InsertRasterTask(internal::WorkerPoolTask* raster_task,
|
| + const TaskVector& decode_tasks);
|
| +
|
| + private:
|
| friend class RasterWorkerPool;
|
|
|
| - scoped_refptr<internal::WorkerPoolTask> internal_;
|
| - };
|
| + TaskGraph graph_;
|
| + scoped_refptr<internal::WorkerPoolTask> raster_finished_task_;
|
| + scoped_ptr<GraphNode> raster_finished_node_;
|
| + unsigned next_priority_;
|
|
|
| - typedef internal::RasterWorkerPoolTask* TaskMapKey;
|
| - typedef base::hash_map<TaskMapKey,
|
| - scoped_refptr<internal::WorkerPoolTask> > TaskMap;
|
| + DISALLOW_COPY_AND_ASSIGN(RasterTaskGraph);
|
| + };
|
|
|
| RasterWorkerPool(ResourceProvider* resource_provider, size_t num_threads);
|
|
|
| + virtual void OnRasterTasksFinished() {}
|
| +
|
| void SetRasterTasks(RasterTask::Queue* queue);
|
| - void ScheduleRasterTasks(const RootTask& root);
|
| + void SetRasterTaskGraph(RasterTaskGraph* graph);
|
| bool IsRasterTaskRequiredForActivation(
|
| internal::RasterWorkerPoolTask* task) const;
|
|
|
| @@ -258,13 +264,16 @@ class CC_EXPORT RasterWorkerPool : public WorkerPool {
|
| }
|
|
|
| private:
|
| + void OnRasterFinished(int64 schedule_raster_tasks_count);
|
| +
|
| RasterWorkerPoolClient* client_;
|
| ResourceProvider* resource_provider_;
|
| RasterTask::Queue::TaskVector raster_tasks_;
|
| RasterTask::Queue::TaskSet raster_tasks_required_for_activation_;
|
|
|
| - // The root task that is a dependent of all other tasks.
|
| - scoped_refptr<internal::WorkerPoolTask> root_;
|
| + base::WeakPtrFactory<RasterWorkerPool> weak_ptr_factory_;
|
| + scoped_refptr<internal::WorkerPoolTask> raster_finished_task_;
|
| + int64 schedule_raster_tasks_count_;
|
| };
|
|
|
| } // namespace cc
|
|
|