OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_ | 5 #ifndef CC_RESOURCES_PIXEL_BUFFER_TILE_TASK_WORKER_POOL_H_ |
6 #define CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_ | 6 #define CC_RESOURCES_PIXEL_BUFFER_TILE_TASK_WORKER_POOL_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
13 #include "cc/base/delayed_unique_notifier.h" | 13 #include "cc/base/delayed_unique_notifier.h" |
14 #include "cc/output/context_provider.h" | 14 #include "cc/output/context_provider.h" |
15 #include "cc/resources/raster_worker_pool.h" | 15 #include "cc/resources/tile_task_runner.h" |
16 #include "cc/resources/rasterizer.h" | 16 #include "cc/resources/tile_task_worker_pool.h" |
17 | 17 |
18 namespace base { | 18 namespace base { |
19 namespace debug { | 19 namespace debug { |
20 class ConvertableToTraceFormat; | 20 class ConvertableToTraceFormat; |
21 class TracedValue; | 21 class TracedValue; |
22 } | 22 } |
23 } | 23 } |
24 | 24 |
25 namespace cc { | 25 namespace cc { |
26 class ResourceProvider; | 26 class ResourceProvider; |
27 | 27 |
28 class CC_EXPORT PixelBufferRasterWorkerPool : public RasterWorkerPool, | 28 class CC_EXPORT PixelBufferTileTaskWorkerPool : public TileTaskWorkerPool, |
29 public Rasterizer, | 29 public TileTaskRunner, |
30 public RasterizerTaskClient { | 30 public TileTaskClient { |
31 public: | 31 public: |
32 ~PixelBufferRasterWorkerPool() override; | 32 ~PixelBufferTileTaskWorkerPool() override; |
33 | 33 |
34 static scoped_ptr<RasterWorkerPool> Create( | 34 static scoped_ptr<TileTaskWorkerPool> Create( |
35 base::SequencedTaskRunner* task_runner, | 35 base::SequencedTaskRunner* task_runner, |
36 TaskGraphRunner* task_graph_runner, | 36 TaskGraphRunner* task_graph_runner, |
37 ContextProvider* context_provider, | 37 ContextProvider* context_provider, |
38 ResourceProvider* resource_provider, | 38 ResourceProvider* resource_provider, |
39 size_t max_transfer_buffer_usage_bytes); | 39 size_t max_transfer_buffer_usage_bytes); |
40 | 40 |
41 // Overridden from RasterWorkerPool: | 41 // Overridden from TileTaskWorkerPool: |
42 Rasterizer* AsRasterizer() override; | 42 TileTaskRunner* AsTileTaskRunner() override; |
43 | 43 |
44 // Overridden from Rasterizer: | 44 // Overridden from TileTaskRunner: |
45 void SetClient(RasterizerClient* client) override; | 45 void SetClient(TileTaskRunnerClient* client) override; |
46 void Shutdown() override; | 46 void Shutdown() override; |
47 void ScheduleTasks(RasterTaskQueue* queue) override; | 47 void ScheduleTasks(TileTaskQueue* queue) override; |
48 void CheckForCompletedTasks() override; | 48 void CheckForCompletedTasks() override; |
49 | 49 |
50 // Overridden from RasterizerTaskClient: | 50 // Overridden from TileTaskClient: |
51 scoped_ptr<RasterBuffer> AcquireBufferForRaster( | 51 scoped_ptr<RasterBuffer> AcquireBufferForRaster( |
52 const Resource* resource) override; | 52 const Resource* resource) override; |
53 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override; | 53 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override; |
54 | 54 |
55 private: | 55 private: |
56 struct RasterTaskState { | 56 struct RasterTaskState { |
57 class TaskComparator { | 57 class TaskComparator { |
58 public: | 58 public: |
59 explicit TaskComparator(const RasterTask* task) : task_(task) {} | 59 explicit TaskComparator(const RasterTask* task) : task_(task) {} |
60 | 60 |
61 bool operator()(const RasterTaskState& state) const { | 61 bool operator()(const RasterTaskState& state) const { |
62 return state.task == task_; | 62 return state.task == task_; |
63 } | 63 } |
64 | 64 |
65 private: | 65 private: |
66 const RasterTask* task_; | 66 const RasterTask* task_; |
67 }; | 67 }; |
68 | 68 |
69 typedef std::vector<RasterTaskState> Vector; | 69 typedef std::vector<RasterTaskState> Vector; |
70 | 70 |
71 RasterTaskState(RasterTask* task, const TaskSetCollection& task_sets); | 71 RasterTaskState(RasterTask* task, const TaskSetCollection& task_sets); |
72 | 72 |
73 enum { UNSCHEDULED, SCHEDULED, UPLOADING, COMPLETED } type; | 73 enum { UNSCHEDULED, SCHEDULED, UPLOADING, COMPLETED } type; |
74 RasterTask* task; | 74 RasterTask* task; |
75 TaskSetCollection task_sets; | 75 TaskSetCollection task_sets; |
76 }; | 76 }; |
77 | 77 |
78 typedef std::deque<scoped_refptr<RasterTask>> RasterTaskDeque; | 78 typedef std::deque<scoped_refptr<RasterTask>> RasterTaskDeque; |
79 | 79 |
80 PixelBufferRasterWorkerPool(base::SequencedTaskRunner* task_runner, | 80 PixelBufferTileTaskWorkerPool(base::SequencedTaskRunner* task_runner, |
81 TaskGraphRunner* task_graph_runner, | 81 TaskGraphRunner* task_graph_runner, |
82 ContextProvider* context_provider, | 82 ContextProvider* context_provider, |
83 ResourceProvider* resource_provider, | 83 ResourceProvider* resource_provider, |
84 size_t max_transfer_buffer_usage_bytes); | 84 size_t max_transfer_buffer_usage_bytes); |
85 | 85 |
86 void OnRasterFinished(TaskSet task_set); | 86 void OnTaskSetFinished(TaskSet task_set); |
87 void FlushUploads(); | 87 void FlushUploads(); |
88 void CheckForCompletedUploads(); | 88 void CheckForCompletedUploads(); |
89 void CheckForCompletedRasterTasks(); | 89 void CheckForCompletedRasterTasks(); |
90 void ScheduleMoreTasks(); | 90 void ScheduleMoreTasks(); |
91 unsigned PendingRasterTaskCount() const; | 91 unsigned PendingRasterTaskCount() const; |
92 TaskSetCollection PendingTasks() const; | 92 TaskSetCollection PendingTasks() const; |
93 void CheckForCompletedRasterizerTasks(); | 93 void CheckForCompletedRasterizerTasks(); |
94 | 94 |
95 const char* StateName() const; | 95 const char* StateName() const; |
96 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; | 96 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; |
97 void ThrottleStateAsValueInto(base::debug::TracedValue* throttle_state) const; | 97 void ThrottleStateAsValueInto(base::debug::TracedValue* throttle_state) const; |
98 | 98 |
99 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 99 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
100 TaskGraphRunner* task_graph_runner_; | 100 TaskGraphRunner* task_graph_runner_; |
101 const NamespaceToken namespace_token_; | 101 const NamespaceToken namespace_token_; |
102 RasterizerClient* client_; | 102 TileTaskRunnerClient* client_; |
103 ContextProvider* context_provider_; | 103 ContextProvider* context_provider_; |
104 ResourceProvider* resource_provider_; | 104 ResourceProvider* resource_provider_; |
105 | 105 |
106 bool shutdown_; | 106 bool shutdown_; |
107 | 107 |
108 RasterTaskQueue raster_tasks_; | 108 TileTaskQueue raster_tasks_; |
109 RasterTaskState::Vector raster_task_states_; | 109 RasterTaskState::Vector raster_task_states_; |
110 RasterTaskDeque raster_tasks_with_pending_upload_; | 110 RasterTaskDeque raster_tasks_with_pending_upload_; |
111 RasterTask::Vector completed_raster_tasks_; | 111 RasterTask::Vector completed_raster_tasks_; |
112 RasterizerTask::Vector completed_image_decode_tasks_; | 112 TileTask::Vector completed_image_decode_tasks_; |
113 | 113 |
114 size_t scheduled_raster_task_count_; | 114 size_t scheduled_raster_task_count_; |
115 size_t task_counts_[kNumberOfTaskSets]; | 115 size_t task_counts_[kNumberOfTaskSets]; |
116 size_t bytes_pending_upload_; | 116 size_t bytes_pending_upload_; |
117 size_t max_bytes_pending_upload_; | 117 size_t max_bytes_pending_upload_; |
118 bool has_performed_uploads_since_last_flush_; | 118 bool has_performed_uploads_since_last_flush_; |
119 | 119 |
120 TaskSetCollection should_notify_client_if_no_tasks_are_pending_; | 120 TaskSetCollection should_notify_client_if_no_tasks_are_pending_; |
121 TaskSetCollection raster_finished_tasks_pending_; | 121 TaskSetCollection task_set_finished_tasks_pending_; |
122 | 122 |
123 DelayedUniqueNotifier check_for_completed_raster_task_notifier_; | 123 DelayedUniqueNotifier check_for_completed_raster_task_notifier_; |
124 | 124 |
125 scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets]; | 125 scoped_refptr<TileTask> task_set_finished_tasks_[kNumberOfTaskSets]; |
126 | 126 |
127 // Task graph used when scheduling tasks and vector used to gather | 127 // Task graph used when scheduling tasks and vector used to gather |
128 // completed tasks. | 128 // completed tasks. |
129 TaskGraph graph_; | 129 TaskGraph graph_; |
130 Task::Vector completed_tasks_; | 130 Task::Vector completed_tasks_; |
131 | 131 |
132 base::WeakPtrFactory<PixelBufferRasterWorkerPool> | 132 base::WeakPtrFactory<PixelBufferTileTaskWorkerPool> |
133 raster_finished_weak_ptr_factory_; | 133 task_set_finished_weak_ptr_factory_; |
134 | 134 |
135 DISALLOW_COPY_AND_ASSIGN(PixelBufferRasterWorkerPool); | 135 DISALLOW_COPY_AND_ASSIGN(PixelBufferTileTaskWorkerPool); |
136 }; | 136 }; |
137 | 137 |
138 } // namespace cc | 138 } // namespace cc |
139 | 139 |
140 #endif // CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_ | 140 #endif // CC_RESOURCES_PIXEL_BUFFER_TILE_TASK_WORKER_POOL_H_ |
OLD | NEW |