| OLD | NEW |
| 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 #include "cc/resources/tile_bundle.h" | |
| 25 | 24 |
| 26 namespace cc { | 25 namespace cc { |
| 27 class ResourceProvider; | 26 class ResourceProvider; |
| 28 | 27 |
| 29 class CC_EXPORT TileManagerClient { | 28 class CC_EXPORT TileManagerClient { |
| 30 public: | 29 public: |
| 31 virtual void NotifyReadyToActivate() = 0; | 30 virtual void NotifyReadyToActivate() = 0; |
| 32 | 31 |
| 33 protected: | 32 protected: |
| 34 virtual ~TileManagerClient() {} | 33 virtual ~TileManagerClient() {} |
| 35 }; | 34 }; |
| 36 | 35 |
| 37 struct RasterTaskCompletionStats { | 36 struct RasterTaskCompletionStats { |
| 38 RasterTaskCompletionStats(); | 37 RasterTaskCompletionStats(); |
| 39 | 38 |
| 40 size_t completed_count; | 39 size_t completed_count; |
| 41 size_t canceled_count; | 40 size_t canceled_count; |
| 42 }; | 41 }; |
| 43 scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue( | 42 scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue( |
| 44 const RasterTaskCompletionStats& stats); | 43 const RasterTaskCompletionStats& stats); |
| 45 | 44 |
| 46 // This class manages tiles, deciding which should get rasterized and which | 45 // This class manages tiles, deciding which should get rasterized and which |
| 47 // should no longer have any memory assigned to them. Tile objects are "owned" | 46 // should no longer have any memory assigned to them. Tile objects are "owned" |
| 48 // by layers; they automatically register with the manager when they are | 47 // by layers; they automatically register with the manager when they are |
| 49 // created, and unregister from the manager when they are deleted. | 48 // created, and unregister from the manager when they are deleted. |
| 50 class CC_EXPORT TileManager : public RasterWorkerPoolClient, | 49 class CC_EXPORT TileManager : public RasterWorkerPoolClient, |
| 51 public RefCountedManager<Tile>, | 50 public RefCountedManager<Tile> { |
| 52 public RefCountedManager<TileBundle> { | |
| 53 public: | 51 public: |
| 54 static scoped_ptr<TileManager> Create( | 52 static scoped_ptr<TileManager> Create( |
| 55 TileManagerClient* client, | 53 TileManagerClient* client, |
| 56 ResourceProvider* resource_provider, | 54 ResourceProvider* resource_provider, |
| 57 size_t num_raster_threads, | 55 size_t num_raster_threads, |
| 58 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 56 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
| 59 bool use_map_image, | 57 bool use_map_image, |
| 60 size_t max_transfer_buffer_usage_bytes, | 58 size_t max_transfer_buffer_usage_bytes, |
| 61 size_t max_raster_usage_bytes, | 59 size_t max_raster_usage_bytes, |
| 62 GLenum map_image_texture_target); | 60 GLenum map_image_texture_target); |
| 63 virtual ~TileManager(); | 61 virtual ~TileManager(); |
| 64 | 62 |
| 65 void ManageTiles(const GlobalStateThatImpactsTilePriority& state); | 63 void ManageTiles(const GlobalStateThatImpactsTilePriority& state); |
| 66 | 64 |
| 67 // Returns true when visible tiles have been initialized. | 65 // Returns true when visible tiles have been initialized. |
| 68 bool UpdateVisibleTiles(); | 66 bool UpdateVisibleTiles(); |
| 69 | 67 |
| 70 scoped_refptr<Tile> CreateTile(PicturePileImpl* picture_pile, | 68 scoped_refptr<Tile> CreateTile(PicturePileImpl* picture_pile, |
| 71 gfx::Size tile_size, | 69 gfx::Size tile_size, |
| 72 gfx::Rect content_rect, | 70 gfx::Rect content_rect, |
| 73 gfx::Rect opaque_rect, | 71 gfx::Rect opaque_rect, |
| 74 float contents_scale, | 72 float contents_scale, |
| 75 int layer_id, | 73 int layer_id, |
| 76 int source_frame_number, | 74 int source_frame_number, |
| 77 int flags); | 75 int flags); |
| 78 | 76 |
| 79 scoped_refptr<TileBundle> CreateTileBundle(int offset_x, | |
| 80 int offset_y, | |
| 81 int width, | |
| 82 int height); | |
| 83 | |
| 84 scoped_ptr<base::Value> BasicStateAsValue() const; | 77 scoped_ptr<base::Value> BasicStateAsValue() const; |
| 85 scoped_ptr<base::Value> AllTilesAsValue() const; | 78 scoped_ptr<base::Value> AllTilesAsValue() const; |
| 86 void GetMemoryStats(size_t* memory_required_bytes, | 79 void GetMemoryStats(size_t* memory_required_bytes, |
| 87 size_t* memory_nice_to_have_bytes, | 80 size_t* memory_nice_to_have_bytes, |
| 88 size_t* memory_allocated_bytes, | 81 size_t* memory_allocated_bytes, |
| 89 size_t* memory_used_bytes) const; | 82 size_t* memory_used_bytes) const; |
| 90 | 83 |
| 91 const MemoryHistory::Entry& memory_stats_from_last_assign() const { | 84 const MemoryHistory::Entry& memory_stats_from_last_assign() const { |
| 92 return memory_stats_from_last_assign_; | 85 return memory_stats_from_last_assign_; |
| 93 } | 86 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 124 } | 117 } |
| 125 | 118 |
| 126 protected: | 119 protected: |
| 127 TileManager(TileManagerClient* client, | 120 TileManager(TileManagerClient* client, |
| 128 ResourceProvider* resource_provider, | 121 ResourceProvider* resource_provider, |
| 129 scoped_ptr<RasterWorkerPool> raster_worker_pool, | 122 scoped_ptr<RasterWorkerPool> raster_worker_pool, |
| 130 size_t num_raster_threads, | 123 size_t num_raster_threads, |
| 131 size_t max_raster_usage_bytes, | 124 size_t max_raster_usage_bytes, |
| 132 RenderingStatsInstrumentation* rendering_stats_instrumentation); | 125 RenderingStatsInstrumentation* rendering_stats_instrumentation); |
| 133 | 126 |
| 134 // Methods called by Tile and TileBundle | 127 // Methods called by Tile |
| 135 friend class TileBundle; | |
| 136 friend class Tile; | 128 friend class Tile; |
| 137 | |
| 138 void DidChangeTilePriority(Tile* tile); | 129 void DidChangeTilePriority(Tile* tile); |
| 139 void DidChangeTileBundlePriority(TileBundle* bundle); | |
| 140 | 130 |
| 141 void CleanUpReleasedTiles(); | 131 void CleanUpReleasedTiles(); |
| 142 | 132 |
| 143 // Overridden from RefCountedManager<Tile>: | 133 // Overriden from RefCountedManager<Tile>: |
| 144 virtual void Release(Tile* tile) OVERRIDE; | 134 virtual void Release(Tile* tile) OVERRIDE; |
| 145 | 135 |
| 146 // Overridden from RefCountedManager<TileBundle>: | 136 // Overriden from RasterWorkerPoolClient: |
| 147 virtual void Release(TileBundle* bundle) OVERRIDE; | |
| 148 | |
| 149 // Overridden from RasterWorkerPoolClient: | |
| 150 virtual bool ShouldForceTasksRequiredForActivationToComplete() const | 137 virtual bool ShouldForceTasksRequiredForActivationToComplete() const |
| 151 OVERRIDE; | 138 OVERRIDE; |
| 152 virtual void DidFinishRunningTasks() OVERRIDE; | 139 virtual void DidFinishRunningTasks() OVERRIDE; |
| 153 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE; | 140 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE; |
| 154 | 141 |
| 155 typedef std::vector<Tile*> TileVector; | 142 typedef std::vector<Tile*> TileVector; |
| 156 typedef std::set<Tile*> TileSet; | 143 typedef std::set<Tile*> TileSet; |
| 157 | 144 |
| 158 // Virtual for test | 145 // Virtual for test |
| 159 virtual void ScheduleTasks( | 146 virtual void ScheduleTasks( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 void UpdatePrioritizedTileSetIfNeeded(); | 178 void UpdatePrioritizedTileSetIfNeeded(); |
| 192 | 179 |
| 193 TileManagerClient* client_; | 180 TileManagerClient* client_; |
| 194 scoped_ptr<ResourcePool> resource_pool_; | 181 scoped_ptr<ResourcePool> resource_pool_; |
| 195 scoped_ptr<RasterWorkerPool> raster_worker_pool_; | 182 scoped_ptr<RasterWorkerPool> raster_worker_pool_; |
| 196 GlobalStateThatImpactsTilePriority global_state_; | 183 GlobalStateThatImpactsTilePriority global_state_; |
| 197 | 184 |
| 198 typedef base::hash_map<Tile::Id, Tile*> TileMap; | 185 typedef base::hash_map<Tile::Id, Tile*> TileMap; |
| 199 TileMap tiles_; | 186 TileMap tiles_; |
| 200 | 187 |
| 201 typedef base::hash_map<TileBundle::Id, TileBundle*> TileBundleMap; | |
| 202 TileBundleMap bundles_; | |
| 203 | |
| 204 PrioritizedTileSet prioritized_tiles_; | 188 PrioritizedTileSet prioritized_tiles_; |
| 205 bool prioritized_tiles_dirty_; | 189 bool prioritized_tiles_dirty_; |
| 206 | 190 |
| 207 bool all_tiles_that_need_to_be_rasterized_have_memory_; | 191 bool all_tiles_that_need_to_be_rasterized_have_memory_; |
| 208 bool all_tiles_required_for_activation_have_memory_; | 192 bool all_tiles_required_for_activation_have_memory_; |
| 209 | 193 |
| 210 size_t memory_required_bytes_; | 194 size_t memory_required_bytes_; |
| 211 size_t memory_nice_to_have_bytes_; | 195 size_t memory_nice_to_have_bytes_; |
| 212 | 196 |
| 213 size_t bytes_releasable_; | 197 size_t bytes_releasable_; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 225 typedef base::hash_map<uint32_t, RasterWorkerPool::Task> PixelRefTaskMap; | 209 typedef base::hash_map<uint32_t, RasterWorkerPool::Task> PixelRefTaskMap; |
| 226 typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; | 210 typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; |
| 227 LayerPixelRefTaskMap image_decode_tasks_; | 211 LayerPixelRefTaskMap image_decode_tasks_; |
| 228 | 212 |
| 229 typedef base::hash_map<int, int> LayerCountMap; | 213 typedef base::hash_map<int, int> LayerCountMap; |
| 230 LayerCountMap used_layer_counts_; | 214 LayerCountMap used_layer_counts_; |
| 231 | 215 |
| 232 RasterTaskCompletionStats update_visible_tiles_stats_; | 216 RasterTaskCompletionStats update_visible_tiles_stats_; |
| 233 | 217 |
| 234 std::vector<Tile*> released_tiles_; | 218 std::vector<Tile*> released_tiles_; |
| 235 std::vector<TileBundle*> released_tile_bundles_; | |
| 236 | 219 |
| 237 DISALLOW_COPY_AND_ASSIGN(TileManager); | 220 DISALLOW_COPY_AND_ASSIGN(TileManager); |
| 238 }; | 221 }; |
| 239 | 222 |
| 240 } // namespace cc | 223 } // namespace cc |
| 241 | 224 |
| 242 #endif // CC_RESOURCES_TILE_MANAGER_H_ | 225 #endif // CC_RESOURCES_TILE_MANAGER_H_ |
| OLD | NEW |