Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3206)

Unified Diff: cc/trees/damage_tracker_unittest.cc

Issue 2632463005: cc: Ensure that large damage doesn't register as "frame has no damage" (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/trees/damage_tracker_unittest.cc
diff --git a/cc/trees/damage_tracker_unittest.cc b/cc/trees/damage_tracker_unittest.cc
index c0429871e7f018068fc1e263bfc99a4aef2dd270..45cc066a710dac1be732ba2a4e058e19856a2968 100644
--- a/cc/trees/damage_tracker_unittest.cc
+++ b/cc/trees/damage_tracker_unittest.cc
@@ -87,22 +87,24 @@ class DamageTrackerTest : public testing::Test {
DamageTrackerTest()
: host_impl_(&task_runner_provider_, &task_graph_runner_) {}
- LayerImpl* CreateTestTreeWithOneSurface() {
+ LayerImpl* CreateTestTreeWithOneSurface(int number_of_children) {
host_impl_.active_tree()->DetachLayers();
std::unique_ptr<LayerImpl> root =
LayerImpl::Create(host_impl_.active_tree(), 1);
- std::unique_ptr<LayerImpl> child =
- LayerImpl::Create(host_impl_.active_tree(), 2);
root->SetPosition(gfx::PointF());
root->SetBounds(gfx::Size(500, 500));
root->SetDrawsContent(true);
root->test_properties()->force_render_surface = true;
- child->SetPosition(gfx::PointF(100.f, 100.f));
- child->SetBounds(gfx::Size(30, 30));
- child->SetDrawsContent(true);
- root->test_properties()->AddChild(std::move(child));
+ for (int i = 0; i < number_of_children; ++i) {
+ std::unique_ptr<LayerImpl> child =
+ LayerImpl::Create(host_impl_.active_tree(), 2 + i);
+ child->SetPosition(gfx::PointF(100.f, 100.f));
+ child->SetBounds(gfx::Size(30, 30));
+ child->SetDrawsContent(true);
+ root->test_properties()->AddChild(std::move(child));
+ }
host_impl_.active_tree()->SetRootLayerForTesting(std::move(root));
return host_impl_.active_tree()->root_layer_for_testing();
@@ -159,8 +161,8 @@ class DamageTrackerTest : public testing::Test {
return host_impl_.active_tree()->root_layer_for_testing();
}
- LayerImpl* CreateAndSetUpTestTreeWithOneSurface() {
- LayerImpl* root = CreateTestTreeWithOneSurface();
+ LayerImpl* CreateAndSetUpTestTreeWithOneSurface(int number_of_children = 1) {
+ LayerImpl* root = CreateTestTreeWithOneSurface(number_of_children);
// Setup includes going past the first frame which always damages
// everything, so that we can actually perform specific tests.
@@ -197,8 +199,10 @@ TEST_F(DamageTrackerTest, SanityCheckTestTreeWithOneSurface) {
EXPECT_EQ(1, root->render_surface()->layer_list()[0]->id());
EXPECT_EQ(2, root->render_surface()->layer_list()[1]->id());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(500, 500).ToString(), root_damage_rect.ToString());
}
@@ -211,10 +215,15 @@ TEST_F(DamageTrackerTest, SanityCheckTestTreeWithTwoSurfaces) {
LayerImpl* child1 = root->test_properties()->children[0];
LayerImpl* child2 = root->test_properties()->children[1];
+
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
ASSERT_TRUE(child1->render_surface());
EXPECT_FALSE(child2->render_surface());
@@ -241,8 +250,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForUpdateRects) {
// Damage position on the surface should be: position of update_rect (10, 11)
// relative to the child (100, 100).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(110, 111, 12, 13).ToString(),
root_damage_rect.ToString());
@@ -252,8 +263,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForUpdateRects) {
child->SetUpdateRect(gfx::Rect(10, 11, 12, 13));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(110, 111, 12, 13).ToString(),
root_damage_rect.ToString());
@@ -266,8 +279,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForUpdateRects) {
// Damage position on the surface should be: position of update_rect (20, 25)
// relative to the child (100, 100).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(120, 125, 1, 2).ToString(), root_damage_rect.ToString());
}
@@ -284,8 +299,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerDamageRects) {
// Damage position on the surface should be: position of layer damage_rect
// (10, 11) relative to the child (100, 100).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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
@@ -294,8 +311,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerDamageRects) {
child->AddDamageRect(gfx::Rect(10, 11, 12, 13));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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
@@ -307,8 +326,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerDamageRects) {
// Damage position on the surface should be: position of layer damage_rect
// (20, 25) relative to the child (100, 100).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(120, 125, 1, 2)));
// CASE 4: Adding multiple layer damage rects should cause a unified
@@ -321,8 +342,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerDamageRects) {
// Damage position on the surface should be: position of layer damage_rect
// (20, 25) relative to the child (100, 100).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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)));
}
@@ -342,8 +365,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerUpdateAndDamageRects) {
// Damage position on the surface should be: position of unified layer
// damage_rect and update rect (5, 6)
// relative to the child (100, 100).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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
@@ -353,8 +378,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerUpdateAndDamageRects) {
child->SetUpdateRect(gfx::Rect(10, 11, 14, 15));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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
@@ -367,8 +394,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForLayerUpdateAndDamageRects) {
// Damage position on the surface should be: position of unified layer damage
// rect and update rect (5, 10) relative to the child (100, 100).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(true, root_damage_rect.Contains(gfx::Rect(105, 110, 17, 18)));
}
@@ -391,8 +420,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForPropertyChanges) {
// Damage should be the entire child layer in target_surface space.
gfx::Rect expected_rect = gfx::Rect(100, 100, 30, 30);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(expected_rect.ToString(), root_damage_rect.ToString());
// CASE 2: If a layer moves due to property change, it damages both the new
@@ -404,8 +435,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForPropertyChanges) {
ClearDamageForAllSurfaces(root);
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(root_damage_rect.IsEmpty());
// Then, test the actual layer movement.
@@ -418,8 +451,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForPropertyChanges) {
// Expect damage to be the combination of the previous one and the new one.
expected_rect.Union(gfx::Rect(200, 230, 30, 30));
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_FLOAT_RECT_EQ(expected_rect, root_damage_rect);
}
@@ -435,8 +470,10 @@ TEST_F(DamageTrackerTest, VerifyDamageWhenSurfaceRemoved) {
child->SetDrawsContent(false);
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(290, 290, 16, 18).ToString(),
root_damage_rect.ToString());
}
@@ -462,8 +499,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForTransformedLayer) {
// Sanity check that the layer actually moved to (85, 85), damaging its old
// location and new location.
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(85, 85, 45, 45).ToString(), root_damage_rect.ToString());
// With the anchor on the layer's center, now we can test the rotation more
@@ -481,8 +520,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForTransformedLayer) {
float expected_position = 100.f - 0.5f * expected_width;
gfx::Rect expected_rect = gfx::ToEnclosingRect(gfx::RectF(
expected_position, expected_position, expected_width, expected_width));
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(expected_rect.ToString(), root_damage_rect.ToString());
}
@@ -534,8 +575,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForPerspectiveClippedLayer) {
// The expected damage should cover the entire root surface (500x500), but we
// don't care whether the damage rect was clamped or is larger than the
// surface for this test.
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
gfx::Rect damage_we_care_about = gfx::Rect(gfx::Size(500, 500));
EXPECT_TRUE(root_damage_rect.Contains(damage_we_care_about));
}
@@ -564,8 +607,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForBlurredSurface) {
// Damage position on the surface should be: position of update_rect (1, 2)
// relative to the child (300, 300), but expanded by the blur outsets
// (15, since the blur radius is 5).
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(286, 287, 33, 34), root_damage_rect);
}
@@ -589,10 +634,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForImageFilter) {
child->layer_tree_impl()->property_trees()->effect_tree.OnFilterAnimated(
filters, child->effect_tree_index(), child->layer_tree_impl());
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
// gfx::Rect(100, 100, 30, 30), expanded by 6px for the 2px blur filter.
EXPECT_EQ(gfx::Rect(94, 94, 42, 42), root_damage_rect);
@@ -605,10 +654,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForImageFilter) {
child->SetUpdateRect(gfx::Rect(1, 1));
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
// gfx::Rect(100, 100, 1, 1), expanded by 6px for the 2px blur filter.
EXPECT_EQ(gfx::Rect(94, 94, 13, 13), root_damage_rect);
@@ -640,10 +693,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForTransformedImageFilter) {
child->layer_tree_impl()->property_trees()->effect_tree.OnFilterAnimated(
filters, child->effect_tree_index(), child->layer_tree_impl());
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
// Blur outset is 6px for a 2px blur.
int blur_outset = 6;
@@ -662,10 +719,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForTransformedImageFilter) {
child->SetUpdateRect(gfx::Rect(30, 30));
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
int expect_width = 30 + 2 * blur_outset;
int expect_height = 30 + 2 * blur_outset;
@@ -696,10 +757,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForHighDPIImageFilter) {
child->layer_tree_impl()->property_trees()->effect_tree.OnFilterAnimated(
filters, child->effect_tree_index(), child->layer_tree_impl());
EmulateDrawingOneFrame(root, device_scale_factor);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
// Blur outset is 9px for a 3px blur, scaled up by DSF.
int blur_outset = 9 * device_scale_factor;
@@ -719,10 +784,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForHighDPIImageFilter) {
child->SetUpdateRect(gfx::Rect(30, 30));
EmulateDrawingOneFrame(root, device_scale_factor);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(expected_root_damage_rect, root_damage_rect);
EXPECT_EQ(expected_child_damage_rect, child_damage_rect);
@@ -755,8 +824,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// Damage position on the surface should be a composition of the damage on
// the root and on child2. Damage on the root should be: position of
// update_rect (297, 297), but expanded by the blur outsets.
@@ -775,8 +846,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// Damage position on the surface should be a composition of the damage on
// the root and on child2. Damage on the root should be: position of
// update_rect (297, 297), but expanded on the left/top by the blur outsets.
@@ -793,8 +866,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// Damage on the root should be: position of update_rect (30, 30), not
// expanded.
expected_damage_rect = gfx::Rect(30, 30, 2, 2);
@@ -809,8 +884,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// Damage on the root should be: the originally damaged rect (99,99 1x1)
// plus the rect that can influence with a 2px blur (93,93 13x13) intersected
// with the surface rect (100,100 206x208). So no additional damage occurs
@@ -826,8 +903,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// Damage on child2 should be: position of update_rect offset by the child's
// position (11, 11), and not expanded by anything.
expected_damage_rect = gfx::Rect(11, 11, 1, 1);
@@ -842,8 +921,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// Damage on child1 should be: position of update_rect offset by the child's
// position (100, 100), and expanded by the damage.
@@ -877,8 +958,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingLayer) {
// surfaces are tested elsewhere.
ASSERT_EQ(3u, root->render_surface()->layer_list().size());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(400, 380, 6, 8).ToString(), root_damage_rect.ToString());
// CASE 2: If the layer is removed, its entire old layer becomes exposed, not
@@ -890,8 +973,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingLayer) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(root_damage_rect.IsEmpty());
// Then, test removing child1.
@@ -900,8 +985,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingLayer) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(100, 100, 30, 30).ToString(),
root_damage_rect.ToString());
}
@@ -936,8 +1023,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForNewUnchangedLayer) {
// surfaces are tested elsewhere.
ASSERT_EQ(3u, root->render_surface()->layer_list().size());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(400, 380, 6, 8).ToString(), root_damage_rect.ToString());
}
@@ -968,8 +1057,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForMultipleLayers) {
child2->SetUpdateRect(gfx::Rect(3, 4));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(100, 100, 303, 284).ToString(),
root_damage_rect.ToString());
}
@@ -993,10 +1084,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForNestedSurfaces) {
root->layer_tree_impl()->property_trees()->effect_tree.OnOpacityAnimated(
0.5f, grand_child1->effect_tree_index(), root->layer_tree_impl());
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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());
@@ -1012,10 +1107,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForNestedSurfaces) {
root->layer_tree_impl()->property_trees()->effect_tree.OnOpacityAnimated(
0.7f, child2->effect_tree_index(), root->layer_tree_impl());
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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());
@@ -1040,10 +1139,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForSurfaceChangeFromDescendantLayer) {
grand_child1->SetPosition(gfx::PointF(195.f, 205.f));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// The new surface bounds should be damaged entirely, even though only one of
// the layers changed.
@@ -1080,10 +1183,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForSurfaceChangeFromAncestorLayer) {
root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated(
translation, child1->transform_tree_index(), root->layer_tree_impl());
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
// The new surface bounds should be damaged entirely.
EXPECT_EQ(gfx::Rect(190, 190, 16, 18).ToString(),
@@ -1114,8 +1221,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingRenderSurfaces) {
ASSERT_FALSE(child1->render_surface());
ASSERT_EQ(4u, root->render_surface()->layer_list().size());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(290, 290, 16, 18).ToString(),
root_damage_rect.ToString());
@@ -1127,8 +1236,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingRenderSurfaces) {
ClearDamageForAllSurfaces(root);
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(root_damage_rect.IsEmpty());
// Then change the tree so that the render surface is added back.
@@ -1143,10 +1254,14 @@ TEST_F(DamageTrackerTest, VerifyDamageForAddingAndRemovingRenderSurfaces) {
EXPECT_EQ(3u, root->render_surface()->layer_list().size());
EXPECT_EQ(2u, child1->render_surface()->layer_list().size());
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(190, 190, 16, 18).ToString(),
child_damage_rect.ToString());
EXPECT_EQ(gfx::Rect(290, 290, 16, 18).ToString(),
@@ -1164,10 +1279,14 @@ TEST_F(DamageTrackerTest, VerifyNoDamageWhenNothingChanged) {
ClearDamageForAllSurfaces(root);
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(child_damage_rect.IsEmpty());
EXPECT_TRUE(root_damage_rect.IsEmpty());
@@ -1177,10 +1296,14 @@ TEST_F(DamageTrackerTest, VerifyNoDamageWhenNothingChanged) {
ClearDamageForAllSurfaces(root);
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(child_damage_rect.IsEmpty());
EXPECT_TRUE(root_damage_rect.IsEmpty());
}
@@ -1197,10 +1320,14 @@ TEST_F(DamageTrackerTest, VerifyNoDamageForUpdateRectThatDoesNotDrawContent) {
child1->SetUpdateRect(gfx::Rect(1, 2));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child1->render_surface()->damage_tracker()->ShouldDamageEverything());
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child1->render_surface()->damage_tracker()->current_damage_rect();
+ child1->render_surface()->damage_tracker()->CurrentDamageRect();
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(child_damage_rect.IsEmpty());
EXPECT_TRUE(root_damage_rect.IsEmpty());
}
@@ -1244,8 +1371,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) {
mask_layer->SetUpdateRect(gfx::Rect(1, 2, 3, 4));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(30, 30).ToString(), child_damage_rect.ToString());
// CASE 2: a property change on the mask layer should damage the entire
@@ -1256,8 +1385,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) {
ClearDamageForAllSurfaces(root);
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(child_damage_rect.IsEmpty());
// Then test the property change.
@@ -1266,8 +1397,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) {
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(30, 30).ToString(), child_damage_rect.ToString());
// CASE 3: removing the mask also damages the entire target surface.
@@ -1278,8 +1411,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) {
ClearDamageForAllSurfaces(root);
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(child_damage_rect.IsEmpty());
// Then test mask removal.
@@ -1293,8 +1428,10 @@ TEST_F(DamageTrackerTest, VerifyDamageForMask) {
// Sanity check that a render surface still exists.
ASSERT_TRUE(child->render_surface());
+ EXPECT_FALSE(
+ child->render_surface()->damage_tracker()->ShouldDamageEverything());
child_damage_rect =
- child->render_surface()->damage_tracker()->current_damage_rect();
+ child->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(30, 30).ToString(), child_damage_rect.ToString());
}
@@ -1311,8 +1448,10 @@ TEST_F(DamageTrackerTest, DamageWhenAddedExternally) {
gfx::Rect(15, 16, 32, 33));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::UnionRects(gfx::Rect(15, 16, 32, 33),
gfx::Rect(100 + 10, 100 + 11, 12, 13)).ToString(),
root_damage_rect.ToString());
@@ -1325,8 +1464,10 @@ TEST_F(DamageTrackerTest, DamageWhenAddedExternally) {
gfx::Rect(30, 31, 14, 15));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(30, 31, 14, 15).ToString(), root_damage_rect.ToString());
}
@@ -1349,8 +1490,8 @@ TEST_F(DamageTrackerTest, VerifyDamageForEmptyLayerList) {
target_surface->damage_tracker()->UpdateDamageTrackingState(
empty_list, target_surface, false, gfx::Rect(), NULL, FilterOperations());
- gfx::Rect damage_rect =
- target_surface->damage_tracker()->current_damage_rect();
+ EXPECT_FALSE(target_surface->damage_tracker()->ShouldDamageEverything());
+ gfx::Rect damage_rect = target_surface->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(damage_rect.IsEmpty());
}
@@ -1366,8 +1507,10 @@ TEST_F(DamageTrackerTest, VerifyDamageAccumulatesUntilReset) {
EmulateDrawingOneFrame(root);
// Sanity check damage after the first frame; this isnt the actual test yet.
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(110, 111, 1, 2).ToString(), root_damage_rect.ToString());
// New damage, without having cleared the previous damage, should be unioned
@@ -1375,24 +1518,30 @@ TEST_F(DamageTrackerTest, VerifyDamageAccumulatesUntilReset) {
child->SetUpdateRect(gfx::Rect(20, 25, 1, 2));
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_EQ(gfx::Rect(110, 111, 11, 16).ToString(),
root_damage_rect.ToString());
// If we notify the damage tracker that we drew the damaged area, then damage
// should be emptied.
root->render_surface()->damage_tracker()->DidDrawDamagedArea();
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(root_damage_rect.IsEmpty());
// Damage should remain empty even after one frame, since there's yet no new
// damage.
root->layer_tree_impl()->property_trees()->needs_rebuild = true;
EmulateDrawingOneFrame(root);
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
EXPECT_TRUE(root_damage_rect.IsEmpty());
}
@@ -1426,13 +1575,40 @@ TEST_F(DamageTrackerTest, HugeDamageRect) {
// The expected damage should cover the visible part of the child layer,
// which is (0, 0, i, i) in the viewport.
+ EXPECT_FALSE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
gfx::Rect root_damage_rect =
- root->render_surface()->damage_tracker()->current_damage_rect();
+ root->render_surface()->damage_tracker()->CurrentDamageRect();
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());
}
}
+TEST_F(DamageTrackerTest, DamageRectTooBig) {
enne (OOO) 2017/01/13 22:21:38 wtb DamageRectTooBigInRenderSurface
vmpstr 2017/01/19 23:08:27 Done.
+ LayerImpl* root = CreateAndSetUpTestTreeWithOneSurface(2);
+ LayerImpl* child1 = root->test_properties()->children[0];
+ LayerImpl* child2 = root->test_properties()->children[1];
+
+ // Really far left.
+ child1->SetPosition(gfx::PointF(std::numeric_limits<int>::min(), 0));
+ child1->SetBounds(gfx::Size(1, 1));
+
+ // Really far right.
+ child2->SetPosition(gfx::PointF(std::numeric_limits<int>::max(), 0));
+ child2->SetBounds(gfx::Size(1, 1));
+
+ root->layer_tree_impl()->property_trees()->needs_rebuild = true;
+ float device_scale_factor = 1.f;
+ bool skip_verify_visible_rect_calculations = true;
+ EmulateDrawingOneFrame(root, device_scale_factor,
+ skip_verify_visible_rect_calculations);
+
+ // The expected damage would be too large to store in a gfx::Rect, so we
+ // should damage everything.
+ EXPECT_TRUE(
+ root->render_surface()->damage_tracker()->ShouldDamageEverything());
+}
+
} // namespace
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698