Index: cc/picture_layer_tiling.cc |
diff --git a/cc/picture_layer_tiling.cc b/cc/picture_layer_tiling.cc |
index 95be306169e327fa4b7f8685d86fc3c0fc979e18..bb1222ed52bb47224b9d9518a13059374d3ee6be 100644 |
--- a/cc/picture_layer_tiling.cc |
+++ b/cc/picture_layer_tiling.cc |
@@ -50,7 +50,7 @@ Tile* PictureLayerTiling::TileAt(int i, int j) const { |
TileMap::const_iterator iter = tiles_.find(TileMapKey(i, j)); |
if (iter == tiles_.end()) |
return NULL; |
- return iter->second.get(); |
+ return iter->second.tile(); |
} |
void PictureLayerTiling::CreateTile(int i, int j) { |
@@ -60,7 +60,7 @@ void PictureLayerTiling::CreateTile(int i, int j) { |
DCHECK(tiles_.find(key) == tiles_.end()); |
scoped_refptr<Tile> tile = client_->CreateTile(this, tile_rect); |
if (tile) |
- tiles_[key] = tile; |
+ tiles_.insert(make_pair(key, TileHandle(tile))); |
} |
Region PictureLayerTiling::OpaqueRegionInContentRect( |
@@ -414,7 +414,8 @@ void PictureLayerTiling::UpdateTilePriorities( |
TilePriority priority; |
DCHECK(!priority.is_live); |
- Tile* tile = find->second.get(); |
+ TileHandle* tile_handle = &find->second; |
+ Tile* tile = tile_handle->tile(); |
tile->set_priority(tree, priority); |
} |
last_prioritized_rect_ = inflated_rect; |
@@ -439,7 +440,8 @@ void PictureLayerTiling::UpdateTilePriorities( |
TileMap::iterator find = tiles_.find(iter.index()); |
if (find == tiles_.end()) |
continue; |
- Tile* tile = find->second.get(); |
+ TileHandle* tile_handle = &find->second; |
+ Tile* tile = tile_handle->tile(); |
gfx::Rect tile_bounds = |
tiling_data_.TileBounds(iter.index_x(), iter.index_y()); |
@@ -472,7 +474,8 @@ void PictureLayerTiling::UpdateTilePriorities( |
TileMap::iterator find = tiles_.find(iter.index()); |
if (find == tiles_.end()) |
continue; |
- Tile* tile = find->second.get(); |
+ TileHandle* tile_handle = &find->second; |
+ Tile* tile = tile_handle->tile(); |
gfx::Rect tile_bounds = |
tiling_data_.TileBounds(iter.index_x(), iter.index_y()); |
@@ -517,8 +520,9 @@ void PictureLayerTiling::UpdateTilePriorities( |
void PictureLayerTiling::DidBecomeActive() { |
for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) { |
- it->second->set_priority(ACTIVE_TREE, it->second->priority(PENDING_TREE)); |
- it->second->set_priority(PENDING_TREE, TilePriority()); |
+ Tile* tile = it->second.tile(); |
+ tile->set_priority(ACTIVE_TREE, tile->priority(PENDING_TREE)); |
+ tile->set_priority(PENDING_TREE, TilePriority()); |
// Tile holds a ref onto a picture pile. If the tile never gets invalidated |
// and recreated, then that picture pile ref could exist indefinitely. To |
@@ -526,7 +530,7 @@ void PictureLayerTiling::DidBecomeActive() { |
// will cause PicturePileImpls and their clones to get deleted once the |
// corresponding PictureLayerImpl and any in flight raster jobs go out of |
// scope. |
- client_->UpdatePile(it->second); |
+ client_->UpdatePile(tile); |
} |
} |
@@ -539,4 +543,12 @@ scoped_ptr<base::Value> PictureLayerTiling::AsValue() const { |
return state.PassAs<base::Value>(); |
} |
+TileHandle::TileHandle(scoped_refptr<Tile> tile) |
+ : tile_(tile), |
+ managed_tile_state_(tile_->tile_manager()->RegisterTile(tile_)) { |
+} |
+ |
+TileHandle::~TileHandle() { |
+} |
+ |
} // namespace cc |