Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: cc/resources/tile_manager.h

Issue 165603002: cc: Move GPU raster to DirectRasterWorkerPool. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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_TILE_MANAGER_H_ 5 #ifndef CC_RESOURCES_TILE_MANAGER_H_
6 #define CC_RESOURCES_TILE_MANAGER_H_ 6 #define CC_RESOURCES_TILE_MANAGER_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/containers/hash_tables.h" 12 #include "base/containers/hash_tables.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "cc/base/ref_counted_managed.h" 15 #include "cc/base/ref_counted_managed.h"
16 #include "cc/debug/rendering_stats_instrumentation.h" 16 #include "cc/debug/rendering_stats_instrumentation.h"
17 #include "cc/resources/managed_tile_state.h" 17 #include "cc/resources/managed_tile_state.h"
18 #include "cc/resources/memory_history.h" 18 #include "cc/resources/memory_history.h"
19 #include "cc/resources/picture_pile_impl.h" 19 #include "cc/resources/picture_pile_impl.h"
20 #include "cc/resources/prioritized_tile_set.h" 20 #include "cc/resources/prioritized_tile_set.h"
21 #include "cc/resources/raster_worker_pool.h" 21 #include "cc/resources/raster_worker_pool.h"
22 #include "cc/resources/resource_pool.h" 22 #include "cc/resources/resource_pool.h"
23 #include "cc/resources/tile.h" 23 #include "cc/resources/tile.h"
24 24
25 namespace cc { 25 namespace cc {
26 class RasterWorkerPoolDelegate;
26 class ResourceProvider; 27 class ResourceProvider;
27 28
28 class CC_EXPORT TileManagerClient { 29 class CC_EXPORT TileManagerClient {
29 public: 30 public:
30 virtual void NotifyReadyToActivate() = 0; 31 virtual void NotifyReadyToActivate() = 0;
31 32
32 protected: 33 protected:
33 virtual ~TileManagerClient() {} 34 virtual ~TileManagerClient() {}
34 }; 35 };
35 36
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 ManagedTileState& mts = tiles[i]->managed_state(); 94 ManagedTileState& mts = tiles[i]->managed_state();
94 ManagedTileState::TileVersion& tile_version = 95 ManagedTileState::TileVersion& tile_version =
95 mts.tile_versions[HIGH_QUALITY_NO_LCD_RASTER_MODE]; 96 mts.tile_versions[HIGH_QUALITY_NO_LCD_RASTER_MODE];
96 97
97 tile_version.resource_ = resource_pool_->AcquireResource(gfx::Size(1, 1)); 98 tile_version.resource_ = resource_pool_->AcquireResource(gfx::Size(1, 1));
98 99
99 bytes_releasable_ += BytesConsumedIfAllocated(tiles[i]); 100 bytes_releasable_ += BytesConsumedIfAllocated(tiles[i]);
100 ++resources_releasable_; 101 ++resources_releasable_;
101 } 102 }
102 } 103 }
103 RasterWorkerPool* RasterWorkerPoolForTesting() {
104 return raster_worker_pool_.get();
105 }
106 104
107 void SetGlobalStateForTesting( 105 void SetGlobalStateForTesting(
108 const GlobalStateThatImpactsTilePriority& state) { 106 const GlobalStateThatImpactsTilePriority& state) {
109 if (state != global_state_) { 107 if (state != global_state_) {
110 global_state_ = state; 108 global_state_ = state;
111 prioritized_tiles_dirty_ = true; 109 prioritized_tiles_dirty_ = true;
112 resource_pool_->SetResourceUsageLimits( 110 resource_pool_->SetResourceUsageLimits(
113 global_state_.memory_limit_in_bytes, 111 global_state_.memory_limit_in_bytes,
114 global_state_.unused_memory_limit_in_bytes, 112 global_state_.unused_memory_limit_in_bytes,
115 global_state_.num_resources_limit); 113 global_state_.num_resources_limit);
116 } 114 }
117 } 115 }
118 116
119 protected: 117 protected:
120 TileManager(TileManagerClient* client, 118 TileManager(TileManagerClient* client,
121 ResourceProvider* resource_provider, 119 ResourceProvider* resource_provider,
120 ContextProvider* context_provider,
122 scoped_ptr<RasterWorkerPool> raster_worker_pool, 121 scoped_ptr<RasterWorkerPool> raster_worker_pool,
122 scoped_ptr<RasterWorkerPool> direct_raster_worker_pool,
123 size_t max_raster_usage_bytes, 123 size_t max_raster_usage_bytes,
124 RenderingStatsInstrumentation* rendering_stats_instrumentation, 124 RenderingStatsInstrumentation* rendering_stats_instrumentation,
125 bool use_rasterize_on_demand); 125 bool use_rasterize_on_demand);
126 126
127 // Methods called by Tile 127 // Methods called by Tile
128 friend class Tile; 128 friend class Tile;
129 void DidChangeTilePriority(Tile* tile); 129 void DidChangeTilePriority(Tile* tile);
130 130
131 void CleanUpReleasedTiles(); 131 void CleanUpReleasedTiles();
132 132
(...skipping 20 matching lines...) Expand all
153 void OnImageDecodeTaskCompleted(int layer_id, 153 void OnImageDecodeTaskCompleted(int layer_id,
154 SkPixelRef* pixel_ref, 154 SkPixelRef* pixel_ref,
155 bool was_canceled); 155 bool was_canceled);
156 void OnRasterTaskCompleted(Tile::Id tile, 156 void OnRasterTaskCompleted(Tile::Id tile,
157 scoped_ptr<ScopedResource> resource, 157 scoped_ptr<ScopedResource> resource,
158 RasterMode raster_mode, 158 RasterMode raster_mode,
159 const PicturePileImpl::Analysis& analysis, 159 const PicturePileImpl::Analysis& analysis,
160 bool was_canceled); 160 bool was_canceled);
161 161
162 inline size_t BytesConsumedIfAllocated(const Tile* tile) const { 162 inline size_t BytesConsumedIfAllocated(const Tile* tile) const {
163 return Resource::MemorySizeBytes(tile->size(), 163 return Resource::MemorySizeBytes(tile->size(), resource_format_);
164 raster_worker_pool_->GetResourceFormat());
165 } 164 }
166 165
167 RasterMode DetermineRasterMode(const Tile* tile) const; 166 RasterMode DetermineRasterMode(const Tile* tile) const;
168 void FreeResourceForTile(Tile* tile, RasterMode mode); 167 void FreeResourceForTile(Tile* tile, RasterMode mode);
169 void FreeResourcesForTile(Tile* tile); 168 void FreeResourcesForTile(Tile* tile);
170 void FreeUnusedResourcesForTile(Tile* tile); 169 void FreeUnusedResourcesForTile(Tile* tile);
171 RasterWorkerPool::Task CreateImageDecodeTask(Tile* tile, 170 scoped_refptr<internal::WorkerPoolTask> CreateImageDecodeTask(
172 SkPixelRef* pixel_ref); 171 Tile* tile,
173 RasterWorkerPool::RasterTask CreateRasterTask(Tile* tile); 172 SkPixelRef* pixel_ref);
173 scoped_refptr<internal::RasterWorkerPoolTask> CreateRasterTask(Tile* tile);
174 scoped_ptr<base::Value> GetMemoryRequirementsAsValue() const; 174 scoped_ptr<base::Value> GetMemoryRequirementsAsValue() const;
175 void UpdatePrioritizedTileSetIfNeeded(); 175 void UpdatePrioritizedTileSetIfNeeded();
176 176
177 TileManagerClient* client_; 177 TileManagerClient* client_;
178 ContextProvider* context_provider_;
179 ResourceFormat resource_format_;
178 scoped_ptr<ResourcePool> resource_pool_; 180 scoped_ptr<ResourcePool> resource_pool_;
179 scoped_ptr<RasterWorkerPool> raster_worker_pool_; 181 scoped_ptr<RasterWorkerPoolDelegate> raster_worker_pool_;
180 GlobalStateThatImpactsTilePriority global_state_; 182 GlobalStateThatImpactsTilePriority global_state_;
181 183
182 typedef base::hash_map<Tile::Id, Tile*> TileMap; 184 typedef base::hash_map<Tile::Id, Tile*> TileMap;
183 TileMap tiles_; 185 TileMap tiles_;
184 186
185 PrioritizedTileSet prioritized_tiles_; 187 PrioritizedTileSet prioritized_tiles_;
186 bool prioritized_tiles_dirty_; 188 bool prioritized_tiles_dirty_;
187 189
188 bool all_tiles_that_need_to_be_rasterized_have_memory_; 190 bool all_tiles_that_need_to_be_rasterized_have_memory_;
189 bool all_tiles_required_for_activation_have_memory_; 191 bool all_tiles_required_for_activation_have_memory_;
190 192
191 size_t memory_required_bytes_; 193 size_t memory_required_bytes_;
192 size_t memory_nice_to_have_bytes_; 194 size_t memory_nice_to_have_bytes_;
193 195
194 size_t bytes_releasable_; 196 size_t bytes_releasable_;
195 size_t resources_releasable_; 197 size_t resources_releasable_;
196 size_t max_raster_usage_bytes_; 198 size_t max_raster_usage_bytes_;
197 199
198 bool ever_exceeded_memory_budget_; 200 bool ever_exceeded_memory_budget_;
199 MemoryHistory::Entry memory_stats_from_last_assign_; 201 MemoryHistory::Entry memory_stats_from_last_assign_;
200 202
201 RenderingStatsInstrumentation* rendering_stats_instrumentation_; 203 RenderingStatsInstrumentation* rendering_stats_instrumentation_;
202 204
203 bool did_initialize_visible_tile_; 205 bool did_initialize_visible_tile_;
204 bool did_check_for_completed_tasks_since_last_schedule_tasks_; 206 bool did_check_for_completed_tasks_since_last_schedule_tasks_;
205 207
206 typedef base::hash_map<uint32_t, RasterWorkerPool::Task> PixelRefTaskMap; 208 typedef base::hash_map<uint32_t, scoped_refptr<internal::WorkerPoolTask> >
209 PixelRefTaskMap;
207 typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; 210 typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap;
208 LayerPixelRefTaskMap image_decode_tasks_; 211 LayerPixelRefTaskMap image_decode_tasks_;
209 212
210 typedef base::hash_map<int, int> LayerCountMap; 213 typedef base::hash_map<int, int> LayerCountMap;
211 LayerCountMap used_layer_counts_; 214 LayerCountMap used_layer_counts_;
212 215
213 RasterTaskCompletionStats update_visible_tiles_stats_; 216 RasterTaskCompletionStats update_visible_tiles_stats_;
214 217
215 std::vector<Tile*> released_tiles_; 218 std::vector<Tile*> released_tiles_;
216 219
217 bool use_rasterize_on_demand_; 220 bool use_rasterize_on_demand_;
218 221
219 // Queue used when scheduling raster tasks. 222 // Queue used when scheduling raster tasks.
220 RasterWorkerPool::RasterTask::Queue raster_tasks_; 223 RasterTaskQueue raster_queue_;
224 RasterTaskQueue gpu_raster_queue_;
221 225
222 DISALLOW_COPY_AND_ASSIGN(TileManager); 226 DISALLOW_COPY_AND_ASSIGN(TileManager);
223 }; 227 };
224 228
225 } // namespace cc 229 } // namespace cc
226 230
227 #endif // CC_RESOURCES_TILE_MANAGER_H_ 231 #endif // CC_RESOURCES_TILE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698