Index: cc/layer_tree_host_unittest_delegated.cc |
diff --git a/cc/layer_tree_host_unittest_delegated.cc b/cc/layer_tree_host_unittest_delegated.cc |
index 6fe3f8fa7c1aa93ad7dd2131cf0cd06e6c48ac7a..649a0d69d9799faa6935dacc3798956d49f99212 100644 |
--- a/cc/layer_tree_host_unittest_delegated.cc |
+++ b/cc/layer_tree_host_unittest_delegated.cc |
@@ -17,31 +17,6 @@ namespace { |
// These tests deal with delegated renderer layers. |
class LayerTreeHostDelegatedTest : public ThreadedTest { |
protected: |
- class TestDelegatedRendererLayer : public DelegatedRendererLayer { |
- public: |
- static scoped_refptr<DelegatedRendererLayer> Create( |
- LayerTreeHostDelegatedTest* test) { |
- return new TestDelegatedRendererLayer(test); |
- } |
- |
- virtual void update(ResourceUpdateQueue& queue, |
- const OcclusionTracker* occlusion, |
- RenderingStats* stats) OVERRIDE { |
- DelegatedRendererLayer::update(queue, occlusion, stats); |
- test_->UpdateDelegatedLayer(this); |
- |
- } |
- protected: |
- explicit TestDelegatedRendererLayer(LayerTreeHostDelegatedTest* test) |
- : DelegatedRendererLayer(), |
- test_(test) {} |
- virtual ~TestDelegatedRendererLayer() {} |
- LayerTreeHostDelegatedTest* test_; |
- }; |
- |
- // Called by each delegated renderer layer when update is called on it. |
- virtual void UpdateDelegatedLayer(TestDelegatedRendererLayer* layer) {} |
- |
scoped_ptr<DelegatedFrameData> CreateFrameData(gfx::Rect root_output_rect, |
gfx::Rect root_damage_rect) { |
scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); |
@@ -69,7 +44,7 @@ class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer |
root_->setAnchorPoint(gfx::PointF()); |
root_->setBounds(gfx::Size(10, 10)); |
- delegated_ = TestDelegatedRendererLayer::Create(this); |
+ delegated_ = DelegatedRendererLayer::Create(); |
delegated_->setAnchorPoint(gfx::PointF()); |
delegated_->setBounds(gfx::Size(10, 10)); |
delegated_->setIsDrawable(true); |
@@ -98,12 +73,11 @@ class LayerTreeHostDelegatedTestCreateChildId |
num_activates_(0), |
did_reset_child_id_(false) {} |
- virtual void UpdateDelegatedLayer(TestDelegatedRendererLayer* layer) |
- OVERRIDE { |
+ virtual void didCommit() OVERRIDE { |
if (testEnded()) |
return; |
- layer->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), |
- gfx::Rect(0, 0, 1, 1))); |
+ delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), |
+ gfx::Rect(0, 0, 1, 1))); |
} |
virtual void treeActivatedOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { |
@@ -113,14 +87,14 @@ class LayerTreeHostDelegatedTestCreateChildId |
++num_activates_; |
switch(num_activates_) { |
- case 1: |
+ case 2: |
EXPECT_TRUE(delegated_impl->child_id()); |
EXPECT_FALSE(did_reset_child_id_); |
host_impl->resourceProvider()->graphicsContext3D()->loseContextCHROMIUM( |
GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
break; |
- case 2: |
+ case 3: |
EXPECT_TRUE(delegated_impl->child_id()); |
EXPECT_TRUE(did_reset_child_id_); |
endTest(); |
@@ -132,14 +106,14 @@ class LayerTreeHostDelegatedTestCreateChildId |
bool success) OVERRIDE { |
EXPECT_TRUE(success); |
- if (!num_activates_) |
+ if (num_activates_ < 2) |
return; |
LayerImpl* root_impl = host_impl->activeTree()->RootLayer(); |
DelegatedRendererLayerImpl* delegated_impl = |
static_cast<DelegatedRendererLayerImpl*>(root_impl->children()[0]); |
- EXPECT_EQ(1, num_activates_); |
+ EXPECT_EQ(2, num_activates_); |
EXPECT_FALSE(delegated_impl->child_id()); |
did_reset_child_id_ = true; |
} |
@@ -164,6 +138,12 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage |
int next_source_frame_number = m_layerTreeHost->commitNumber(); |
switch (next_source_frame_number) { |
case 1: |
+ // The first time the layer gets a frame the whole layer should be |
+ // damaged. |
+ delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), |
+ gfx::Rect(0, 0, 1, 1))); |
+ break; |
+ case 2: |
// Should create a total amount of gfx::Rect(2, 2, 10, 6) damage. |
// The frame size is 20x20 while the layer is 10x10, so this should |
// produce a gfx::Rect(1, 1, 5, 3) damage rect. |
@@ -172,54 +152,59 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage |
delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 20, 20), |
gfx::Rect(7, 2, 5, 6))); |
break; |
- case 2: |
+ case 3: |
// Should create zero damage. |
m_layerTreeHost->setNeedsCommit(); |
break; |
- case 3: |
+ case 4: |
// Should damage the full viewport. |
delegated_->setBounds(gfx::Size(2, 2)); |
break; |
- case 4: |
+ case 5: |
// Should create zero damage. |
m_layerTreeHost->setNeedsCommit(); |
break; |
- case 5: |
+ case 6: |
// Should damage the full layer. |
delegated_->setBounds(gfx::Size(6, 6)); |
delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), |
gfx::Rect(1, 1, 2, 2))); |
break; |
- case 6: |
+ case 7: |
// Should create zero damage. |
m_layerTreeHost->setNeedsCommit(); |
break; |
- case 7: |
+ case 8: |
// Should damage the full layer. |
delegated_->SetDisplaySize(gfx::Size(10, 10)); |
break; |
- case 8: |
+ case 9: |
// Should create zero damage. |
m_layerTreeHost->setNeedsCommit(); |
break; |
- case 9: |
+ case 10: |
// Setting an empty frame should damage the whole layer the |
// first time. |
delegated_->SetFrameData(CreateEmptyFrameData()); |
break; |
- case 10: |
+ case 11: |
// Setting an empty frame shouldn't damage anything after the |
// first time. |
delegated_->SetFrameData(CreateEmptyFrameData()); |
break; |
- case 11: |
+ case 12: |
+ // Having valid content to display agains should damage the whole layer. |
+ delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10), |
+ gfx::Rect(5, 5, 1, 1))); |
+ break; |
+ case 13: |
// Should create gfx::Rect(1, 1, 2, 2) of damage. The frame size is |
// 5x5 and the display size is now set to 10x10, so this should result |
// in a gfx::Rect(2, 2, 4, 4) damage rect. |
delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), |
gfx::Rect(1, 1, 2, 2))); |
break; |
- case 12: |
+ case 14: |
// Should create zero damage. |
m_layerTreeHost->setNeedsCommit(); |
break; |
@@ -239,54 +224,64 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage |
switch (host_impl->activeTree()->source_frame_number()) { |
case 0: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
+ // Before the layer has a frame to display it should not |
+ // be visible at all, and not damage anything. |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
damage_rect.ToString()); |
break; |
case 1: |
- EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
damage_rect.ToString()); |
break; |
case 2: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(), |
damage_rect.ToString()); |
break; |
case 3: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
damage_rect.ToString()); |
break; |
case 4: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
damage_rect.ToString()); |
break; |
case 5: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
damage_rect.ToString()); |
break; |
case 6: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
damage_rect.ToString()); |
break; |
case 7: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
damage_rect.ToString()); |
break; |
case 8: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
damage_rect.ToString()); |
break; |
case 9: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
damage_rect.ToString()); |
break; |
case 10: |
- EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
damage_rect.ToString()); |
break; |
case 11: |
- EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(), |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
damage_rect.ToString()); |
break; |
case 12: |
+ EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
+ damage_rect.ToString()); |
+ break; |
+ case 13: |
+ EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(), |
+ damage_rect.ToString()); |
+ break; |
+ case 14: |
EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
damage_rect.ToString()); |
endTest(); |