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_BITMAP_RASTER_WORKER_POOL_H_ 6#define CC_RESOURCES_BITMAP_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 13namespace base { 14namespace debug { 15class ConvertableToTraceFormat; 16} 17} 18 19namespace cc { 20class ResourceProvider; 21 22class CC_EXPORT BitmapRasterWorkerPool : public RasterWorkerPool, 23 public Rasterizer, 24 public RasterizerTaskClient { 25 public: 26 virtual ~BitmapRasterWorkerPool(); 27 28 static scoped_ptr<RasterWorkerPool> Create( 29 base::SequencedTaskRunner* task_runner, 30 TaskGraphRunner* task_graph_runner, 31 ResourceProvider* resource_provider); 32 33 // Overridden from RasterWorkerPool: 34 virtual Rasterizer* AsRasterizer() OVERRIDE; 35 36 // Overridden from Rasterizer: 37 virtual void SetClient(RasterizerClient* client) OVERRIDE; 38 virtual void Shutdown() OVERRIDE; 39 virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE; 40 virtual void CheckForCompletedTasks() OVERRIDE; 41 42 // Overridden from RasterizerTaskClient: 43 virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster( 44 const Resource* resource) OVERRIDE; 45 virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE; 46 47 protected: 48 BitmapRasterWorkerPool(base::SequencedTaskRunner* task_runner, 49 TaskGraphRunner* task_graph_runner, 50 ResourceProvider* resource_provider); 51 52 private: 53 void OnRasterFinished(TaskSet task_set); 54 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; 55 56 scoped_refptr<base::SequencedTaskRunner> task_runner_; 57 TaskGraphRunner* task_graph_runner_; 58 const NamespaceToken namespace_token_; 59 RasterizerClient* client_; 60 ResourceProvider* resource_provider_; 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<BitmapRasterWorkerPool> 72 raster_finished_weak_ptr_factory_; 73 74 DISALLOW_COPY_AND_ASSIGN(BitmapRasterWorkerPool); 75}; 76 77} // namespace cc 78 79#endif // CC_RESOURCES_BITMAP_RASTER_WORKER_POOL_H_ 80