Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(200)

Unified Diff: cc/resources/tile_manager.cc

Issue 23757024: cc: Speed up CleanUpImageDecodeTasks a bit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_) {
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698