summaryrefslogtreecommitdiffstats
path: root/cc/layer_impl.cc
diff options
context:
space:
mode:
authorenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-14 07:03:24 +0000
committerenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-14 07:03:24 +0000
commit361bc00d822580a63a08b1c821d12a7ff8c8a41a (patch)
tree81f75c3cdfcb76695ad839370a8f54a11c657ccc /cc/layer_impl.cc
parent7ce577fa3ed5fc1b411fdc9cb664adfd17d4057a (diff)
downloadchromium_src-361bc00d822580a63a08b1c821d12a7ff8c8a41a.zip
chromium_src-361bc00d822580a63a08b1c821d12a7ff8c8a41a.tar.gz
chromium_src-361bc00d822580a63a08b1c821d12a7ff8c8a41a.tar.bz2
cc: Add id->LayerImpl map to LayerTreeImpl
This is a prerequisite to two LayerTreeImpls, as PictureLayerImpls in the active tree may need to ask about their pending tree sibilings with the same id. Once this lands, functionality like findScrollingLayerbyId can be wrapped into this too. LayerImpl now registers itself with its tree on creation and destruction. As there are now asserts that a given id is not already in use, a number of tests have been updated to not duplicate layer ids. There doesn't technically need to be an unregister step, but as LayerImpl doesn't necessarily have to be in the LayerImpl tree rooted in the LayerTreeImpl, this unregister check will blow up if anybody has a layer outliving their registered tree (which is bad). As LayerImpl has single ownership, it's impossible to assign the same non-NULL replica or mask to a layer, so the LayerImpl unit tests are updated to not test this anymore. Masks and replicas are also modified to keep their id in sync with their pointer during tree synchronization to prevent asserts about duplicate ids. R=danakj@chromium.org BUG=155209 Review URL: https://chromiumcodereview.appspot.com/11575018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173110 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/layer_impl.cc')
-rw-r--r--cc/layer_impl.cc36
1 files changed, 26 insertions, 10 deletions
diff --git a/cc/layer_impl.cc b/cc/layer_impl.cc
index 3ee3c75..0c22ccf 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)
return;
+ 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)