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