Chromium Code Reviews| 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) { |