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