Index: cc/resources/tile_manager.cc |
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
index 50668c01f8dc52cabaae57d9363e0e96e0a62ebc..15af8af4586debbf877d8f5e3f90df3059f66d05 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,10 @@ 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); |
+ used_layer_counts_[tile->layer_id()]--; |
+ |
prioritized_tiles_dirty_ = true; |
} |
@@ -624,18 +629,20 @@ 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()); |
+ std::vector<int> unused_layers; |
+ for (LayerCountMap::iterator it = used_layer_counts_.begin(); |
+ it != used_layer_counts_.end(); |
+ ++it) { |
+ if (it->second == 0) |
+ unused_layers.push_back(it->first); |
+ } |
// 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) { |
reveman
2013/09/04 18:18:52
do we need this loop at all?
tomhudson
2013/09/04 18:38:34
Is it there just for safety? (If we somehow have a
vmpstr
2013/09/04 19:36:40
Yeah I think this was just insurance. The layer id
|
- if (used_layers.find(it->first) == used_layers.end()) |
+ if (used_layer_counts_.find(it->first) == used_layer_counts_.end()) |
unused_layers.push_back(it->first); |
} |
@@ -644,6 +651,7 @@ void TileManager::CleanUpUnusedImageDecodeTasks() { |
it != unused_layers.end(); |
++it) { |
image_decode_tasks_.erase(*it); |
+ used_layer_counts_.erase(*it); |
} |
} |