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

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

Issue 18581004: cc: Remove tile ref counting in tile manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 5 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
« 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 const GlobalStateThatImpactsTilePriority& global_state) { 147 const GlobalStateThatImpactsTilePriority& global_state) {
148 global_state_ = global_state; 148 global_state_ = global_state;
149 resource_pool_->SetMaxMemoryUsageBytes( 149 resource_pool_->SetMaxMemoryUsageBytes(
150 global_state_.memory_limit_in_bytes, 150 global_state_.memory_limit_in_bytes,
151 global_state_.unused_memory_limit_in_bytes); 151 global_state_.unused_memory_limit_in_bytes);
152 } 152 }
153 153
154 void TileManager::RegisterTile(Tile* tile) { 154 void TileManager::RegisterTile(Tile* tile) {
155 DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) == tiles_.end()); 155 DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) == tiles_.end());
156 DCHECK(!tile->required_for_activation()); 156 DCHECK(!tile->required_for_activation());
157 DCHECK(managed_tile_map_.find(tile->id()) == managed_tile_map_.end());
158
157 tiles_.push_back(tile); 159 tiles_.push_back(tile);
160 managed_tile_map_[tile->id()] = tile;
158 } 161 }
159 162
160 void TileManager::UnregisterTile(Tile* tile) { 163 void TileManager::UnregisterTile(Tile* tile) {
161 TileVector::iterator raster_iter = 164 TileVector::iterator raster_iter =
162 std::find(tiles_that_need_to_be_rasterized_.begin(), 165 std::find(tiles_that_need_to_be_rasterized_.begin(),
163 tiles_that_need_to_be_rasterized_.end(), 166 tiles_that_need_to_be_rasterized_.end(),
164 tile); 167 tile);
165 if (raster_iter != tiles_that_need_to_be_rasterized_.end()) 168 if (raster_iter != tiles_that_need_to_be_rasterized_.end())
166 tiles_that_need_to_be_rasterized_.erase(raster_iter); 169 tiles_that_need_to_be_rasterized_.erase(raster_iter);
167 170
168 tiles_that_need_to_be_initialized_for_activation_.erase(tile); 171 tiles_that_need_to_be_initialized_for_activation_.erase(tile);
169 172
170 DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) != tiles_.end()); 173 DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) != tiles_.end());
171 FreeResourcesForTile(tile); 174 FreeResourcesForTile(tile);
172 tiles_.erase(std::remove(tiles_.begin(), tiles_.end(), tile)); 175 tiles_.erase(std::remove(tiles_.begin(), tiles_.end(), tile));
176
177 ManagedTileMap::iterator managed_iter = managed_tile_map_.find(tile->id());
178 DCHECK(managed_iter != managed_tile_map_.end());
179 managed_tile_map_.erase(managed_iter);
173 } 180 }
174 181
175 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const { 182 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const {
176 return GlobalState().tree_priority != SMOOTHNESS_TAKES_PRIORITY; 183 return GlobalState().tree_priority != SMOOTHNESS_TAKES_PRIORITY;
177 } 184 }
178 185
179 class BinComparator { 186 class BinComparator {
180 public: 187 public:
181 bool operator() (const Tile* a, const Tile* b) const { 188 bool operator() (const Tile* a, const Tile* b) const {
182 const ManagedTileState& ams = a->managed_state(); 189 const ManagedTileState& ams = a->managed_state();
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 return RasterWorkerPool::CreateRasterTask( 736 return RasterWorkerPool::CreateRasterTask(
730 const_resource, 737 const_resource,
731 tile->picture_pile(), 738 tile->picture_pile(),
732 tile->content_rect(), 739 tile->content_rect(),
733 tile->contents_scale(), 740 tile->contents_scale(),
734 mts.raster_mode, 741 mts.raster_mode,
735 metadata, 742 metadata,
736 rendering_stats_instrumentation_, 743 rendering_stats_instrumentation_,
737 base::Bind(&TileManager::OnRasterTaskCompleted, 744 base::Bind(&TileManager::OnRasterTaskCompleted,
738 base::Unretained(this), 745 base::Unretained(this),
739 make_scoped_refptr(tile), 746 tile->id(),
740 base::Passed(&resource), 747 base::Passed(&resource),
741 mts.raster_mode), 748 mts.raster_mode),
742 &decode_tasks); 749 &decode_tasks);
743 } 750 }
744 751
745 void TileManager::OnImageDecodeTaskCompleted( 752 void TileManager::OnImageDecodeTaskCompleted(
746 int layer_id, 753 int layer_id,
747 skia::LazyPixelRef* pixel_ref, 754 skia::LazyPixelRef* pixel_ref,
748 bool was_canceled) { 755 bool was_canceled) {
749 // If the task was canceled, we need to clean it up 756 // If the task was canceled, we need to clean it up
750 // from |image_decode_tasks_|. 757 // from |image_decode_tasks_|.
751 if (!was_canceled) 758 if (!was_canceled)
752 return; 759 return;
753 760
754 LayerPixelRefTaskMap::iterator layer_it = 761 LayerPixelRefTaskMap::iterator layer_it =
755 image_decode_tasks_.find(layer_id); 762 image_decode_tasks_.find(layer_id);
756 763
757 if (layer_it == image_decode_tasks_.end()) 764 if (layer_it == image_decode_tasks_.end())
758 return; 765 return;
759 766
760 PixelRefTaskMap& pixel_ref_tasks = layer_it->second; 767 PixelRefTaskMap& pixel_ref_tasks = layer_it->second;
761 PixelRefTaskMap::iterator task_it = 768 PixelRefTaskMap::iterator task_it =
762 pixel_ref_tasks.find(pixel_ref->getGenerationID()); 769 pixel_ref_tasks.find(pixel_ref->getGenerationID());
763 770
764 if (task_it != pixel_ref_tasks.end()) 771 if (task_it != pixel_ref_tasks.end())
765 pixel_ref_tasks.erase(task_it); 772 pixel_ref_tasks.erase(task_it);
766 } 773 }
767 774
768 void TileManager::OnRasterTaskCompleted( 775 void TileManager::OnRasterTaskCompleted(
769 scoped_refptr<Tile> tile, 776 ManagedTileId managed_id,
reveman 2013/07/03 00:32:47 Lets use the same type name for the Id everywhere.
770 scoped_ptr<ResourcePool::Resource> resource, 777 scoped_ptr<ResourcePool::Resource> resource,
771 RasterMode raster_mode, 778 RasterMode raster_mode,
772 const PicturePileImpl::Analysis& analysis, 779 const PicturePileImpl::Analysis& analysis,
773 bool was_canceled) { 780 bool was_canceled) {
774 TRACE_EVENT1("cc", "TileManager::OnRasterTaskCompleted", 781 TRACE_EVENT1("cc", "TileManager::OnRasterTaskCompleted",
775 "was_canceled", was_canceled); 782 "was_canceled", was_canceled);
776 783
784 ManagedTileMap::iterator managed_iter = managed_tile_map_.find(managed_id);
785 if (managed_iter == managed_tile_map_.end()) {
786 resource_pool_->ReleaseResource(resource.Pass());
787 return;
788 }
789
790 Tile* tile = managed_iter->second;
777 ManagedTileState& mts = tile->managed_state(); 791 ManagedTileState& mts = tile->managed_state();
778 ManagedTileState::TileVersion& tile_version = 792 ManagedTileState::TileVersion& tile_version =
779 mts.tile_versions[raster_mode]; 793 mts.tile_versions[raster_mode];
780 DCHECK(!tile_version.raster_task_.is_null()); 794 DCHECK(!tile_version.raster_task_.is_null());
781 tile_version.raster_task_.Reset(); 795 tile_version.raster_task_.Reset();
782 796
783 if (was_canceled) { 797 if (was_canceled) {
784 resource_pool_->ReleaseResource(resource.Pass()); 798 resource_pool_->ReleaseResource(resource.Pass());
785 return; 799 return;
786 } 800 }
787 801
788 tile_version.set_has_text(analysis.has_text); 802 tile_version.set_has_text(analysis.has_text);
789 if (analysis.is_solid_color) { 803 if (analysis.is_solid_color) {
790 tile_version.set_solid_color(analysis.solid_color); 804 tile_version.set_solid_color(analysis.solid_color);
791 resource_pool_->ReleaseResource(resource.Pass()); 805 resource_pool_->ReleaseResource(resource.Pass());
792 } else { 806 } else {
793 tile_version.resource_ = resource.Pass(); 807 tile_version.resource_ = resource.Pass();
794 } 808 }
795 809
796 FreeUnusedResourcesForTile(tile.get()); 810 FreeUnusedResourcesForTile(tile);
797 811
798 DidFinishTileInitialization(tile.get()); 812 DidFinishTileInitialization(tile);
799 } 813 }
800 814
801 void TileManager::DidFinishTileInitialization(Tile* tile) { 815 void TileManager::DidFinishTileInitialization(Tile* tile) {
802 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) 816 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
803 did_initialize_visible_tile_ = true; 817 did_initialize_visible_tile_ = true;
804 if (tile->required_for_activation()) { 818 if (tile->required_for_activation()) {
805 // It's possible that a tile required for activation is not in this list 819 // It's possible that a tile required for activation is not in this list
806 // if it was marked as being required after being dispatched for 820 // if it was marked as being required after being dispatched for
807 // rasterization but before AssignGPUMemory was called again. 821 // rasterization but before AssignGPUMemory was called again.
808 tiles_that_need_to_be_initialized_for_activation_.erase(tile); 822 tiles_that_need_to_be_initialized_for_activation_.erase(tile);
809 823
810 if (AreTilesRequiredForActivationReady()) 824 if (AreTilesRequiredForActivationReady())
811 client_->NotifyReadyToActivate(); 825 client_->NotifyReadyToActivate();
812 } 826 }
813 } 827 }
814 828
815 void TileManager::DidTileTreeBinChange(Tile* tile, 829 void TileManager::DidTileTreeBinChange(Tile* tile,
816 TileManagerBin new_tree_bin, 830 TileManagerBin new_tree_bin,
817 WhichTree tree) { 831 WhichTree tree) {
818 ManagedTileState& mts = tile->managed_state(); 832 ManagedTileState& mts = tile->managed_state();
819 mts.tree_bin[tree] = new_tree_bin; 833 mts.tree_bin[tree] = new_tree_bin;
820 } 834 }
821 835
822 } // namespace cc 836 } // 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