| Index: cc/layers/picture_layer_impl.cc
|
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
|
| index dbe343d08446b986f33a688e4b3b0c2c5a251508..d23849a0a8945863874c52ee8e5447e69dcb2191 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,
|
| @@ -88,12 +77,28 @@ PictureLayerImpl::PictureLayerImpl(
|
| 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 +605,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()) {
|
| + 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
|
|
|