| 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 #include "cc/resources/tile_manager.h" | 5 #include "cc/resources/tile_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 TileManager::TileManager( | 119 TileManager::TileManager( |
| 120 TileManagerClient* client, | 120 TileManagerClient* client, |
| 121 ResourceProvider* resource_provider, | 121 ResourceProvider* resource_provider, |
| 122 scoped_ptr<RasterWorkerPool> raster_worker_pool, | 122 scoped_ptr<RasterWorkerPool> raster_worker_pool, |
| 123 size_t num_raster_threads, | 123 size_t num_raster_threads, |
| 124 bool use_color_estimator, | 124 bool use_color_estimator, |
| 125 RenderingStatsInstrumentation* rendering_stats_instrumentation) | 125 RenderingStatsInstrumentation* rendering_stats_instrumentation) |
| 126 : client_(client), | 126 : client_(client), |
| 127 resource_pool_(ResourcePool::Create(resource_provider)), | 127 resource_pool_(ResourcePool::Create(resource_provider)), |
| 128 raster_worker_pool_(raster_worker_pool.Pass()), | 128 raster_worker_pool_(raster_worker_pool.Pass()), |
| 129 manage_tiles_pending_(false), | |
| 130 ever_exceeded_memory_budget_(false), | 129 ever_exceeded_memory_budget_(false), |
| 131 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 130 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
| 132 use_color_estimator_(use_color_estimator), | 131 use_color_estimator_(use_color_estimator), |
| 133 did_initialize_visible_tile_(false) { | 132 did_initialize_visible_tile_(false) { |
| 134 } | 133 } |
| 135 | 134 |
| 136 TileManager::~TileManager() { | 135 TileManager::~TileManager() { |
| 137 // Reset global state and manage. This should cause | 136 // Reset global state and manage. This should cause |
| 138 // our memory usage to drop to zero. | 137 // our memory usage to drop to zero. |
| 139 global_state_ = GlobalStateThatImpactsTilePriority(); | 138 global_state_ = GlobalStateThatImpactsTilePriority(); |
| 140 AssignGpuMemoryToTiles(); | 139 AssignGpuMemoryToTiles(); |
| 141 // This should finish all pending tasks and release any uninitialized | 140 // This should finish all pending tasks and release any uninitialized |
| 142 // resources. | 141 // resources. |
| 143 raster_worker_pool_->Shutdown(); | 142 raster_worker_pool_->Shutdown(); |
| 144 raster_worker_pool_->CheckForCompletedTasks(); | 143 raster_worker_pool_->CheckForCompletedTasks(); |
| 145 DCHECK_EQ(0u, tiles_.size()); | 144 DCHECK_EQ(0u, tiles_.size()); |
| 146 } | 145 } |
| 147 | 146 |
| 148 void TileManager::SetGlobalState( | 147 void TileManager::SetGlobalState( |
| 149 const GlobalStateThatImpactsTilePriority& global_state) { | 148 const GlobalStateThatImpactsTilePriority& global_state) { |
| 150 global_state_ = global_state; | 149 global_state_ = global_state; |
| 151 resource_pool_->SetMaxMemoryUsageBytes( | 150 resource_pool_->SetMaxMemoryUsageBytes( |
| 152 global_state_.memory_limit_in_bytes, | 151 global_state_.memory_limit_in_bytes, |
| 153 global_state_.unused_memory_limit_in_bytes); | 152 global_state_.unused_memory_limit_in_bytes); |
| 154 ScheduleManageTiles(); | |
| 155 } | 153 } |
| 156 | 154 |
| 157 void TileManager::RegisterTile(Tile* tile) { | 155 void TileManager::RegisterTile(Tile* tile) { |
| 158 DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) == tiles_.end()); | 156 DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) == tiles_.end()); |
| 159 DCHECK(!tile->required_for_activation()); | 157 DCHECK(!tile->required_for_activation()); |
| 160 tiles_.push_back(tile); | 158 tiles_.push_back(tile); |
| 161 ScheduleManageTiles(); | |
| 162 } | 159 } |
| 163 | 160 |
| 164 void TileManager::UnregisterTile(Tile* tile) { | 161 void TileManager::UnregisterTile(Tile* tile) { |
| 165 TileVector::iterator raster_iter = | 162 TileVector::iterator raster_iter = |
| 166 std::find(tiles_that_need_to_be_rasterized_.begin(), | 163 std::find(tiles_that_need_to_be_rasterized_.begin(), |
| 167 tiles_that_need_to_be_rasterized_.end(), | 164 tiles_that_need_to_be_rasterized_.end(), |
| 168 tile); | 165 tile); |
| 169 if (raster_iter != tiles_that_need_to_be_rasterized_.end()) | 166 if (raster_iter != tiles_that_need_to_be_rasterized_.end()) |
| 170 tiles_that_need_to_be_rasterized_.erase(raster_iter); | 167 tiles_that_need_to_be_rasterized_.erase(raster_iter); |
| 171 | 168 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 | 282 |
| 286 void TileManager::SortTiles() { | 283 void TileManager::SortTiles() { |
| 287 TRACE_EVENT0("cc", "TileManager::SortTiles"); | 284 TRACE_EVENT0("cc", "TileManager::SortTiles"); |
| 288 | 285 |
| 289 // Sort by bin, resolution and time until needed. | 286 // Sort by bin, resolution and time until needed. |
| 290 std::sort(tiles_.begin(), tiles_.end(), BinComparator()); | 287 std::sort(tiles_.begin(), tiles_.end(), BinComparator()); |
| 291 } | 288 } |
| 292 | 289 |
| 293 void TileManager::ManageTiles() { | 290 void TileManager::ManageTiles() { |
| 294 TRACE_EVENT0("cc", "TileManager::ManageTiles"); | 291 TRACE_EVENT0("cc", "TileManager::ManageTiles"); |
| 295 | |
| 296 manage_tiles_pending_ = false; | |
| 297 | |
| 298 AssignBinsToTiles(); | 292 AssignBinsToTiles(); |
| 299 SortTiles(); | 293 SortTiles(); |
| 300 AssignGpuMemoryToTiles(); | 294 AssignGpuMemoryToTiles(); |
| 301 | 295 |
| 302 TRACE_EVENT_INSTANT1( | 296 TRACE_EVENT_INSTANT1( |
| 303 "cc", "DidManage", TRACE_EVENT_SCOPE_THREAD, | 297 "cc", "DidManage", TRACE_EVENT_SCOPE_THREAD, |
| 304 "state", TracedValue::FromValue(BasicStateAsValue().release())); | 298 "state", TracedValue::FromValue(BasicStateAsValue().release())); |
| 305 | 299 |
| 306 // Finally, schedule rasterizer tasks. | 300 // Finally, schedule rasterizer tasks. |
| 307 ScheduleTasks(); | 301 ScheduleTasks(); |
| (...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 100000, | 947 100000, |
| 954 100); | 948 100); |
| 955 } else { | 949 } else { |
| 956 picture_pile->RasterToBitmap(&canvas, rect, contents_scale, NULL); | 950 picture_pile->RasterToBitmap(&canvas, rect, contents_scale, NULL); |
| 957 } | 951 } |
| 958 | 952 |
| 959 return true; | 953 return true; |
| 960 } | 954 } |
| 961 | 955 |
| 962 } // namespace cc | 956 } // namespace cc |
| OLD | NEW |