Home | History | Annotate | Download | only in resources
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CC_RESOURCES_GPU_RASTER_WORKER_POOL_H_
      6 #define CC_RESOURCES_GPU_RASTER_WORKER_POOL_H_
      7 
      8 #include "base/memory/weak_ptr.h"
      9 #include "cc/resources/raster_worker_pool.h"
     10 #include "cc/resources/rasterizer.h"
     11 #include "third_party/skia/include/core/SkMultiPictureDraw.h"
     12 
     13 namespace cc {
     14 class ContextProvider;
     15 class ResourceProvider;
     16 
     17 class CC_EXPORT GpuRasterWorkerPool : public RasterWorkerPool,
     18                                       public Rasterizer,
     19                                       public RasterizerTaskClient {
     20  public:
     21   virtual ~GpuRasterWorkerPool();
     22 
     23   static scoped_ptr<RasterWorkerPool> Create(
     24       base::SequencedTaskRunner* task_runner,
     25       ContextProvider* context_provider,
     26       ResourceProvider* resource_provider);
     27 
     28   // Overridden from RasterWorkerPool:
     29   virtual Rasterizer* AsRasterizer() OVERRIDE;
     30 
     31   // Overridden from Rasterizer:
     32   virtual void SetClient(RasterizerClient* client) OVERRIDE;
     33   virtual void Shutdown() OVERRIDE;
     34   virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
     35   virtual void CheckForCompletedTasks() OVERRIDE;
     36 
     37   // Overridden from RasterizerTaskClient:
     38   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
     39       const Resource* resource) OVERRIDE;
     40   virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
     41 
     42  private:
     43   GpuRasterWorkerPool(base::SequencedTaskRunner* task_runner,
     44                       ContextProvider* context_provider,
     45                       ResourceProvider* resource_provider);
     46 
     47   void OnRasterFinished(TaskSet task_set);
     48   void ScheduleRunTasksOnOriginThread();
     49   void RunTasksOnOriginThread();
     50   void RunTaskOnOriginThread(RasterizerTask* task);
     51 
     52   scoped_refptr<base::SequencedTaskRunner> task_runner_;
     53   scoped_ptr<TaskGraphRunner> task_graph_runner_;
     54   const NamespaceToken namespace_token_;
     55   RasterizerClient* client_;
     56   ContextProvider* context_provider_;
     57   ResourceProvider* resource_provider_;
     58   SkMultiPictureDraw multi_picture_draw_;
     59 
     60   bool run_tasks_on_origin_thread_pending_;
     61 
     62   TaskSetCollection raster_pending_;
     63 
     64   scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets];
     65 
     66   // Task graph used when scheduling tasks and vector used to gather
     67   // completed tasks.
     68   TaskGraph graph_;
     69   Task::Vector completed_tasks_;
     70 
     71   base::WeakPtrFactory<GpuRasterWorkerPool> raster_finished_weak_ptr_factory_;
     72 
     73   base::WeakPtrFactory<GpuRasterWorkerPool> weak_ptr_factory_;
     74 
     75   DISALLOW_COPY_AND_ASSIGN(GpuRasterWorkerPool);
     76 };
     77 
     78 }  // namespace cc
     79 
     80 #endif  // CC_RESOURCES_GPU_RASTER_WORKER_POOL_H_
     81