| 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 <deque> | 8 #include <deque> |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <set> | 10 #include <set> |
| 11 #include <utility> | 11 #include <utility> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/containers/hash_tables.h" | 14 #include "base/containers/hash_tables.h" |
| 15 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 16 #include "base/values.h" | 16 #include "base/values.h" |
| 17 #include "cc/base/ref_counted_managed.h" | 17 #include "cc/base/ref_counted_managed.h" |
| 18 #include "cc/base/unique_notifier.h" | 18 #include "cc/base/unique_notifier.h" |
| 19 #include "cc/debug/rendering_stats_instrumentation.h" | 19 #include "cc/debug/rendering_stats_instrumentation.h" |
| 20 #include "cc/resources/eviction_tile_priority_queue.h" | 20 #include "cc/resources/eviction_tile_priority_queue.h" |
| 21 #include "cc/resources/managed_tile_state.h" | 21 #include "cc/resources/managed_tile_state.h" |
| 22 #include "cc/resources/memory_history.h" | 22 #include "cc/resources/memory_history.h" |
| 23 #include "cc/resources/raster_source.h" | 23 #include "cc/resources/raster_source.h" |
| 24 #include "cc/resources/raster_tile_priority_queue.h" | 24 #include "cc/resources/raster_tile_priority_queue.h" |
| 25 #include "cc/resources/rasterizer.h" | 25 #include "cc/resources/tile_task_runner.h" |
| 26 #include "cc/resources/resource_pool.h" | 26 #include "cc/resources/resource_pool.h" |
| 27 #include "cc/resources/tile.h" | 27 #include "cc/resources/tile.h" |
| 28 | 28 |
| 29 namespace base { | 29 namespace base { |
| 30 namespace debug { | 30 namespace debug { |
| 31 class ConvertableToTraceFormat; | 31 class ConvertableToTraceFormat; |
| 32 class TracedValue; | 32 class TracedValue; |
| 33 } | 33 } |
| 34 } | 34 } |
| 35 | 35 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 size_t completed_count; | 79 size_t completed_count; |
| 80 size_t canceled_count; | 80 size_t canceled_count; |
| 81 }; | 81 }; |
| 82 scoped_refptr<base::debug::ConvertableToTraceFormat> | 82 scoped_refptr<base::debug::ConvertableToTraceFormat> |
| 83 RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats); | 83 RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats); |
| 84 | 84 |
| 85 // This class manages tiles, deciding which should get rasterized and which | 85 // This class manages tiles, deciding which should get rasterized and which |
| 86 // should no longer have any memory assigned to them. Tile objects are "owned" | 86 // should no longer have any memory assigned to them. Tile objects are "owned" |
| 87 // by layers; they automatically register with the manager when they are | 87 // by layers; they automatically register with the manager when they are |
| 88 // created, and unregister from the manager when they are deleted. | 88 // created, and unregister from the manager when they are deleted. |
| 89 class CC_EXPORT TileManager : public RasterizerClient, | 89 class CC_EXPORT TileManager : public TileTaskRunnerClient, |
| 90 public RefCountedManager<Tile> { | 90 public RefCountedManager<Tile> { |
| 91 public: | 91 public: |
| 92 enum NamedTaskSet { | 92 enum NamedTaskSet { |
| 93 ALL, | 93 ALL, |
| 94 REQUIRED_FOR_ACTIVATION, | 94 REQUIRED_FOR_ACTIVATION, |
| 95 REQUIRED_FOR_DRAW | 95 REQUIRED_FOR_DRAW |
| 96 // Adding additional values requires increasing kNumberOfTaskSets in | 96 // Adding additional values requires increasing kNumberOfTaskSets in |
| 97 // rasterizer.h | 97 // rasterizer.h |
| 98 }; | 98 }; |
| 99 | 99 |
| 100 static scoped_ptr<TileManager> Create( | 100 static scoped_ptr<TileManager> Create( |
| 101 TileManagerClient* client, | 101 TileManagerClient* client, |
| 102 base::SequencedTaskRunner* task_runner, | 102 base::SequencedTaskRunner* task_runner, |
| 103 ResourcePool* resource_pool, | 103 ResourcePool* resource_pool, |
| 104 Rasterizer* rasterizer, | 104 TileTaskRunner* tile_task_runner, |
| 105 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 105 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
| 106 size_t scheduled_raster_task_limit); | 106 size_t scheduled_raster_task_limit); |
| 107 ~TileManager() override; | 107 ~TileManager() override; |
| 108 | 108 |
| 109 void ManageTiles(const GlobalStateThatImpactsTilePriority& state); | 109 void ManageTiles(const GlobalStateThatImpactsTilePriority& state); |
| 110 | 110 |
| 111 void UpdateVisibleTiles(); | 111 void UpdateVisibleTiles(); |
| 112 | 112 |
| 113 scoped_refptr<Tile> CreateTile(RasterSource* raster_source, | 113 scoped_refptr<Tile> CreateTile(RasterSource* raster_source, |
| 114 const gfx::Size& tile_size, | 114 const gfx::Size& tile_size, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 139 Tile* tile = tiles[i]; | 139 Tile* tile = tiles[i]; |
| 140 FreeResourcesForTile(tile); | 140 FreeResourcesForTile(tile); |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 | 143 |
| 144 void SetGlobalStateForTesting( | 144 void SetGlobalStateForTesting( |
| 145 const GlobalStateThatImpactsTilePriority& state) { | 145 const GlobalStateThatImpactsTilePriority& state) { |
| 146 global_state_ = state; | 146 global_state_ = state; |
| 147 } | 147 } |
| 148 | 148 |
| 149 void SetRasterizerForTesting(Rasterizer* rasterizer); | 149 void SetTileTaskRunnerForTesting(TileTaskRunner* tile_task_runner); |
| 150 | 150 |
| 151 void FreeResourcesAndCleanUpReleasedTilesForTesting() { | 151 void FreeResourcesAndCleanUpReleasedTilesForTesting() { |
| 152 FreeResourcesForReleasedTiles(); | 152 FreeResourcesForReleasedTiles(); |
| 153 CleanUpReleasedTiles(); | 153 CleanUpReleasedTiles(); |
| 154 } | 154 } |
| 155 | 155 |
| 156 std::vector<Tile*> AllTilesForTesting() const { | 156 std::vector<Tile*> AllTilesForTesting() const { |
| 157 std::vector<Tile*> tiles; | 157 std::vector<Tile*> tiles; |
| 158 for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); | 158 for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); |
| 159 ++it) { | 159 ++it) { |
| 160 tiles.push_back(it->second); | 160 tiles.push_back(it->second); |
| 161 } | 161 } |
| 162 return tiles; | 162 return tiles; |
| 163 } | 163 } |
| 164 | 164 |
| 165 void SetScheduledRasterTaskLimitForTesting(size_t limit) { | 165 void SetScheduledRasterTaskLimitForTesting(size_t limit) { |
| 166 scheduled_raster_task_limit_ = limit; | 166 scheduled_raster_task_limit_ = limit; |
| 167 } | 167 } |
| 168 | 168 |
| 169 protected: | 169 protected: |
| 170 TileManager(TileManagerClient* client, | 170 TileManager(TileManagerClient* client, |
| 171 const scoped_refptr<base::SequencedTaskRunner>& task_runner, | 171 const scoped_refptr<base::SequencedTaskRunner>& task_runner, |
| 172 ResourcePool* resource_pool, | 172 ResourcePool* resource_pool, |
| 173 Rasterizer* rasterizer, | 173 TileTaskRunner* tile_task_runner, |
| 174 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 174 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
| 175 size_t scheduled_raster_task_limit); | 175 size_t scheduled_raster_task_limit); |
| 176 | 176 |
| 177 void FreeResourcesForReleasedTiles(); | 177 void FreeResourcesForReleasedTiles(); |
| 178 void CleanUpReleasedTiles(); | 178 void CleanUpReleasedTiles(); |
| 179 | 179 |
| 180 // Overriden from RefCountedManager<Tile>: | 180 // Overriden from RefCountedManager<Tile>: |
| 181 friend class Tile; | 181 friend class Tile; |
| 182 void Release(Tile* tile) override; | 182 void Release(Tile* tile) override; |
| 183 | 183 |
| 184 // Overriden from RasterizerClient: | 184 // Overriden from TileTaskRunnerClient: |
| 185 void DidFinishRunningTasks(TaskSet task_set) override; | 185 void DidFinishRunningTileTasks(TaskSet task_set) override; |
| 186 TaskSetCollection TasksThatShouldBeForcedToComplete() const override; | 186 TaskSetCollection TasksThatShouldBeForcedToComplete() const override; |
| 187 | 187 |
| 188 typedef std::vector<Tile*> TileVector; | 188 typedef std::vector<Tile*> TileVector; |
| 189 typedef std::set<Tile*> TileSet; | 189 typedef std::set<Tile*> TileSet; |
| 190 | 190 |
| 191 // Virtual for test | 191 // Virtual for test |
| 192 virtual void ScheduleTasks( | 192 virtual void ScheduleTasks( |
| 193 const TileVector& tiles_that_need_to_be_rasterized); | 193 const TileVector& tiles_that_need_to_be_rasterized); |
| 194 | 194 |
| 195 void AssignGpuMemoryToTiles(TileVector* tiles_that_need_to_be_rasterized); | 195 void AssignGpuMemoryToTiles(TileVector* tiles_that_need_to_be_rasterized); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 MemoryUsage* usage); | 238 MemoryUsage* usage); |
| 239 bool TilePriorityViolatesMemoryPolicy(const TilePriority& priority); | 239 bool TilePriorityViolatesMemoryPolicy(const TilePriority& priority); |
| 240 bool IsReadyToActivate() const; | 240 bool IsReadyToActivate() const; |
| 241 bool IsReadyToDraw() const; | 241 bool IsReadyToDraw() const; |
| 242 void CheckIfReadyToActivate(); | 242 void CheckIfReadyToActivate(); |
| 243 void CheckIfReadyToDraw(); | 243 void CheckIfReadyToDraw(); |
| 244 | 244 |
| 245 TileManagerClient* client_; | 245 TileManagerClient* client_; |
| 246 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 246 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
| 247 ResourcePool* resource_pool_; | 247 ResourcePool* resource_pool_; |
| 248 Rasterizer* rasterizer_; | 248 TileTaskRunner* tile_task_runner_; |
| 249 GlobalStateThatImpactsTilePriority global_state_; | 249 GlobalStateThatImpactsTilePriority global_state_; |
| 250 size_t scheduled_raster_task_limit_; | 250 size_t scheduled_raster_task_limit_; |
| 251 | 251 |
| 252 typedef base::hash_map<Tile::Id, Tile*> TileMap; | 252 typedef base::hash_map<Tile::Id, Tile*> TileMap; |
| 253 TileMap tiles_; | 253 TileMap tiles_; |
| 254 | 254 |
| 255 bool all_tiles_that_need_to_be_rasterized_are_scheduled_; | 255 bool all_tiles_that_need_to_be_rasterized_are_scheduled_; |
| 256 MemoryHistory::Entry memory_stats_from_last_assign_; | 256 MemoryHistory::Entry memory_stats_from_last_assign_; |
| 257 | 257 |
| 258 RenderingStatsInstrumentation* rendering_stats_instrumentation_; | 258 RenderingStatsInstrumentation* rendering_stats_instrumentation_; |
| 259 | 259 |
| 260 bool did_check_for_completed_tasks_since_last_schedule_tasks_; | 260 bool did_check_for_completed_tasks_since_last_schedule_tasks_; |
| 261 bool did_oom_on_last_assign_; | 261 bool did_oom_on_last_assign_; |
| 262 | 262 |
| 263 typedef base::hash_map<uint32_t, scoped_refptr<ImageDecodeTask>> | 263 typedef base::hash_map<uint32_t, scoped_refptr<ImageDecodeTask>> |
| 264 PixelRefTaskMap; | 264 PixelRefTaskMap; |
| 265 typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; | 265 typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; |
| 266 LayerPixelRefTaskMap image_decode_tasks_; | 266 LayerPixelRefTaskMap image_decode_tasks_; |
| 267 | 267 |
| 268 typedef base::hash_map<int, int> LayerCountMap; | 268 typedef base::hash_map<int, int> LayerCountMap; |
| 269 LayerCountMap used_layer_counts_; | 269 LayerCountMap used_layer_counts_; |
| 270 | 270 |
| 271 RasterTaskCompletionStats update_visible_tiles_stats_; | 271 RasterTaskCompletionStats update_visible_tiles_stats_; |
| 272 | 272 |
| 273 std::vector<Tile*> released_tiles_; | 273 std::vector<Tile*> released_tiles_; |
| 274 | 274 |
| 275 ResourceFormat resource_format_; | 275 ResourceFormat resource_format_; |
| 276 | 276 |
| 277 // Queue used when scheduling raster tasks. | 277 // Queue used when scheduling raster tasks. |
| 278 RasterTaskQueue raster_queue_; | 278 TileTaskQueue raster_queue_; |
| 279 | 279 |
| 280 std::vector<scoped_refptr<RasterTask>> orphan_raster_tasks_; | 280 std::vector<scoped_refptr<RasterTask>> orphan_raster_tasks_; |
| 281 | 281 |
| 282 UniqueNotifier ready_to_activate_check_notifier_; | 282 UniqueNotifier ready_to_activate_check_notifier_; |
| 283 UniqueNotifier ready_to_draw_check_notifier_; | 283 UniqueNotifier ready_to_draw_check_notifier_; |
| 284 | 284 |
| 285 RasterTilePriorityQueue raster_priority_queue_; | 285 RasterTilePriorityQueue raster_priority_queue_; |
| 286 EvictionTilePriorityQueue eviction_priority_queue_; | 286 EvictionTilePriorityQueue eviction_priority_queue_; |
| 287 bool eviction_priority_queue_is_up_to_date_; | 287 bool eviction_priority_queue_is_up_to_date_; |
| 288 | 288 |
| 289 bool did_notify_ready_to_activate_; | 289 bool did_notify_ready_to_activate_; |
| 290 bool did_notify_ready_to_draw_; | 290 bool did_notify_ready_to_draw_; |
| 291 | 291 |
| 292 DISALLOW_COPY_AND_ASSIGN(TileManager); | 292 DISALLOW_COPY_AND_ASSIGN(TileManager); |
| 293 }; | 293 }; |
| 294 | 294 |
| 295 } // namespace cc | 295 } // namespace cc |
| 296 | 296 |
| 297 #endif // CC_RESOURCES_TILE_MANAGER_H_ | 297 #endif // CC_RESOURCES_TILE_MANAGER_H_ |
| OLD | NEW |