Index: cc/trees/damage_tracker_unittest.cc |
diff --git a/cc/trees/damage_tracker_unittest.cc b/cc/trees/damage_tracker_unittest.cc |
index fd1815ec110322be2f63d690299cd8f9bf2e04a8..de3731096c3420500820eb6c2df308d485c46a57 100644 |
--- a/cc/trees/damage_tracker_unittest.cc |
+++ b/cc/trees/damage_tracker_unittest.cc |
@@ -189,6 +189,9 @@ TEST_F(DamageTrackerTest, SanityCheckTestTreeWithOneSurface) { |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(500, 500).ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, SanityCheckTestTreeWithTwoSurfaces) { |
@@ -217,6 +220,13 @@ TEST_F(DamageTrackerTest, SanityCheckTestTreeWithTwoSurfaces) { |
EXPECT_EQ(gfx::Rect(190, 190, 16, 18).ToString(), |
child_damage_rect.ToString()); |
EXPECT_EQ(gfx::Rect(500, 500).ToString(), root_damage_rect.ToString()); |
+ |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForUpdateRects) { |
@@ -261,6 +271,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForUpdateRects) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(120, 125, 1, 2).ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForLayerDamageRects) { |
@@ -318,6 +331,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerDamageRects) { |
&root_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))); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForLayerUpdateAndDamageRects) { |
@@ -364,6 +380,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerUpdateAndDamageRects) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(105, 110, 17, 18))); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForPropertyChanges) { |
@@ -388,6 +407,12 @@ TEST_F(DamageTrackerTest, VerifyDamageForPropertyChanges) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(expected_rect.ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// CASE 2: If a layer moves due to property change, it damages both the new |
// location and the old (exposed) location. The old location is the |
@@ -415,6 +440,111 @@ TEST_F(DamageTrackerTest, VerifyDamageForPropertyChanges) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_FLOAT_RECT_EQ(expected_rect, root_damage_rect); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ // Transform from browser animation should not be considered as damage from |
+ // contributing layer since it is applied to the whole layer which has a |
+ // render surface. |
+ EXPECT_FALSE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+} |
+ |
+TEST_F(DamageTrackerTest, |
+ VerifyDamageForPropertyChangesFromContributingContents) { |
+ LayerImpl* root = CreateAndSetUpTestTreeWithTwoSurfaces(); |
+ LayerImpl* child1 = root->test_properties()->children[0]; |
+ LayerImpl* child2 = root->test_properties()->children[1]; |
+ LayerImpl* grandchild1 = child1->test_properties()->children[0]; |
+ |
+ // CASE 1: The child1's opacity changed. |
+ ClearDamageForAllSurfaces(root); |
+ root->layer_tree_impl()->SetOpacityMutated(child1->element_id(), 0.5f); |
+ EmulateDrawingOneFrame(root); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
+ // CASE 2: The layer2's opacity changed. |
+ child2->test_properties()->force_render_surface = true; |
+ root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
+ EmulateDrawingOneFrame(root); |
+ ClearDamageForAllSurfaces(root); |
+ root->layer_tree_impl()->SetOpacityMutated(child2->element_id(), 0.5f); |
+ EmulateDrawingOneFrame(root); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
+ // CASE 3: The grandchild1's opacity changed. |
+ grandchild1->test_properties()->force_render_surface = true; |
+ root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
+ EmulateDrawingOneFrame(root); |
+ ClearDamageForAllSurfaces(root); |
+ root->layer_tree_impl()->SetOpacityMutated(grandchild1->element_id(), 0.5f); |
+ EmulateDrawingOneFrame(root); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+} |
+ |
+TEST_F(DamageTrackerTest, |
+ VerifyDamageForUpdateAndDamageRectsFromContributingContents) { |
+ LayerImpl* root = CreateAndSetUpTestTreeWithTwoSurfaces(); |
+ LayerImpl* child1 = root->test_properties()->children[0]; |
+ LayerImpl* child2 = root->test_properties()->children[1]; |
+ LayerImpl* grandchild1 = child1->test_properties()->children[0]; |
+ |
+ // CASE 1: Adding the layer1's damage rect and update rect should cause the |
+ // corresponding damage to the surface. |
+ child1->SetDrawsContent(true); |
+ ClearDamageForAllSurfaces(root); |
+ child1->AddDamageRect(gfx::Rect(105, 106, 12, 15)); |
+ child1->SetUpdateRect(gfx::Rect(115, 116, 12, 15)); |
+ root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
+ EmulateDrawingOneFrame(root); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
+ // CASE 2: Adding the layer2's damage rect and update rect should cause the |
+ // corresponding damage to the surface. |
+ ClearDamageForAllSurfaces(root); |
+ child2->AddDamageRect(gfx::Rect(11, 11, 12, 15)); |
+ child2->SetUpdateRect(gfx::Rect(12, 12, 12, 15)); |
+ EmulateDrawingOneFrame(root); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
+ // CASE 3: Adding the grandchild1's damage rect and update rect should cause |
+ // the corresponding damage to the surface. |
+ ClearDamageForAllSurfaces(root); |
+ grandchild1->AddDamageRect(gfx::Rect(1, 0, 2, 5)); |
+ grandchild1->SetUpdateRect(gfx::Rect(2, 1, 2, 5)); |
+ EmulateDrawingOneFrame(root); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageWhenSurfaceRemoved) { |
@@ -434,6 +564,9 @@ TEST_F(DamageTrackerTest, VerifyDamageWhenSurfaceRemoved) { |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(290, 290, 16, 18).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForTransformedLayer) { |
@@ -461,6 +594,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForTransformedLayer) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(85, 85, 45, 45).ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ // Layer's layer_property_changed_ should be considered as damage to render |
+ // surface. |
+ EXPECT_TRUE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// With the anchor on the layer's center, now we can test the rotation more |
// intuitively, since it applies about the layer's anchor. |
@@ -479,6 +620,15 @@ TEST_F(DamageTrackerTest, VerifyDamageForTransformedLayer) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(expected_rect.ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ // Transform from browser animation should not be considered as damage from |
+ // contributing layer since it is applied to the whole layer which has a |
+ // render surface. |
+ EXPECT_FALSE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForPerspectiveClippedLayer) { |
@@ -533,6 +683,12 @@ TEST_F(DamageTrackerTest, VerifyDamageForPerspectiveClippedLayer) { |
&root_damage_rect)); |
gfx::Rect damage_we_care_about = gfx::Rect(gfx::Size(500, 500)); |
EXPECT_TRUE(root_damage_rect.Contains(damage_we_care_about)); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForBlurredSurface) { |
@@ -543,11 +699,17 @@ TEST_F(DamageTrackerTest, VerifyDamageForBlurredSurface) { |
FilterOperations filters; |
filters.Append(FilterOperation::CreateBlurFilter(5.f)); |
- // Setting the filter will damage the whole surface. |
+ // Setting the filter should not damage the conrresponding render surface. |
ClearDamageForAllSurfaces(root); |
surface->test_properties()->filters = filters; |
root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
EmulateDrawingOneFrame(root); |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(surface) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// Setting the update rect should cause the corresponding damage to the |
// surface, blurred based on the size of the blur filter. |
@@ -563,6 +725,12 @@ TEST_F(DamageTrackerTest, VerifyDamageForBlurredSurface) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(286, 287, 33, 34), root_damage_rect); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(surface) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForImageFilter) { |
@@ -578,10 +746,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForImageFilter) { |
SkBlurImageFilter::Make(2, 2, nullptr))); |
// Setting the filter will damage the whole surface. |
- ClearDamageForAllSurfaces(root); |
child->test_properties()->force_render_surface = true; |
root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
EmulateDrawingOneFrame(root); |
+ ClearDamageForAllSurfaces(root); |
child->layer_tree_impl()->SetFilterMutated(child->element_id(), filters); |
EmulateDrawingOneFrame(root); |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
@@ -595,6 +763,13 @@ TEST_F(DamageTrackerTest, VerifyDamageForImageFilter) { |
// gfx::Rect(0, 0, 30, 30), expanded by 6px for the 2px blur filter. |
EXPECT_EQ(gfx::Rect(-6, -6, 42, 42), child_damage_rect); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
// CASE 1: Setting the update rect should damage the whole surface (for now) |
ClearDamageForAllSurfaces(root); |
child->SetUpdateRect(gfx::Rect(1, 1)); |
@@ -611,6 +786,13 @@ TEST_F(DamageTrackerTest, VerifyDamageForImageFilter) { |
// gfx::Rect(0, 0, 1, 1), expanded by 6px for the 2px blur filter. |
EXPECT_EQ(gfx::Rect(-6, -6, 13, 13), child_damage_rect); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
// CASE 2: No changes, so should not damage the surface. |
ClearDamageForAllSurfaces(root); |
EmulateDrawingOneFrame(root); |
@@ -623,6 +805,13 @@ TEST_F(DamageTrackerTest, VerifyDamageForImageFilter) { |
// Should not be expanded by the blur filter. |
EXPECT_EQ(gfx::Rect(), root_damage_rect); |
EXPECT_EQ(gfx::Rect(), child_damage_rect); |
+ |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForTransformedImageFilter) { |
@@ -908,6 +1097,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingLayer) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(400, 380, 6, 8).ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// CASE 2: If the layer is removed, its entire old layer becomes exposed, not |
// just the last update rect. |
@@ -932,6 +1124,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingLayer) { |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(100, 100, 30, 30).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForNewUnchangedLayer) { |
@@ -968,6 +1163,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForNewUnchangedLayer) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(400, 380, 6, 8).ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForMultipleLayers) { |
@@ -1002,6 +1200,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForMultipleLayers) { |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(100, 100, 303, 284).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForNestedSurfaces) { |
@@ -1028,6 +1229,18 @@ TEST_F(DamageTrackerTest, VerifyDamageForNestedSurfaces) { |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(200, 200, 6, 8).ToString(), child_damage_rect.ToString()); |
EXPECT_EQ(gfx::Rect(300, 300, 6, 8).ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child2) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(grand_child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// CASE 2: Same as previous case, but with additional damage elsewhere that |
// should be properly unioned. |
@@ -1046,6 +1259,18 @@ TEST_F(DamageTrackerTest, VerifyDamageForNestedSurfaces) { |
EXPECT_EQ(gfx::Rect(200, 200, 6, 8).ToString(), child_damage_rect.ToString()); |
EXPECT_EQ(gfx::Rect(11, 11, 295, 297).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child2) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(grand_child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForSurfaceChangeFromDescendantLayer) { |
@@ -1082,6 +1307,13 @@ TEST_F(DamageTrackerTest, VerifyDamageForSurfaceChangeFromDescendantLayer) { |
// space). |
EXPECT_EQ(gfx::Rect(290, 290, 16, 23).ToString(), |
root_damage_rect.ToString()); |
+ |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForSurfaceChangeFromAncestorLayer) { |
@@ -1122,6 +1354,13 @@ TEST_F(DamageTrackerTest, VerifyDamageForSurfaceChangeFromAncestorLayer) { |
// - new child1 surface in target space: gfx::Rect(240, 240, 16, 18) |
EXPECT_EQ(gfx::Rect(240, 240, 66, 68).ToString(), |
root_damage_rect.ToString()); |
+ |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingRenderSurfaces) { |
@@ -1146,6 +1385,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingRenderSurfaces) { |
EXPECT_EQ(gfx::Rect(290, 290, 16, 18).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
// CASE 2: If a descendant surface appears, its entire old area becomes |
// exposed. |
@@ -1178,6 +1421,9 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingRenderSurfaces) { |
child_damage_rect.ToString()); |
EXPECT_EQ(gfx::Rect(290, 290, 16, 18).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyNoDamageWhenNothingChanged) { |
@@ -1197,6 +1443,9 @@ TEST_F(DamageTrackerTest, VerifyNoDamageWhenNothingChanged) { |
&root_damage_rect)); |
EXPECT_TRUE(child_damage_rect.IsEmpty()); |
EXPECT_TRUE(root_damage_rect.IsEmpty()); |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// CASE 2: If nothing changes twice in a row, the damage rect should still be |
// empty. |
@@ -1210,6 +1459,9 @@ TEST_F(DamageTrackerTest, VerifyNoDamageWhenNothingChanged) { |
&root_damage_rect)); |
EXPECT_TRUE(child_damage_rect.IsEmpty()); |
EXPECT_TRUE(root_damage_rect.IsEmpty()); |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyNoDamageForUpdateRectThatDoesNotDrawContent) { |
@@ -1230,6 +1482,9 @@ TEST_F(DamageTrackerTest, VerifyNoDamageForUpdateRectThatDoesNotDrawContent) { |
&root_damage_rect)); |
EXPECT_TRUE(child_damage_rect.IsEmpty()); |
EXPECT_TRUE(root_damage_rect.IsEmpty()); |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageForMask) { |
@@ -1276,6 +1531,13 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) { |
&child_damage_rect)); |
EXPECT_EQ(gfx::Rect(30, 30).ToString(), child_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
// CASE 2: a property change on the mask layer should damage the entire |
// target surface. |
@@ -1298,6 +1560,13 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) { |
&child_damage_rect)); |
EXPECT_EQ(gfx::Rect(30, 30).ToString(), child_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_FALSE(GetRenderSurface(child) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
// CASE 3: removing the mask also damages the entire target surface. |
// |
@@ -1324,6 +1593,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) { |
EXPECT_TRUE(GetRenderSurface(child)->damage_tracker()->GetDamageRectIfValid( |
&child_damage_rect)); |
EXPECT_EQ(gfx::Rect(30, 30).ToString(), child_damage_rect.ToString()); |
+ |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, DamageWhenAddedExternally) { |
@@ -1345,6 +1618,9 @@ TEST_F(DamageTrackerTest, DamageWhenAddedExternally) { |
EXPECT_EQ(gfx::UnionRects(gfx::Rect(15, 16, 32, 33), |
gfx::Rect(100 + 10, 100 + 11, 12, 13)).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// Case 2: An additional sanity check that adding damage works even when |
// nothing on the layer tree changed. |
@@ -1357,6 +1633,9 @@ TEST_F(DamageTrackerTest, DamageWhenAddedExternally) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(30, 31, 14, 15).ToString(), root_damage_rect.ToString()); |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageWithNoContributingLayers) { |
@@ -1374,6 +1653,9 @@ TEST_F(DamageTrackerTest, VerifyDamageWithNoContributingLayers) { |
EXPECT_TRUE( |
target_surface->damage_tracker()->GetDamageRectIfValid(&damage_rect)); |
EXPECT_TRUE(damage_rect.IsEmpty()); |
+ EXPECT_FALSE(GetRenderSurface(root_ptr) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, VerifyDamageAccumulatesUntilReset) { |
@@ -1392,6 +1674,9 @@ TEST_F(DamageTrackerTest, VerifyDamageAccumulatesUntilReset) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(110, 111, 1, 2).ToString(), root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// New damage, without having cleared the previous damage, should be unioned |
// to the previous one. |
@@ -1402,6 +1687,9 @@ TEST_F(DamageTrackerTest, VerifyDamageAccumulatesUntilReset) { |
&root_damage_rect)); |
EXPECT_EQ(gfx::Rect(110, 111, 11, 16).ToString(), |
root_damage_rect.ToString()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// If we notify the damage tracker that we drew the damaged area, then damage |
// should be emptied. |
@@ -1409,6 +1697,9 @@ TEST_F(DamageTrackerTest, VerifyDamageAccumulatesUntilReset) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_TRUE(root_damage_rect.IsEmpty()); |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
// Damage should remain empty even after one frame, since there's yet no new |
// damage. |
@@ -1417,6 +1708,9 @@ TEST_F(DamageTrackerTest, VerifyDamageAccumulatesUntilReset) { |
EXPECT_TRUE(GetRenderSurface(root)->damage_tracker()->GetDamageRectIfValid( |
&root_damage_rect)); |
EXPECT_TRUE(root_damage_rect.IsEmpty()); |
+ EXPECT_FALSE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, HugeDamageRect) { |
@@ -1453,6 +1747,9 @@ TEST_F(DamageTrackerTest, HugeDamageRect) { |
gfx::Rect damage_we_care_about = gfx::Rect(i, i); |
EXPECT_LE(damage_we_care_about.right(), root_damage_rect.right()); |
EXPECT_LE(damage_we_care_about.bottom(), root_damage_rect.bottom()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
} |
@@ -1480,6 +1777,9 @@ TEST_F(DamageTrackerTest, DamageRectTooBig) { |
&damage_rect)); |
EXPECT_EQ(GetRenderSurface(root)->content_rect(), |
GetRenderSurface(root)->GetDamageRect()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, DamageRectTooBigWithFilter) { |
@@ -1511,6 +1811,9 @@ TEST_F(DamageTrackerTest, DamageRectTooBigWithFilter) { |
&damage_rect)); |
EXPECT_EQ(GetRenderSurface(root)->content_rect(), |
GetRenderSurface(root)->GetDamageRect()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, DamageRectTooBigInRenderSurface) { |
@@ -1559,6 +1862,13 @@ TEST_F(DamageTrackerTest, DamageRectTooBigInRenderSurface) { |
gfx::ToEnclosingRect(GetRenderSurface(child1)->DrawableContentRect()))); |
EXPECT_EQ(damage_rect, GetRenderSurface(root)->GetDamageRect()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
// Add new damage, without changing properties, which goes down a different |
// path in the damage tracker. |
root->layer_tree_impl()->ResetAllChangeTracking(); |
@@ -1587,6 +1897,13 @@ TEST_F(DamageTrackerTest, DamageRectTooBigInRenderSurface) { |
EXPECT_TRUE(damage_rect.Contains( |
gfx::ToEnclosingRect(GetRenderSurface(child1)->DrawableContentRect()))); |
EXPECT_EQ(damage_rect, GetRenderSurface(root)->GetDamageRect()); |
+ |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
TEST_F(DamageTrackerTest, DamageRectTooBigInRenderSurfaceWithFilter) { |
@@ -1641,6 +1958,13 @@ TEST_F(DamageTrackerTest, DamageRectTooBigInRenderSurfaceWithFilter) { |
gfx::ToEnclosingRect(GetRenderSurface(child1)->DrawableContentRect()))); |
EXPECT_EQ(damage_rect, GetRenderSurface(root)->GetDamageRect()); |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ |
// Add new damage, without changing properties, which goes down a different |
// path in the damage tracker. |
root->layer_tree_impl()->ResetAllChangeTracking(); |
@@ -1669,6 +1993,13 @@ TEST_F(DamageTrackerTest, DamageRectTooBigInRenderSurfaceWithFilter) { |
EXPECT_TRUE(damage_rect.Contains( |
gfx::ToEnclosingRect(GetRenderSurface(child1)->DrawableContentRect()))); |
EXPECT_EQ(damage_rect, GetRenderSurface(root)->GetDamageRect()); |
+ |
+ EXPECT_TRUE(GetRenderSurface(root) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
+ EXPECT_TRUE(GetRenderSurface(child1) |
+ ->damage_tracker() |
+ ->has_damage_from_contributing_content()); |
} |
} // namespace |