Chromium Code Reviews| Index: cc/layer_impl.cc |
| diff --git a/cc/layer_impl.cc b/cc/layer_impl.cc |
| index 3ee3c751f95685c4665c6cf0562db23b2ed1e755..0c22ccf70556f5fc3951c10c50fee00f4f4c3d59 100644 |
| --- a/cc/layer_impl.cc |
| +++ b/cc/layer_impl.cc |
| @@ -56,6 +56,7 @@ LayerImpl::LayerImpl(LayerTreeImpl* treeImpl, int id) |
| { |
| DCHECK(m_layerId > 0); |
| DCHECK(m_layerTreeImpl); |
| + m_layerTreeImpl->RegisterLayer(this); |
| } |
| LayerImpl::~LayerImpl() |
| @@ -63,6 +64,7 @@ LayerImpl::~LayerImpl() |
| #ifndef NDEBUG |
| DCHECK(!m_betweenWillDrawAndDidDraw); |
| #endif |
| + m_layerTreeImpl->UnregisterLayer(this); |
| } |
| void LayerImpl::addChild(scoped_ptr<LayerImpl> child) |
| @@ -494,32 +496,46 @@ void LayerImpl::setBounds(const gfx::Size& bounds) |
| void LayerImpl::setMaskLayer(scoped_ptr<LayerImpl> maskLayer) |
| { |
| - if (maskLayer) |
| - DCHECK_EQ(layerTreeImpl(), maskLayer->layerTreeImpl()); |
| - m_maskLayer = maskLayer.Pass(); |
| + int newLayerId = maskLayer ? maskLayer->id() : -1; |
| - int newLayerId = m_maskLayer ? m_maskLayer->id() : -1; |
| - if (newLayerId == m_maskLayerId) |
| + if (maskLayer) { |
| + DCHECK_EQ(layerTreeImpl(), maskLayer->layerTreeImpl()); |
| + DCHECK_NE(newLayerId, m_maskLayerId); |
| + } else if (newLayerId == m_maskLayerId) |
|
danakj
2012/12/13 23:57:11
This is "if (!maskLayer && newLayerId == m_maskLay
enne (OOO)
2012/12/14 00:21:12
No, I meant else if. This is the case where "if y
danakj
2012/12/14 00:23:15
OOhh. ok!
|
| return; |
|
danakj
2012/12/13 23:57:11
If the ids match, we're going to free the maskLaye
|
| + m_maskLayer = maskLayer.Pass(); |
| m_maskLayerId = newLayerId; |
| noteLayerPropertyChangedForSubtree(); |
| } |
| +scoped_ptr<LayerImpl> LayerImpl::takeMaskLayer() |
| +{ |
| + m_maskLayerId = -1; |
| + return m_maskLayer.Pass(); |
| +} |
| + |
| void LayerImpl::setReplicaLayer(scoped_ptr<LayerImpl> replicaLayer) |
| { |
| - if (replicaLayer) |
| - DCHECK_EQ(layerTreeImpl(), replicaLayer->layerTreeImpl()); |
| - m_replicaLayer = replicaLayer.Pass(); |
| + int newLayerId = replicaLayer ? replicaLayer->id() : -1; |
| - int newLayerId = m_replicaLayer ? m_replicaLayer->id() : -1; |
| - if (newLayerId == m_replicaLayerId) |
| + if (replicaLayer) { |
| + DCHECK_EQ(layerTreeImpl(), replicaLayer->layerTreeImpl()); |
| + DCHECK_NE(newLayerId, m_replicaLayerId); |
| + } else if (newLayerId == m_replicaLayerId) |
| return; |
| + m_replicaLayer = replicaLayer.Pass(); |
| m_replicaLayerId = newLayerId; |
| noteLayerPropertyChangedForSubtree(); |
| } |
| +scoped_ptr<LayerImpl> LayerImpl::takeReplicaLayer() |
| +{ |
| + m_replicaLayerId = -1; |
| + return m_replicaLayer.Pass(); |
| +} |
| + |
| void LayerImpl::setDrawsContent(bool drawsContent) |
| { |
| if (m_drawsContent == drawsContent) |