Home | History | Annotate | Download | only in resources
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CC_RESOURCES_IMAGE_RASTER_WORKER_POOL_H_
      6 #define CC_RESOURCES_IMAGE_RASTER_WORKER_POOL_H_
      7 
      8 #include "base/memory/weak_ptr.h"
      9 #include "base/values.h"
     10 #include "cc/resources/raster_worker_pool.h"
     11 #include "cc/resources/rasterizer.h"
     12 
     13 namespace cc {
     14 class ResourceProvider;
     15 
     16 class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool,
     17                                         public Rasterizer,
     18                                         public RasterizerTaskClient {
     19  public:
     20   virtual ~ImageRasterWorkerPool();
     21 
     22   static scoped_ptr<RasterWorkerPool> Create(
     23       base::SequencedTaskRunner* task_runner,
     24       TaskGraphRunner* task_graph_runner,
     25       ResourceProvider* resource_provider);
     26 
     27   // Overridden from RasterWorkerPool:
     28   virtual Rasterizer* AsRasterizer() OVERRIDE;
     29 
     30   // Overridden from Rasterizer:
     31   virtual void SetClient(RasterizerClient* client) OVERRIDE;
     32   virtual void Shutdown() OVERRIDE;
     33   virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
     34   virtual void CheckForCompletedTasks() OVERRIDE;
     35 
     36   // Overridden from RasterizerTaskClient:
     37   virtual SkCanvas* AcquireCanvasForRaster(RasterTask* task) OVERRIDE;
     38   virtual void ReleaseCanvasForRaster(RasterTask* task) OVERRIDE;
     39 
     40  protected:
     41   ImageRasterWorkerPool(base::SequencedTaskRunner* task_runner,
     42                         TaskGraphRunner* task_graph_runner,
     43                         ResourceProvider* resource_provider);
     44 
     45  private:
     46   void OnRasterFinished();
     47   void OnRasterRequiredForActivationFinished();
     48   scoped_ptr<base::Value> StateAsValue() const;
     49 
     50   scoped_refptr<base::SequencedTaskRunner> task_runner_;
     51   TaskGraphRunner* task_graph_runner_;
     52   const NamespaceToken namespace_token_;
     53   RasterizerClient* client_;
     54   ResourceProvider* resource_provider_;
     55 
     56   bool raster_tasks_pending_;
     57   bool raster_tasks_required_for_activation_pending_;
     58 
     59   base::WeakPtrFactory<ImageRasterWorkerPool> raster_finished_weak_ptr_factory_;
     60 
     61   scoped_refptr<RasterizerTask> raster_finished_task_;
     62   scoped_refptr<RasterizerTask> raster_required_for_activation_finished_task_;
     63 
     64   // Task graph used when scheduling tasks and vector used to gather
     65   // completed tasks.
     66   TaskGraph graph_;
     67   Task::Vector completed_tasks_;
     68 
     69   DISALLOW_COPY_AND_ASSIGN(ImageRasterWorkerPool);
     70 };
     71 
     72 }  // namespace cc
     73 
     74 #endif  // CC_RESOURCES_IMAGE_RASTER_WORKER_POOL_H_
     75