Chromium Code Reviews| Index: cc/resources/tile_manager.cc |
| diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
| index 50668c01f8dc52cabaae57d9363e0e96e0a62ebc..d11309ad66fb1c489e1fa6c3ef21ba9b1567e67d 100644 |
| --- a/cc/resources/tile_manager.cc |
| +++ b/cc/resources/tile_manager.cc |
| @@ -190,6 +190,7 @@ void TileManager::RegisterTile(Tile* tile) { |
| DCHECK(tiles_.find(tile->id()) == tiles_.end()); |
| tiles_[tile->id()] = tile; |
| + used_layer_counts_[tile->layer_id()]++; |
| prioritized_tiles_dirty_ = true; |
| } |
| @@ -198,6 +199,15 @@ void TileManager::UnregisterTile(Tile* tile) { |
| DCHECK(tiles_.find(tile->id()) != tiles_.end()); |
| tiles_.erase(tile->id()); |
| + |
| + DCHECK_GT(used_layer_counts_[tile->layer_id()], 0); |
| + |
| + int& count = used_layer_counts_[tile->layer_id()]; |
|
reveman
2013/09/05 00:29:27
I think it would be more efficient and a bit clean
tomhudson
2013/09/05 07:32:23
At first I didn't understand why, but your point i
|
| + if (--count == 0) { |
| + used_layer_counts_.erase(tile->layer_id()); |
| + image_decode_tasks_.erase(tile->layer_id()); |
| + } |
| + |
| prioritized_tiles_dirty_ = true; |
| } |
| @@ -369,7 +379,6 @@ void TileManager::ManageTiles() { |
| TileVector tiles_that_need_to_be_rasterized; |
| AssignGpuMemoryToTiles(GetPrioritizedTileSet(), |
| &tiles_that_need_to_be_rasterized); |
| - CleanUpUnusedImageDecodeTasks(); |
| // Finally, schedule rasterizer tasks. |
| ScheduleTasks(tiles_that_need_to_be_rasterized); |
| @@ -620,33 +629,6 @@ void TileManager::AssignGpuMemoryToTiles( |
| bytes_that_exceeded_memory_budget; |
| } |
| -void TileManager::CleanUpUnusedImageDecodeTasks() { |
| - if (image_decode_tasks_.empty()) |
| - return; |
| - |
| - // Calculate a set of layers that are used by at least one tile. |
| - base::hash_set<int> used_layers; |
| - for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it) |
| - used_layers.insert(it->second->layer_id()); |
| - |
| - // Now calculate the set of layers in |image_decode_tasks_| that are not used |
| - // by any tile. |
| - std::vector<int> unused_layers; |
| - for (LayerPixelRefTaskMap::iterator it = image_decode_tasks_.begin(); |
| - it != image_decode_tasks_.end(); |
| - ++it) { |
| - if (used_layers.find(it->first) == used_layers.end()) |
| - unused_layers.push_back(it->first); |
| - } |
| - |
| - // Erase unused layers from |image_decode_tasks_|. |
| - for (std::vector<int>::iterator it = unused_layers.begin(); |
| - it != unused_layers.end(); |
| - ++it) { |
| - image_decode_tasks_.erase(*it); |
| - } |
| -} |
| - |
| void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) { |
| ManagedTileState& mts = tile->managed_state(); |
| if (mts.tile_versions[mode].resource_) { |