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

Unified Diff: cc/trees/damage_tracker_unittest.cc

Issue 2241763002: cc: fix damage tracker rect with hidpi filters. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comment. Created 4 years, 4 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
« no previous file with comments | « cc/trees/damage_tracker.cc ('k') | cc/trees/layer_tree_host_common.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..74e7fa247665a67781906ca7c113b53ec4fe4ec3 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,57 @@ 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 only the affected area (original,
+ // outset by 3 * blur sigma * DSF).
+ 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];
« no previous file with comments | « cc/trees/damage_tracker.cc ('k') | cc/trees/layer_tree_host_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698