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

Side by Side 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: 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 unified diff | Download patch | Annotate | Revision Log
« cc/resources/tile_manager.h ('K') | « cc/resources/tile_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 global_state_.memory_limit_in_bytes, 183 global_state_.memory_limit_in_bytes,
184 global_state_.unused_memory_limit_in_bytes, 184 global_state_.unused_memory_limit_in_bytes,
185 global_state_.num_resources_limit); 185 global_state_.num_resources_limit);
186 } 186 }
187 187
188 void TileManager::RegisterTile(Tile* tile) { 188 void TileManager::RegisterTile(Tile* tile) {
189 DCHECK(!tile->required_for_activation()); 189 DCHECK(!tile->required_for_activation());
190 DCHECK(tiles_.find(tile->id()) == tiles_.end()); 190 DCHECK(tiles_.find(tile->id()) == tiles_.end());
191 191
192 tiles_[tile->id()] = tile; 192 tiles_[tile->id()] = tile;
193 used_layer_counts_[tile->layer_id()]++;
193 prioritized_tiles_dirty_ = true; 194 prioritized_tiles_dirty_ = true;
194 } 195 }
195 196
196 void TileManager::UnregisterTile(Tile* tile) { 197 void TileManager::UnregisterTile(Tile* tile) {
197 FreeResourcesForTile(tile); 198 FreeResourcesForTile(tile);
198 199
199 DCHECK(tiles_.find(tile->id()) != tiles_.end()); 200 DCHECK(tiles_.find(tile->id()) != tiles_.end());
200 tiles_.erase(tile->id()); 201 tiles_.erase(tile->id());
202
203 DCHECK_GT(used_layer_counts_[tile->layer_id()], 0);
204 used_layer_counts_[tile->layer_id()]--;
205
201 prioritized_tiles_dirty_ = true; 206 prioritized_tiles_dirty_ = true;
202 } 207 }
203 208
204 void TileManager::DidChangeTilePriority(Tile* tile) { 209 void TileManager::DidChangeTilePriority(Tile* tile) {
205 prioritized_tiles_dirty_ = true; 210 prioritized_tiles_dirty_ = true;
206 } 211 }
207 212
208 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const { 213 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const {
209 return GlobalState().tree_priority != SMOOTHNESS_TAKES_PRIORITY; 214 return GlobalState().tree_priority != SMOOTHNESS_TAKES_PRIORITY;
210 } 215 }
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 memory_stats_from_last_assign_.total_budget_in_bytes = 618 memory_stats_from_last_assign_.total_budget_in_bytes =
614 global_state_.memory_limit_in_bytes; 619 global_state_.memory_limit_in_bytes;
615 memory_stats_from_last_assign_.bytes_allocated = 620 memory_stats_from_last_assign_.bytes_allocated =
616 bytes_allocatable - bytes_left; 621 bytes_allocatable - bytes_left;
617 memory_stats_from_last_assign_.bytes_unreleasable = 622 memory_stats_from_last_assign_.bytes_unreleasable =
618 bytes_allocatable - bytes_releasable_; 623 bytes_allocatable - bytes_releasable_;
619 memory_stats_from_last_assign_.bytes_over = 624 memory_stats_from_last_assign_.bytes_over =
620 bytes_that_exceeded_memory_budget; 625 bytes_that_exceeded_memory_budget;
621 } 626 }
622 627
623 void TileManager::CleanUpUnusedImageDecodeTasks() { 628 void TileManager::CleanUpUnusedImageDecodeTasks() {
reveman 2013/09/04 18:18:52 can we clean up this function somehow? I find it h
vmpstr 2013/09/04 19:36:40 Done.
624 if (image_decode_tasks_.empty()) 629 if (image_decode_tasks_.empty())
625 return; 630 return;
626 631
627 // Calculate a set of layers that are used by at least one tile. 632 std::vector<int> unused_layers;
628 base::hash_set<int> used_layers; 633 for (LayerCountMap::iterator it = used_layer_counts_.begin();
629 for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it) 634 it != used_layer_counts_.end();
630 used_layers.insert(it->second->layer_id()); 635 ++it) {
636 if (it->second == 0)
637 unused_layers.push_back(it->first);
638 }
631 639
632 // Now calculate the set of layers in |image_decode_tasks_| that are not used 640 // Now calculate the set of layers in |image_decode_tasks_| that are not used
633 // by any tile. 641 // by any tile.
634 std::vector<int> unused_layers;
635 for (LayerPixelRefTaskMap::iterator it = image_decode_tasks_.begin(); 642 for (LayerPixelRefTaskMap::iterator it = image_decode_tasks_.begin();
636 it != image_decode_tasks_.end(); 643 it != image_decode_tasks_.end();
637 ++it) { 644 ++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
638 if (used_layers.find(it->first) == used_layers.end()) 645 if (used_layer_counts_.find(it->first) == used_layer_counts_.end())
639 unused_layers.push_back(it->first); 646 unused_layers.push_back(it->first);
640 } 647 }
641 648
642 // Erase unused layers from |image_decode_tasks_|. 649 // Erase unused layers from |image_decode_tasks_|.
tomhudson 2013/09/04 18:38:34 Nit: comment now incomplete.
vmpstr 2013/09/04 19:36:40 Done.
643 for (std::vector<int>::iterator it = unused_layers.begin(); 650 for (std::vector<int>::iterator it = unused_layers.begin();
644 it != unused_layers.end(); 651 it != unused_layers.end();
645 ++it) { 652 ++it) {
646 image_decode_tasks_.erase(*it); 653 image_decode_tasks_.erase(*it);
654 used_layer_counts_.erase(*it);
647 } 655 }
648 } 656 }
649 657
650 void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) { 658 void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) {
651 ManagedTileState& mts = tile->managed_state(); 659 ManagedTileState& mts = tile->managed_state();
652 if (mts.tile_versions[mode].resource_) { 660 if (mts.tile_versions[mode].resource_) {
653 resource_pool_->ReleaseResource( 661 resource_pool_->ReleaseResource(
654 mts.tile_versions[mode].resource_.Pass()); 662 mts.tile_versions[mode].resource_.Pass());
655 663
656 DCHECK_GE(bytes_releasable_, tile->bytes_consumed_if_allocated()); 664 DCHECK_GE(bytes_releasable_, tile->bytes_consumed_if_allocated());
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 bytes_releasable_ += tile->bytes_consumed_if_allocated(); 854 bytes_releasable_ += tile->bytes_consumed_if_allocated();
847 ++resources_releasable_; 855 ++resources_releasable_;
848 } 856 }
849 857
850 FreeUnusedResourcesForTile(tile); 858 FreeUnusedResourcesForTile(tile);
851 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) 859 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
852 did_initialize_visible_tile_ = true; 860 did_initialize_visible_tile_ = true;
853 } 861 }
854 862
855 } // namespace cc 863 } // namespace cc
OLDNEW
« cc/resources/tile_manager.h ('K') | « cc/resources/tile_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698