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 14namespace base { 15namespace debug { 16class ConvertableToTraceFormat; 17class TracedValue; 18} 19} 20 21namespace cc { 22class ResourcePool; 23class ResourceProvider; 24class ScopedResource; 25 26class 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