Chromium Code Reviews| Index: cc/layers/picture_layer_impl.cc |
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
| index 3a0753f5da627c156836ea8d7a77240927261e75..306fffc9adff76e291e9ad333562600f374826a2 100644 |
| --- a/cc/layers/picture_layer_impl.cc |
| +++ b/cc/layers/picture_layer_impl.cc |
| @@ -54,17 +54,6 @@ const int kTileRoundUp = 64; |
| namespace cc { |
| -PictureLayerImpl::Pair::Pair() : active(nullptr), pending(nullptr) { |
| -} |
| - |
| -PictureLayerImpl::Pair::Pair(PictureLayerImpl* active_layer, |
| - PictureLayerImpl* pending_layer) |
| - : active(active_layer), pending(pending_layer) { |
| -} |
| - |
| -PictureLayerImpl::Pair::~Pair() { |
| -} |
| - |
| PictureLayerImpl::PictureLayerImpl( |
| LayerTreeImpl* tree_impl, |
| int id, |
| @@ -87,13 +76,26 @@ PictureLayerImpl::PictureLayerImpl( |
| only_used_low_res_last_append_quads_(false), |
| is_mask_(is_mask), |
| nearest_neighbor_(false) { |
| - layer_tree_impl()->RegisterPictureLayerImpl(this); |
| + // If this layer is created while we have no tile manager, then we will get a |
| + // call to ReleaseResources and RecreateResources when we get a tile manager, |
| + // so we will be able to register a tiling set into it at that time. |
| + // Otherwise, if tile manager already exists, then register the tiling set |
| + // right now. |
| + if (tree_impl->tile_manager()) { |
| + WhichTree tree = tree_impl->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; |
| + tree_impl->tile_manager()->RegisterPictureLayerTilingSet(id, tree, |
| + tilings_.get()); |
| + } |
| } |
| PictureLayerImpl::~PictureLayerImpl() { |
| if (twin_layer_) |
| twin_layer_->twin_layer_ = nullptr; |
| - layer_tree_impl()->UnregisterPictureLayerImpl(this); |
| + |
| + if (layer_tree_impl()->tile_manager()) { |
| + layer_tree_impl()->tile_manager()->UnregisterPictureLayerTilingSet( |
| + id(), GetTree()); |
| + } |
| } |
| const char* PictureLayerImpl::LayerTypeAsString() const { |
| @@ -600,14 +602,20 @@ void PictureLayerImpl::DidBeginTracing() { |
| } |
| void PictureLayerImpl::ReleaseResources() { |
| - // Recreate tilings with new settings, since some of those might change when |
| - // we release resources. |
| + if (layer_tree_impl()->tile_manager()) { |
|
enne (OOO)
2015/02/10 21:28:31
When can you not have a TileManager during this ca
vmpstr
2015/02/11 21:37:16
Several unittests aren't too happy without this if
enne (OOO)
2015/02/11 21:46:16
Ok! Thanks for the explanation.
|
| + layer_tree_impl()->tile_manager()->UnregisterPictureLayerTilingSet( |
| + id(), GetTree()); |
| + } |
| tilings_ = nullptr; |
| ResetRasterScale(); |
| } |
| void PictureLayerImpl::RecreateResources() { |
| + DCHECK(!tilings_); |
| + DCHECK(layer_tree_impl()->tile_manager()); |
| tilings_ = CreatePictureLayerTilingSet(); |
| + layer_tree_impl()->tile_manager()->RegisterPictureLayerTilingSet( |
| + id(), GetTree(), tilings_.get()); |
| // To avoid an edge case after lost context where the tree is up to date but |
| // the tilings have not been managed, request an update draw properties |