1 // Copyright 2013 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.
5 #ifndef CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_
6 #define CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_
11 #include "base/memory/weak_ptr.h"
12 #include "base/values.h"
13 #include "cc/resources/raster_worker_pool.h"
14 #include "cc/resources/rasterizer.h"
17 class ResourceProvider
;
19 class CC_EXPORT PixelBufferRasterWorkerPool
: public RasterWorkerPool
,
21 public RasterizerTaskClient
{
23 virtual ~PixelBufferRasterWorkerPool();
25 static scoped_ptr
<RasterWorkerPool
> Create(
26 base::SequencedTaskRunner
* task_runner
,
27 TaskGraphRunner
* task_graph_runner
,
28 ResourceProvider
* resource_provider
,
29 size_t max_transfer_buffer_usage_bytes
);
31 // Overridden from RasterWorkerPool:
32 virtual Rasterizer
* AsRasterizer() OVERRIDE
;
34 // Overridden from Rasterizer:
35 virtual void SetClient(RasterizerClient
* client
) OVERRIDE
;
36 virtual void Shutdown() OVERRIDE
;
37 virtual void ScheduleTasks(RasterTaskQueue
* queue
) OVERRIDE
;
38 virtual void CheckForCompletedTasks() OVERRIDE
;
40 // Overridden from RasterizerTaskClient:
41 virtual SkCanvas
* AcquireCanvasForRaster(RasterTask
* task
) OVERRIDE
;
42 virtual void ReleaseCanvasForRaster(RasterTask
* task
) OVERRIDE
;
45 struct RasterTaskState
{
46 class TaskComparator
{
48 explicit TaskComparator(const RasterTask
* task
) : task_(task
) {}
50 bool operator()(const RasterTaskState
& state
) const {
51 return state
.task
== task_
;
55 const RasterTask
* task_
;
58 typedef std::vector
<RasterTaskState
> Vector
;
60 RasterTaskState(RasterTask
* task
, bool required_for_activation
)
63 required_for_activation(required_for_activation
) {}
65 enum { UNSCHEDULED
, SCHEDULED
, UPLOADING
, COMPLETED
} type
;
67 bool required_for_activation
;
70 typedef std::deque
<scoped_refptr
<RasterTask
> > RasterTaskDeque
;
72 PixelBufferRasterWorkerPool(base::SequencedTaskRunner
* task_runner
,
73 TaskGraphRunner
* task_graph_runner
,
74 ResourceProvider
* resource_provider
,
75 size_t max_transfer_buffer_usage_bytes
);
77 void OnRasterFinished();
78 void OnRasterRequiredForActivationFinished();
80 void CheckForCompletedUploads();
81 void ScheduleCheckForCompletedRasterTasks();
82 void OnCheckForCompletedRasterTasks();
83 void CheckForCompletedRasterTasks();
84 void ScheduleMoreTasks();
85 unsigned PendingRasterTaskCount() const;
86 bool HasPendingTasks() const;
87 bool HasPendingTasksRequiredForActivation() const;
88 void CheckForCompletedRasterizerTasks();
90 const char* StateName() const;
91 scoped_ptr
<base::Value
> StateAsValue() const;
92 scoped_ptr
<base::Value
> ThrottleStateAsValue() const;
94 scoped_refptr
<base::SequencedTaskRunner
> task_runner_
;
95 TaskGraphRunner
* task_graph_runner_
;
96 const NamespaceToken namespace_token_
;
97 RasterizerClient
* client_
;
98 ResourceProvider
* resource_provider_
;
102 RasterTaskQueue raster_tasks_
;
103 RasterTaskState::Vector raster_task_states_
;
104 RasterTaskDeque raster_tasks_with_pending_upload_
;
105 RasterTask::Vector completed_raster_tasks_
;
106 RasterizerTask::Vector completed_image_decode_tasks_
;
108 size_t scheduled_raster_task_count_
;
109 size_t raster_tasks_required_for_activation_count_
;
110 size_t bytes_pending_upload_
;
111 size_t max_bytes_pending_upload_
;
112 bool has_performed_uploads_since_last_flush_
;
113 base::TimeTicks check_for_completed_raster_tasks_time_
;
114 bool check_for_completed_raster_tasks_pending_
;
116 bool should_notify_client_if_no_tasks_are_pending_
;
117 bool should_notify_client_if_no_tasks_required_for_activation_are_pending_
;
118 bool raster_finished_task_pending_
;
119 bool raster_required_for_activation_finished_task_pending_
;
121 base::WeakPtrFactory
<PixelBufferRasterWorkerPool
>
122 raster_finished_weak_ptr_factory_
;
124 scoped_refptr
<RasterizerTask
> raster_finished_task_
;
125 scoped_refptr
<RasterizerTask
> raster_required_for_activation_finished_task_
;
127 // Task graph used when scheduling tasks and vector used to gather
130 Task::Vector completed_tasks_
;
132 base::WeakPtrFactory
<PixelBufferRasterWorkerPool
> weak_ptr_factory_
;
134 DISALLOW_COPY_AND_ASSIGN(PixelBufferRasterWorkerPool
);
139 #endif // CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_