Index: cc/trees/layer_tree_host_unittest.cc |
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc |
index b37d41b37e879af8c2b7fe33db78c784103d2c33..1fc7d4d5c04e56851dbd67b30f0a1a08f6ad8c28 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -2976,6 +2976,10 @@ class PushPropertiesCountingLayer : public Layer { |
PassAs<LayerImpl>(); |
} |
+ void SetDrawsContent(bool draws_content) { |
+ UpdateDrawsContent(draws_content); |
+ } |
+ |
size_t push_properties_count() const { return push_properties_count_; } |
void reset_push_properties_count() { push_properties_count_ = 0; } |
@@ -3104,14 +3108,18 @@ class LayerTreeHostTestLayersPushProperties : public LayerTreeHostTest { |
case 6: |
child_->RemoveFromParent(); |
// No layers need commit. |
danakj
2014/07/17 17:21:25
Update comment explaining why this happens now
awoloszyn
2014/07/17 20:45:00
Done.
|
+ ++expected_push_properties_root_; |
break; |
case 7: |
root_->AddChild(child_); |
// Layers added to the tree get committed. |
danakj
2014/07/17 17:21:26
update comment
awoloszyn
2014/07/17 20:45:01
Done.
|
++expected_push_properties_child_; |
++expected_push_properties_grandchild_; |
+ ++expected_push_properties_root_; |
break; |
case 8: |
+ ++expected_push_properties_root_; |
danakj
2014/07/17 17:21:26
move below the comment and update it to reflect wh
awoloszyn
2014/07/17 20:45:00
Done.
|
+ ++expected_push_properties_child_; |
grandchild_->RemoveFromParent(); |
// No layers need commit. |
break; |
@@ -3119,6 +3127,8 @@ class LayerTreeHostTestLayersPushProperties : public LayerTreeHostTest { |
child_->AddChild(grandchild_); |
// Layers added to the tree get committed. |
danakj
2014/07/17 17:21:26
update comment
awoloszyn
2014/07/17 20:45:01
Done.
|
++expected_push_properties_grandchild_; |
+ ++expected_push_properties_root_; |
+ ++expected_push_properties_child_; |
break; |
case 10: |
layer_tree_host()->SetViewportSize(gfx::Size(20, 20)); |
@@ -3144,6 +3154,7 @@ class LayerTreeHostTestLayersPushProperties : public LayerTreeHostTest { |
// Layers added to the tree get committed. |
danakj
2014/07/17 17:21:26
update comment
awoloszyn
2014/07/17 20:45:00
Done.
|
++expected_push_properties_child_; |
++expected_push_properties_grandchild_; |
+ ++expected_push_properties_root_; |
break; |
case 15: |
grandchild_->SetPosition(gfx::Point(1, 1)); |
@@ -3256,6 +3267,7 @@ class LayerTreeHostTestImplLayersPushProperties |
// grandchild_impl is now the leaf that always pushes. It is pushed. |
++expected_push_properties_grandchild_impl_; |
+ ++expected_push_properties_root_impl_; |
danakj
2014/07/17 17:21:25
explain this one in comment too
awoloszyn
2014/07/17 20:45:00
Done.
|
break; |
case 7: |
// The leaf that always pushes is pushed. |
@@ -3264,6 +3276,7 @@ class LayerTreeHostTestImplLayersPushProperties |
// Child is added back. New layers are initialized. |
++expected_push_properties_grandchild2_impl_; |
++expected_push_properties_child2_impl_; |
+ ++expected_push_properties_root_impl_; |
danakj
2014/07/17 17:21:26
explain with commetn
awoloszyn
2014/07/17 20:45:00
Done.
|
break; |
case 8: |
// Leaf is removed. |
@@ -3271,6 +3284,8 @@ class LayerTreeHostTestImplLayersPushProperties |
// Always pushing. |
++expected_push_properties_grandchild_impl_; |
+ ++expected_push_properties_child2_impl_; |
danakj
2014/07/17 17:21:26
explain with comment
awoloszyn
2014/07/17 20:45:01
Done.
|
+ ++expected_push_properties_root_impl_; |
break; |
case 9: |
// Leaf is added back |
@@ -3278,6 +3293,8 @@ class LayerTreeHostTestImplLayersPushProperties |
// The leaf that always pushes is pushed. |
++expected_push_properties_grandchild_impl_; |
+ ++expected_push_properties_root_impl_; |
danakj
2014/07/17 17:21:26
explain with comment
awoloszyn
2014/07/17 20:45:00
Done.
|
+ ++expected_push_properties_child2_impl_; |
break; |
case 10: |
// The leaf that always pushes is pushed. |
@@ -3312,6 +3329,7 @@ class LayerTreeHostTestImplLayersPushProperties |
++expected_push_properties_child2_impl_; |
++expected_push_properties_grandchild2_impl_; |
+ ++expected_push_properties_root_impl_; |
break; |
case 15: |
// The position of this child was changed. |
@@ -3444,6 +3462,59 @@ class LayerTreeHostTestPropertyChangesDuringUpdateArePushed |
MULTI_THREAD_TEST_F(LayerTreeHostTestPropertyChangesDuringUpdateArePushed); |
+class LayerTreeHostTestSetDrawableCausesCommit : public LayerTreeHostTest { |
+ protected: |
+ virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
+ |
+ virtual void SetupTree() OVERRIDE { |
+ root_ = PushPropertiesCountingLayer::Create(); |
+ child_ = PushPropertiesCountingLayer::Create(); |
+ root_->AddChild(child_); |
+ |
+ layer_tree_host()->SetRootLayer(root_); |
+ LayerTreeHostTest::SetupTree(); |
+ } |
+ |
+ virtual void DidCommitAndDrawFrame() OVERRIDE { |
+ switch (layer_tree_host()->source_frame_number()) { |
+ case 0: |
+ break; |
+ case 1: { |
+ // During update, the ignore_set_needs_commit_ bit is set to true to |
+ // avoid causing a second commit to be scheduled. If a property change |
+ // is made during this, however, it needs to be pushed in the upcoming |
+ // commit. |
+ EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_EQ(1, root_->NumDescendantsThatDrawContent()); |
+ root_->reset_push_properties_count(); |
+ child_->reset_push_properties_count(); |
+ child_->SetDrawsContent(false); |
+ EXPECT_EQ(0, root_->NumDescendantsThatDrawContent()); |
+ EXPECT_EQ(0u, root_->push_properties_count()); |
+ EXPECT_EQ(0u, child_->push_properties_count()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
+ break; |
+ } |
+ case 2: |
+ EXPECT_EQ(1u, root_->push_properties_count()); |
+ EXPECT_EQ(1u, child_->push_properties_count()); |
+ EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_FALSE(child_->needs_push_properties()); |
+ EndTest(); |
+ break; |
+ } |
+ } |
+ |
+ virtual void AfterTest() OVERRIDE {} |
+ |
+ scoped_refptr<PushPropertiesCountingLayer> root_; |
+ scoped_refptr<PushPropertiesCountingLayer> child_; |
+}; |
+ |
+MULTI_THREAD_TEST_F(LayerTreeHostTestSetDrawableCausesCommit); |
+ |
class LayerTreeHostTestCasePushPropertiesThreeGrandChildren |
: public LayerTreeHostTest { |
protected: |
@@ -3551,9 +3622,9 @@ class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion |
grandchild1_->RemoveFromParent(); |
grandchild1_->SetPosition(gfx::Point(1, 1)); |
- EXPECT_FALSE(root_->needs_push_properties()); |
- EXPECT_FALSE(root_->descendant_needs_push_properties()); |
- EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->descendant_needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_FALSE(child_->descendant_needs_push_properties()); |
EXPECT_FALSE(grandchild2_->needs_push_properties()); |
EXPECT_FALSE(grandchild2_->descendant_needs_push_properties()); |
@@ -3562,9 +3633,9 @@ class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion |
child_->AddChild(grandchild1_); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
- EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
EXPECT_TRUE(grandchild1_->needs_push_properties()); |
EXPECT_FALSE(grandchild1_->descendant_needs_push_properties()); |
@@ -3575,9 +3646,9 @@ class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion |
grandchild2_->SetPosition(gfx::Point(1, 1)); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
- EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
EXPECT_TRUE(grandchild1_->needs_push_properties()); |
EXPECT_FALSE(grandchild1_->descendant_needs_push_properties()); |
@@ -3589,18 +3660,18 @@ class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursion |
// grandchild2_ will still need a push properties. |
grandchild1_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
- EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
// grandchild3_ does not need a push properties, so recursing should |
// no longer be needed. |
grandchild2_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
- EXPECT_FALSE(root_->descendant_needs_push_properties()); |
- EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->descendant_needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_FALSE(child_->descendant_needs_push_properties()); |
EndTest(); |
break; |
@@ -3636,18 +3707,19 @@ class LayerTreeHostTestPushPropertiesRemovingChildStopsRecursionWithPersistence |
// grandchild2_ will still need a push properties. |
grandchild1_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ // We will need push properties because our drawable children changed |
danakj
2014/07/17 17:21:25
nit: .
awoloszyn
2014/07/17 20:45:00
Done.
|
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
- EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
// grandchild3_ does not need a push properties, so recursing should |
// no longer be needed. |
grandchild2_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
- EXPECT_FALSE(root_->descendant_needs_push_properties()); |
- EXPECT_FALSE(child_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->descendant_needs_push_properties()); |
+ EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_FALSE(child_->descendant_needs_push_properties()); |
EndTest(); |
break; |
@@ -3685,7 +3757,7 @@ class LayerTreeHostTestPushPropertiesSetPropertiesWhileOutsideTree |
grandchild2_->SetPosition(gfx::Point(1, 1)); |
root_->AddChild(child_); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
@@ -3698,21 +3770,21 @@ class LayerTreeHostTestPushPropertiesSetPropertiesWhileOutsideTree |
grandchild1_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
grandchild2_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
grandchild3_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_FALSE(child_->descendant_needs_push_properties()); |
@@ -3764,21 +3836,21 @@ class LayerTreeHostTestPushPropertiesSetPropertyInParentThenChild |
grandchild1_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
grandchild2_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_FALSE(child_->descendant_needs_push_properties()); |
child_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_FALSE(root_->descendant_needs_push_properties()); |
EndTest(); |
@@ -3828,21 +3900,21 @@ class LayerTreeHostTestPushPropertiesSetPropertyInChildThenParent |
grandchild1_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_TRUE(child_->descendant_needs_push_properties()); |
grandchild2_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_TRUE(root_->descendant_needs_push_properties()); |
EXPECT_TRUE(child_->needs_push_properties()); |
EXPECT_FALSE(child_->descendant_needs_push_properties()); |
child_->RemoveFromParent(); |
- EXPECT_FALSE(root_->needs_push_properties()); |
+ EXPECT_TRUE(root_->needs_push_properties()); |
EXPECT_FALSE(root_->descendant_needs_push_properties()); |
EndTest(); |