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_ONE_COPY_RASTER_WORKER_POOL_H_
      6 #define CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
      7 
      8 #include "base/memory/weak_ptr.h"
      9 #include "base/values.h"
     10 #include "cc/output/context_provider.h"
     11 #include "cc/resources/raster_worker_pool.h"
     12 #include "cc/resources/rasterizer.h"
     13 
     14 namespace base {
     15 namespace debug {
     16 class ConvertableToTraceFormat;
     17 class TracedValue;
     18 }
     19 }
     20 
     21 namespace cc {
     22 class ResourcePool;
     23 class ResourceProvider;
     24 class ScopedResource;
     25 
     26 class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool,
     27                                           public Rasterizer,
     28                                           public RasterizerTaskClient {
     29  public:
     30   virtual ~OneCopyRasterWorkerPool();
     31 
     32   static scoped_ptr<RasterWorkerPool> Create(
     33       base::SequencedTaskRunner* task_runner,
     34       TaskGraphRunner* task_graph_runner,
     35       ContextProvider* context_provider,
     36       ResourceProvider* resource_provider,
     37       ResourcePool* resource_pool);
     38 
     39   // Overridden from RasterWorkerPool:
     40   virtual Rasterizer* AsRasterizer() OVERRIDE;
     41 
     42   // Overridden from Rasterizer:
     43   virtual void SetClient(RasterizerClient* client) OVERRIDE;
     44   virtual void Shutdown() OVERRIDE;
     45   virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
     46   virtual void CheckForCompletedTasks() OVERRIDE;
     47 
     48   // Overridden from RasterizerTaskClient:
     49   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
     50       const Resource* resource) OVERRIDE;
     51   virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
     52 
     53  protected:
     54   OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner,
     55                           TaskGraphRunner* task_graph_runner,
     56                           ContextProvider* context_provider,
     57                           ResourceProvider* resource_provider,
     58                           ResourcePool* resource_pool);
     59 
     60  private:
     61   void OnRasterFinished(TaskSet task_set);
     62   scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
     63   void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const;
     64 
     65   scoped_refptr<base::SequencedTaskRunner> task_runner_;
     66   TaskGraphRunner* task_graph_runner_;
     67   const NamespaceToken namespace_token_;
     68   RasterizerClient* client_;
     69   ContextProvider* context_provider_;
     70   ResourceProvider* resource_provider_;
     71   ResourcePool* resource_pool_;
     72   TaskSetCollection raster_pending_;
     73   scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets];
     74 
     75   // Task graph used when scheduling tasks and vector used to gather
     76   // completed tasks.
     77   TaskGraph graph_;
     78   Task::Vector completed_tasks_;
     79 
     80   base::WeakPtrFactory<OneCopyRasterWorkerPool>
     81       raster_finished_weak_ptr_factory_;
     82 
     83   DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool);
     84 };
     85 
     86 }  // namespace cc
     87 
     88 #endif  // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
     89