Index: cc/layers/picture_layer_impl_unittest.cc |
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc |
index 47e307ad009893f98c1e5155fa03180abb0234ca..6c72965f7d496f0e7034a7ddfd71389fe78df599 100644 |
--- a/cc/layers/picture_layer_impl_unittest.cc |
+++ b/cc/layers/picture_layer_impl_unittest.cc |
@@ -138,12 +138,23 @@ class PictureLayerImplTest : public testing::Test { |
host_impl_.CreatePendingTree(); |
host_impl_.pending_tree()->SetPageScaleFactorAndLimits(1.f, 0.25f, 100.f); |
LayerTreeImpl* pending_tree = host_impl_.pending_tree(); |
- // Clear recycled tree. |
- pending_tree->DetachLayerTree(); |
- scoped_ptr<FakePictureLayerImpl> pending_layer = |
- FakePictureLayerImpl::CreateWithPile(pending_tree, id_, pile); |
- pending_layer->SetDrawsContent(true); |
+ // Steal from the recycled tree. |
+ scoped_ptr<LayerImpl> old_pending_root = pending_tree->DetachLayerTree(); |
+ DCHECK_IMPLIES(old_pending_root, old_pending_root->id() == id_); |
+ |
+ scoped_ptr<FakePictureLayerImpl> pending_layer; |
+ if (old_pending_root) { |
+ pending_layer.reset( |
+ static_cast<FakePictureLayerImpl*>(old_pending_root.release())); |
+ pending_layer->SetPile(pile); |
+ } else { |
+ pending_layer = |
+ FakePictureLayerImpl::CreateWithPile(pending_tree, id_, pile); |
+ pending_layer->SetDrawsContent(true); |
+ } |
+ // The bounds() just mirror the pile size. |
+ pending_layer->SetBounds(pending_layer->pile()->tiling_size()); |
pending_tree->SetRootLayer(pending_layer.Pass()); |
pending_layer_ = static_cast<FakePictureLayerImpl*>( |
@@ -2210,12 +2221,11 @@ TEST_F(PictureLayerImplTest, HighResCreatedWhenBoundsShrink) { |
// other words we want the pending layer to sync from the active layer. |
pending_layer_->SetBounds(gfx::Size(1, 1)); |
pending_layer_->SetNeedsPostCommitInitialization(); |
- pending_layer_->set_twin_layer(nullptr); |
- active_layer_->set_twin_layer(nullptr); |
EXPECT_TRUE(pending_layer_->needs_post_commit_initialization()); |
// Update the draw properties: sync from active tree should happen here. |
host_impl_.pending_tree()->UpdateDrawProperties(); |
+ EXPECT_FALSE(pending_layer_->needs_post_commit_initialization()); |
// Another sanity check. |
ASSERT_EQ(1.f, pending_layer_->MinimumContentsScale()); |
@@ -4319,6 +4329,33 @@ TEST_F(OcclusionTrackingPictureLayerImplTest, |
total_expected_occluded_tile_count); |
} |
+TEST_F(PictureLayerImplTest, PendingOrActiveTwinLayer) { |
+ gfx::Size tile_size(102, 102); |
+ gfx::Size layer_bounds(1000, 1000); |
+ |
+ scoped_refptr<FakePicturePileImpl> pile = |
+ FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
+ SetupPendingTree(pile); |
+ EXPECT_FALSE(pending_layer_->GetPendingOrActiveTwinLayer()); |
+ |
+ ActivateTree(); |
+ EXPECT_FALSE(active_layer_->GetPendingOrActiveTwinLayer()); |
+ |
+ SetupPendingTree(pile); |
+ EXPECT_TRUE(pending_layer_->GetPendingOrActiveTwinLayer()); |
+ EXPECT_TRUE(active_layer_->GetPendingOrActiveTwinLayer()); |
+ EXPECT_EQ(pending_layer_, active_layer_->GetPendingOrActiveTwinLayer()); |
+ EXPECT_EQ(active_layer_, pending_layer_->GetPendingOrActiveTwinLayer()); |
+ |
+ ActivateTree(); |
+ EXPECT_FALSE(active_layer_->GetPendingOrActiveTwinLayer()); |
+ |
+ // Make an empty pending tree. |
+ host_impl_.CreatePendingTree(); |
+ host_impl_.pending_tree()->DetachLayerTree(); |
+ EXPECT_FALSE(active_layer_->GetPendingOrActiveTwinLayer()); |
+} |
+ |
TEST_F(PictureLayerImplTest, RecycledTwinLayer) { |
gfx::Size tile_size(102, 102); |
gfx::Size layer_bounds(1000, 1000); |
@@ -4340,7 +4377,9 @@ TEST_F(PictureLayerImplTest, RecycledTwinLayer) { |
EXPECT_TRUE(active_layer_->GetRecycledTwinLayer()); |
EXPECT_EQ(old_pending_layer_, active_layer_->GetRecycledTwinLayer()); |
- host_impl_.ResetRecycleTreeForTesting(); |
+ // Make an empty pending tree. |
+ host_impl_.CreatePendingTree(); |
+ host_impl_.pending_tree()->DetachLayerTree(); |
vmpstr
2014/10/24 16:47:05
I'm not sure this tests the same thing since we no
danakj
2014/10/24 16:53:30
I think the only way the layer can be deleted from
|
EXPECT_FALSE(active_layer_->GetRecycledTwinLayer()); |
} |