Chromium Code Reviews| Index: cc/trees/damage_tracker_unittest.cc |
| diff --git a/cc/trees/damage_tracker_unittest.cc b/cc/trees/damage_tracker_unittest.cc |
| index b73f2bad4d98cde47fc9f17a01df139f1adb0050..d40cc9f48cc634e0017a9799e5320c80524e077c 100644 |
| --- a/cc/trees/damage_tracker_unittest.cc |
| +++ b/cc/trees/damage_tracker_unittest.cc |
| @@ -27,6 +27,7 @@ namespace cc { |
| namespace { |
| void ExecuteCalculateDrawProperties(LayerImpl* root, |
| + float device_scale_factor, |
| LayerImplList* render_surface_layer_list) { |
| // Sanity check: The test itself should create the root layer's render |
| // surface, so that the surface (and its damage tracker) can |
| @@ -35,7 +36,7 @@ void ExecuteCalculateDrawProperties(LayerImpl* root, |
| FakeLayerTreeHostImpl::RecursiveUpdateNumChildren(root); |
| LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
| - root, root->bounds(), render_surface_layer_list); |
| + root, root->bounds(), device_scale_factor, render_surface_layer_list); |
| LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); |
| ASSERT_TRUE(root->render_surface()); |
| } |
| @@ -47,7 +48,7 @@ void ClearDamageForAllSurfaces(LayerImpl* root) { |
| } |
| } |
| -void EmulateDrawingOneFrame(LayerImpl* root) { |
| +void EmulateDrawingOneFrame(LayerImpl* root, float device_scale_factor = 1.f) { |
| // This emulates only steps that are relevant to testing the damage tracker: |
| // 1. computing the render passes and layerlists |
| // 2. updating all damage trackers in the correct order |
| @@ -55,7 +56,8 @@ void EmulateDrawingOneFrame(LayerImpl* root) { |
| // and surfaces. |
| LayerImplList render_surface_layer_list; |
| - ExecuteCalculateDrawProperties(root, &render_surface_layer_list); |
| + ExecuteCalculateDrawProperties(root, device_scale_factor, |
| + &render_surface_layer_list); |
| // Iterate back-to-front, so that damage correctly propagates from descendant |
| // surfaces to ancestors. |
| @@ -665,6 +667,56 @@ TEST_F(DamageTrackerTest, VerifyDamageForTransformedImageFilter) { |
| child_damage_rect); |
| } |
| +TEST_F(DamageTrackerTest, VerifyDamageForHighDPIImageFilter) { |
| + LayerImpl* root = CreateAndSetUpTestTreeWithOneSurface(); |
| + LayerImpl* child = root->test_properties()->children[0]; |
| + gfx::Rect root_damage_rect, child_damage_rect; |
| + |
| + // Allow us to set damage on child too. |
| + child->SetDrawsContent(true); |
| + |
| + FilterOperations filters; |
| + filters.Append(FilterOperation::CreateBlurFilter(3.f)); |
| + |
| + // 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; |
| + int device_scale_factor = 2; |
| + EmulateDrawingOneFrame(root, device_scale_factor); |
| + child->OnFilterAnimated(filters); |
| + EmulateDrawingOneFrame(root, device_scale_factor); |
| + root_damage_rect = |
| + root->render_surface()->damage_tracker()->current_damage_rect(); |
| + child_damage_rect = |
| + child->render_surface()->damage_tracker()->current_damage_rect(); |
| + |
| + // Blur outset is 9px for a 3px blur, scaled up by DSF. |
| + int blur_outset = 9 * device_scale_factor; |
| + gfx::Rect original_rect(100, 100, 100, 100); |
| + gfx::Rect expected_child_damage_rect(60, 60); |
| + expected_child_damage_rect.Inset(-blur_outset, -blur_outset); |
| + gfx::Rect expected_root_damage_rect(child_damage_rect); |
| + expected_root_damage_rect.Offset(200, 200); |
| + gfx::Rect expected_total_damage_rect = expected_root_damage_rect; |
| + expected_total_damage_rect.Union(original_rect); |
| + EXPECT_EQ(expected_total_damage_rect, root_damage_rect); |
| + EXPECT_EQ(expected_child_damage_rect, child_damage_rect); |
| + |
| + // Setting the update rect should damage the whole surface (for now) |
|
enne (OOO)
2016/08/12 17:34:33
I don't think this comment is true? It looks like
|
| + ClearDamageForAllSurfaces(root); |
| + child->SetUpdateRect(gfx::Rect(30, 30)); |
| + EmulateDrawingOneFrame(root, device_scale_factor); |
| + |
| + root_damage_rect = |
| + root->render_surface()->damage_tracker()->current_damage_rect(); |
| + child_damage_rect = |
| + child->render_surface()->damage_tracker()->current_damage_rect(); |
| + |
| + EXPECT_EQ(expected_root_damage_rect, root_damage_rect); |
| + EXPECT_EQ(expected_child_damage_rect, child_damage_rect); |
| +} |
| + |
| TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) { |
| LayerImpl* root = CreateAndSetUpTestTreeWithTwoSurfaces(); |
| LayerImpl* child1 = root->test_properties()->children[0]; |