| Index: cc/trees/damage_tracker_unittest.cc
|
| diff --git a/cc/trees/damage_tracker_unittest.cc b/cc/trees/damage_tracker_unittest.cc
|
| index 9476955ea8b6f41a1ba441cc8b2a1eb264cfb683..51a6137ad5836da99f6dbcef2d9c7302e2e4bf40 100644
|
| --- a/cc/trees/damage_tracker_unittest.cc
|
| +++ b/cc/trees/damage_tracker_unittest.cc
|
| @@ -268,6 +268,100 @@ TEST_F(DamageTrackerTest, VerifyDamageForUpdateRects) {
|
| EXPECT_EQ(gfx::Rect(120, 125, 1, 2).ToString(), root_damage_rect.ToString());
|
| }
|
|
|
| +TEST_F(DamageTrackerTest, VerifyDamageForLayerDamageRects) {
|
| + scoped_ptr<LayerImpl> root = CreateAndSetUpTestTreeWithOneSurface();
|
| + LayerImpl* child = root->children()[0];
|
| +
|
| + // CASE 1: Adding the layer damage rect should cause the corresponding damage
|
| + // to the surface.
|
| + ClearDamageForAllSurfaces(root.get());
|
| + child->AddDamageRect(gfx::RectF(10.f, 11.f, 12.f, 13.f));
|
| + EmulateDrawingOneFrame(root.get());
|
| +
|
| + // Damage position on the surface should be: position of layer damage_rect
|
| + // (10, 11) relative to the child (100, 100).
|
| + gfx::Rect root_damage_rect =
|
| + root->render_surface()->damage_tracker()->current_damage_rect();
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(110, 111, 12, 13)));
|
| +
|
| + // CASE 2: The same layer damage rect twice in a row still produces the same
|
| + // damage.
|
| + ClearDamageForAllSurfaces(root.get());
|
| + child->AddDamageRect(gfx::RectF(10.f, 11.f, 12.f, 13.f));
|
| + EmulateDrawingOneFrame(root.get());
|
| + root_damage_rect =
|
| + root->render_surface()->damage_tracker()->current_damage_rect();
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(110, 111, 12, 13)));
|
| +
|
| + // CASE 3: Adding a different layer damage rect should cause damage on the
|
| + // new damaged region, but no additional exposed old region.
|
| + ClearDamageForAllSurfaces(root.get());
|
| + child->AddDamageRect(gfx::RectF(20.f, 25.f, 1.f, 2.f));
|
| + EmulateDrawingOneFrame(root.get());
|
| +
|
| + // Damage position on the surface should be: position of layer damage_rect
|
| + // (20, 25) relative to the child (100, 100).
|
| + root_damage_rect =
|
| + root->render_surface()->damage_tracker()->current_damage_rect();
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(120, 125, 1, 2)));
|
| +
|
| + // CASE 4: Adding multiple layer damage rects should cause a unified
|
| + // damage on root damage rect.
|
| + ClearDamageForAllSurfaces(root.get());
|
| + child->AddDamageRect(gfx::RectF(20.f, 25.f, 1.f, 2.f));
|
| + child->AddDamageRect(gfx::RectF(10.f, 15.f, 3.f, 4.f));
|
| + EmulateDrawingOneFrame(root.get());
|
| +
|
| + // Damage position on the surface should be: position of layer damage_rect
|
| + // (20, 25) relative to the child (100, 100).
|
| + root_damage_rect =
|
| + root->render_surface()->damage_tracker()->current_damage_rect();
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(120, 125, 1, 2)));
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(110, 115, 3, 4)));
|
| +}
|
| +
|
| +TEST_F(DamageTrackerTest, VerifyDamageForLayerUpdateAndDamageRects) {
|
| + scoped_ptr<LayerImpl> root = CreateAndSetUpTestTreeWithOneSurface();
|
| + LayerImpl* child = root->children()[0];
|
| +
|
| + // CASE 1: Adding the layer damage rect and update rect should cause the
|
| + // corresponding damage to the surface.
|
| + ClearDamageForAllSurfaces(root.get());
|
| + child->AddDamageRect(gfx::RectF(5.f, 6.f, 12.f, 13.f));
|
| + child->SetUpdateRect(gfx::RectF(15.f, 16.f, 14.f, 10.f));
|
| + EmulateDrawingOneFrame(root.get());
|
| +
|
| + // Damage position on the surface should be: position of unified layer
|
| + // damage_rect and update rect (5, 6)
|
| + // relative to the child (100, 100).
|
| + gfx::Rect root_damage_rect =
|
| + root->render_surface()->damage_tracker()->current_damage_rect();
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(105, 106, 24, 20)));
|
| +
|
| + // CASE 2: The same layer damage rect and update rect twice in a row still
|
| + // produces the same damage.
|
| + ClearDamageForAllSurfaces(root.get());
|
| + child->AddDamageRect(gfx::RectF(10.f, 11.f, 12.f, 13.f));
|
| + child->SetUpdateRect(gfx::RectF(10.f, 11.f, 14.f, 15.f));
|
| + EmulateDrawingOneFrame(root.get());
|
| + root_damage_rect =
|
| + root->render_surface()->damage_tracker()->current_damage_rect();
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(110, 111, 14, 15)));
|
| +
|
| + // CASE 3: Adding a different layer damage rect and update rect should cause
|
| + // damage on the new damaged region, but no additional exposed old region.
|
| + ClearDamageForAllSurfaces(root.get());
|
| + child->AddDamageRect(gfx::RectF(20.f, 25.f, 2.f, 3.f));
|
| + child->SetUpdateRect(gfx::RectF(5.f, 10.f, 7.f, 8.f));
|
| + EmulateDrawingOneFrame(root.get());
|
| +
|
| + // Damage position on the surface should be: position of unified layer damage
|
| + // rect and update rect (5, 10) relative to the child (100, 100).
|
| + root_damage_rect =
|
| + root->render_surface()->damage_tracker()->current_damage_rect();
|
| + EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(105, 110, 17, 18)));
|
| +}
|
| +
|
| TEST_F(DamageTrackerTest, VerifyDamageForPropertyChanges) {
|
| scoped_ptr<LayerImpl> root = CreateAndSetUpTestTreeWithOneSurface();
|
| LayerImpl* child = root->children()[0];
|
|
|