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

Side by Side Diff: cc/resources/picture_layer_tiling.cc

Issue 428533008: cc: Remove vectors from tiling eviction tile iterator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 6 years, 4 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
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/picture_layer_tiling.h" 5 #include "cc/resources/picture_layer_tiling.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 10
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 cache->previous_result = result; 823 cache->previous_result = result;
824 return result; 824 return result;
825 } 825 }
826 826
827 void PictureLayerTiling::UpdateEvictionCacheIfNeeded( 827 void PictureLayerTiling::UpdateEvictionCacheIfNeeded(
828 TreePriority tree_priority) { 828 TreePriority tree_priority) {
829 if (eviction_tiles_cache_valid_ && 829 if (eviction_tiles_cache_valid_ &&
830 eviction_cache_tree_priority_ == tree_priority) 830 eviction_cache_tree_priority_ == tree_priority)
831 return; 831 return;
832 832
833 eviction_tiles_cache_.clear(); 833 eventually_eviction_tiles_.clear();
834 eviction_tiles_cache_.reserve(tiles_.size()); 834 soon_eviction_tiles_.clear();
835 now_required_for_activation_eviction_tiles_.clear();
836 now_not_required_for_activation_eviction_tiles_.clear();
837
835 for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 838 for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
836 // TODO(vmpstr): This should update the priority if UpdateTilePriorities 839 // TODO(vmpstr): This should update the priority if UpdateTilePriorities
837 // changes not to do this. 840 // changes not to do this.
838 eviction_tiles_cache_.push_back(it->second); 841 Tile* tile = it->second;
842 const TilePriority& priority =
843 tile->priority_for_tree_priority(tree_priority);
844 switch (priority.priority_bin) {
845 case TilePriority::EVENTUALLY:
846 eventually_eviction_tiles_.push_back(tile);
847 break;
848 case TilePriority::SOON:
849 soon_eviction_tiles_.push_back(tile);
850 break;
851 case TilePriority::NOW:
852 if (tile->required_for_activation())
853 now_required_for_activation_eviction_tiles_.push_back(tile);
854 else
855 now_not_required_for_activation_eviction_tiles_.push_back(tile);
856 break;
857 }
839 } 858 }
840 859
841 std::sort(eviction_tiles_cache_.begin(), 860 // TODO(vmpstr): Do this lazily. One option is to have a "sorted" flag that
842 eviction_tiles_cache_.end(), 861 // can be updated for each of the queues.
843 TileEvictionOrder(tree_priority)); 862 TileEvictionOrder sort_order(tree_priority);
863 std::sort(eventually_eviction_tiles_.begin(),
864 eventually_eviction_tiles_.end(),
865 sort_order);
866 std::sort(
867 soon_eviction_tiles_.begin(), soon_eviction_tiles_.end(), sort_order);
868 std::sort(now_required_for_activation_eviction_tiles_.begin(),
869 now_required_for_activation_eviction_tiles_.end(),
870 sort_order);
871 std::sort(now_not_required_for_activation_eviction_tiles_.begin(),
872 now_not_required_for_activation_eviction_tiles_.end(),
873 sort_order);
874
844 eviction_tiles_cache_valid_ = true; 875 eviction_tiles_cache_valid_ = true;
845 eviction_cache_tree_priority_ = tree_priority; 876 eviction_cache_tree_priority_ = tree_priority;
846 } 877 }
847 878
848 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator() 879 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator()
849 : tiling_(NULL), current_tile_(NULL) {} 880 : tiling_(NULL), current_tile_(NULL) {}
850 881
851 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator( 882 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator(
852 PictureLayerTiling* tiling, 883 PictureLayerTiling* tiling,
853 WhichTree tree) 884 WhichTree tree)
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 } 994 }
964 next_index = spiral_iterator_.index(); 995 next_index = spiral_iterator_.index();
965 break; 996 break;
966 } 997 }
967 current_tile_ = tiling_->TileAt(next_index.first, next_index.second); 998 current_tile_ = tiling_->TileAt(next_index.first, next_index.second);
968 } 999 }
969 return *this; 1000 return *this;
970 } 1001 }
971 1002
972 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator() 1003 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator()
973 : tiling_(NULL) { 1004 : tiling_(NULL), eviction_tiles_(NULL) {
974 } 1005 }
975 1006
976 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator( 1007 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator(
977 PictureLayerTiling* tiling, 1008 PictureLayerTiling* tiling,
978 TreePriority tree_priority) 1009 TreePriority tree_priority,
979 : tiling_(tiling), tree_priority_(tree_priority) { 1010 TilePriority::PriorityBin type,
1011 bool required_for_activation)
1012 : tiling_(tiling), tree_priority_(tree_priority), eviction_tiles_(NULL) {
1013 if (required_for_activation && type != TilePriority::NOW)
1014 return;
1015
980 tiling_->UpdateEvictionCacheIfNeeded(tree_priority_); 1016 tiling_->UpdateEvictionCacheIfNeeded(tree_priority_);
981 tile_iterator_ = tiling_->eviction_tiles_cache_.begin(); 1017 switch (type) {
982 if (tile_iterator_ != tiling_->eviction_tiles_cache_.end() && 1018 case TilePriority::EVENTUALLY:
1019 eviction_tiles_ = &tiling_->eventually_eviction_tiles_;
1020 break;
1021 case TilePriority::SOON:
1022 eviction_tiles_ = &tiling_->soon_eviction_tiles_;
1023 break;
1024 case TilePriority::NOW:
1025 if (required_for_activation)
1026 eviction_tiles_ = &tiling_->now_required_for_activation_eviction_tiles_;
1027 else
1028 eviction_tiles_ =
1029 &tiling_->now_not_required_for_activation_eviction_tiles_;
1030 break;
1031 }
1032 DCHECK(eviction_tiles_);
1033 tile_iterator_ = eviction_tiles_->begin();
1034 if (tile_iterator_ != eviction_tiles_->end() &&
983 !(*tile_iterator_)->HasResources()) { 1035 !(*tile_iterator_)->HasResources()) {
984 ++(*this); 1036 ++(*this);
985 } 1037 }
986 } 1038 }
987 1039
988 PictureLayerTiling::TilingEvictionTileIterator::~TilingEvictionTileIterator() {} 1040 PictureLayerTiling::TilingEvictionTileIterator::~TilingEvictionTileIterator() {}
989 1041
990 PictureLayerTiling::TilingEvictionTileIterator::operator bool() const { 1042 PictureLayerTiling::TilingEvictionTileIterator::operator bool() const {
991 return tiling_ && tile_iterator_ != tiling_->eviction_tiles_cache_.end(); 1043 return eviction_tiles_ && tile_iterator_ != eviction_tiles_->end();
992 } 1044 }
993 1045
994 Tile* PictureLayerTiling::TilingEvictionTileIterator::operator*() { 1046 Tile* PictureLayerTiling::TilingEvictionTileIterator::operator*() {
995 DCHECK(*this); 1047 DCHECK(*this);
996 return *tile_iterator_; 1048 return *tile_iterator_;
997 } 1049 }
998 1050
999 const Tile* PictureLayerTiling::TilingEvictionTileIterator::operator*() const { 1051 const Tile* PictureLayerTiling::TilingEvictionTileIterator::operator*() const {
1000 DCHECK(*this); 1052 DCHECK(*this);
1001 return *tile_iterator_; 1053 return *tile_iterator_;
1002 } 1054 }
1003 1055
1004 PictureLayerTiling::TilingEvictionTileIterator& 1056 PictureLayerTiling::TilingEvictionTileIterator&
1005 PictureLayerTiling::TilingEvictionTileIterator:: 1057 PictureLayerTiling::TilingEvictionTileIterator::
1006 operator++() { 1058 operator++() {
1007 DCHECK(*this); 1059 DCHECK(*this);
1008 do { 1060 do {
1009 ++tile_iterator_; 1061 ++tile_iterator_;
1010 } while (tile_iterator_ != tiling_->eviction_tiles_cache_.end() && 1062 } while (tile_iterator_ != eviction_tiles_->end() &&
1011 (!(*tile_iterator_)->HasResources())); 1063 (!(*tile_iterator_)->HasResources()));
1012 1064
1013 return *this; 1065 return *this;
1014 } 1066 }
1015 1067
1016 } // namespace cc 1068 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698