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

Unified 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, 6 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
« cc/resources/tile_manager.h ('K') | « cc/resources/tile_manager.h ('k') | no next file » | 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 3eb7bc29714c803b2ab51bb2870dd587f6325ea7..2c44fd92aa24a7424631f9446c4a2087dcb664f7 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -154,7 +154,10 @@ void TileManager::SetGlobalState(
void TileManager::RegisterTile(Tile* tile) {
DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) == tiles_.end());
DCHECK(!tile->required_for_activation());
+ DCHECK(managed_tile_map_.find(tile->id()) == managed_tile_map_.end());
+
tiles_.push_back(tile);
+ managed_tile_map_[tile->id()] = tile;
}
void TileManager::UnregisterTile(Tile* tile) {
@@ -170,6 +173,10 @@ void TileManager::UnregisterTile(Tile* tile) {
DCHECK(std::find(tiles_.begin(), tiles_.end(), tile) != tiles_.end());
FreeResourcesForTile(tile);
tiles_.erase(std::remove(tiles_.begin(), tiles_.end(), tile));
+
+ ManagedTileMap::iterator managed_iter = managed_tile_map_.find(tile->id());
+ DCHECK(managed_iter != managed_tile_map_.end());
+ managed_tile_map_.erase(managed_iter);
}
bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const {
@@ -736,7 +743,7 @@ RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) {
rendering_stats_instrumentation_,
base::Bind(&TileManager::OnRasterTaskCompleted,
base::Unretained(this),
- make_scoped_refptr(tile),
+ tile->id(),
base::Passed(&resource),
mts.raster_mode),
&decode_tasks);
@@ -766,7 +773,7 @@ void TileManager::OnImageDecodeTaskCompleted(
}
void TileManager::OnRasterTaskCompleted(
- scoped_refptr<Tile> tile,
+ ManagedTileId managed_id,
reveman 2013/07/03 00:32:47 Lets use the same type name for the Id everywhere.
scoped_ptr<ResourcePool::Resource> resource,
RasterMode raster_mode,
const PicturePileImpl::Analysis& analysis,
@@ -774,6 +781,13 @@ void TileManager::OnRasterTaskCompleted(
TRACE_EVENT1("cc", "TileManager::OnRasterTaskCompleted",
"was_canceled", was_canceled);
+ ManagedTileMap::iterator managed_iter = managed_tile_map_.find(managed_id);
+ if (managed_iter == managed_tile_map_.end()) {
+ resource_pool_->ReleaseResource(resource.Pass());
+ return;
+ }
+
+ Tile* tile = managed_iter->second;
ManagedTileState& mts = tile->managed_state();
ManagedTileState::TileVersion& tile_version =
mts.tile_versions[raster_mode];
@@ -793,9 +807,9 @@ void TileManager::OnRasterTaskCompleted(
tile_version.resource_ = resource.Pass();
}
- FreeUnusedResourcesForTile(tile.get());
+ FreeUnusedResourcesForTile(tile);
- DidFinishTileInitialization(tile.get());
+ DidFinishTileInitialization(tile);
}
void TileManager::DidFinishTileInitialization(Tile* tile) {
« 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