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

Unified Diff: cc/trees/layer_tree_host_common_unittest.cc

Issue 2655233006: cc : Clean up cc clip tree (Closed)
Patch Set: blink_tests Created 3 years, 9 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/layer_tree_host_common_unittest.cc
diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc
index 4f4511d9efd59b2dd51ce33977b0d5d559cf3a9b..513ea19c48101a10802ef908e34d6b86a3f43dba 100644
--- a/cc/trees/layer_tree_host_common_unittest.cc
+++ b/cc/trees/layer_tree_host_common_unittest.cc
@@ -62,7 +62,6 @@ namespace {
class VerifyTreeCalcsLayerTreeSettings : public LayerTreeSettings {
public:
VerifyTreeCalcsLayerTreeSettings() {
- verify_clip_tree_calculations = true;
}
};
@@ -124,14 +123,12 @@ class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
}
- void ExecuteCalculateDrawProperties(
- LayerImpl* root_layer,
- float device_scale_factor,
- float page_scale_factor,
- LayerImpl* page_scale_layer,
- LayerImpl* inner_viewport_scroll_layer,
- LayerImpl* outer_viewport_scroll_layer,
- bool skip_verify_visible_rect_calculations = false) {
+ void ExecuteCalculateDrawProperties(LayerImpl* root_layer,
+ float device_scale_factor,
+ float page_scale_factor,
+ LayerImpl* page_scale_layer,
+ LayerImpl* inner_viewport_scroll_layer,
+ LayerImpl* outer_viewport_scroll_layer) {
if (device_scale_factor !=
root_layer->layer_tree_impl()->device_scale_factor())
root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true;
@@ -158,8 +155,6 @@ class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
inputs.inner_viewport_scroll_layer = inner_viewport_scroll_layer;
inputs.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
inputs.can_adjust_raster_scales = true;
- if (skip_verify_visible_rect_calculations)
- inputs.verify_visible_rect_calculations = false;
LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
}
@@ -223,19 +218,18 @@ class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
}
void ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(
- LayerImpl* root_layer,
- bool skip_verify_visible_rect_calculations = false) {
+ LayerImpl* root_layer) {
DCHECK(root_layer->layer_tree_impl());
PropertyTreeBuilder::PreCalculateMetaInformationForTesting(root_layer);
bool can_render_to_separate_surface = true;
- LayerImpl* page_scale_layer = nullptr;
+ const LayerImpl* page_scale_layer = nullptr;
LayerImpl* inner_viewport_scroll_layer =
root_layer->layer_tree_impl()->InnerViewportScrollLayer();
LayerImpl* outer_viewport_scroll_layer =
root_layer->layer_tree_impl()->OuterViewportScrollLayer();
- LayerImpl* overscroll_elasticity_layer =
+ const LayerImpl* overscroll_elasticity_layer =
root_layer->layer_tree_impl()->OverscrollElasticityLayer();
gfx::Vector2dF elastic_overscroll =
root_layer->layer_tree_impl()->elastic_overscroll()->Current(
@@ -249,18 +243,18 @@ class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
root_layer->layer_tree_impl()->BuildLayerListForTesting();
PropertyTrees* property_trees =
root_layer->layer_tree_impl()->property_trees();
- draw_property_utils::BuildPropertyTreesAndComputeVisibleRects(
+ PropertyTreeBuilder::BuildPropertyTrees(
root_layer, page_scale_layer, inner_viewport_scroll_layer,
outer_viewport_scroll_layer, overscroll_elasticity_layer,
elastic_overscroll, page_scale_factor, device_scale_factor,
- gfx::Rect(device_viewport_size), gfx::Transform(),
- can_render_to_separate_surface, property_trees,
+ gfx::Rect(device_viewport_size), gfx::Transform(), property_trees);
+ draw_property_utils::UpdatePropertyTreesAndRenderSurfaces(
+ root_layer, property_trees, can_render_to_separate_surface);
+ draw_property_utils::FindLayersThatNeedUpdates(
+ root_layer->layer_tree_impl(), property_trees,
update_layer_list_impl_.get());
- draw_property_utils::VerifyClipTreeCalculations(*update_layer_list_impl_,
- property_trees);
- if (!skip_verify_visible_rect_calculations)
- draw_property_utils::VerifyVisibleRectsCalculations(
- *update_layer_list_impl_, property_trees);
+ for (auto* layer : *update_layer_list_impl())
+ draw_property_utils::ComputeLayerDrawProperties(layer, property_trees);
}
void ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces(
@@ -1125,20 +1119,13 @@ TEST_F(LayerTreeHostCommonTest, LayerFullyContainedWithinClipInTargetSpace) {
LayerImpl* page_scale_layer = nullptr;
LayerImpl* inner_viewport_scroll_layer = nullptr;
LayerImpl* outer_viewport_scroll_layer = nullptr;
- // Visible rects computed by combining clips in target space and root space
- // don't match because of rotation transforms. So, we skip
- // verify_visible_rect_calculations.
- bool skip_verify_visible_rect_calculations = true;
ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor,
page_scale_layer, inner_viewport_scroll_layer,
- outer_viewport_scroll_layer,
- skip_verify_visible_rect_calculations);
+ outer_viewport_scroll_layer);
- // Mapping grand_child's bounds to target space produces a non-empty rect
- // that is fully contained within the target's bounds, so grand_child should
- // be considered fully visible.
- EXPECT_EQ(gfx::Rect(grand_child->bounds()),
- grand_child->visible_layer_rect());
+ // Mapping grand_child's bounds to screen space produces an empty rect so
+ // grand_child should be hidden.
+ EXPECT_EQ(gfx::Rect(), grand_child->visible_layer_rect());
}
TEST_F(LayerTreeHostCommonTest, TransformsForDegenerateIntermediateLayer) {
@@ -6489,50 +6476,6 @@ TEST_F(LayerTreeHostCommonTest, ScrollChildAndScrollParentDifferentTargets) {
EXPECT_TRANSFORMATION_MATRIX_EQ(scroll_child->DrawTransform(), scale);
}
-TEST_F(LayerTreeHostCommonTest, TargetBetweenScrollChildandScrollParentTarget) {
- LayerImpl* root = root_layer_for_testing();
- LayerImpl* scroll_child_target = AddChildToRoot<LayerImpl>();
- LayerImpl* scroll_child = AddChild<LayerImpl>(scroll_child_target);
- LayerImpl* child_of_scroll_child = AddChild<LayerImpl>(scroll_child);
- LayerImpl* intervening_target = AddChild<LayerImpl>(scroll_child_target);
- LayerImpl* clip = AddChild<LayerImpl>(intervening_target);
- LayerImpl* scroll_parent_target = AddChild<LayerImpl>(clip);
- LayerImpl* scroll_parent = AddChild<LayerImpl>(scroll_parent_target);
-
- scroll_parent->SetDrawsContent(true);
- child_of_scroll_child->SetDrawsContent(true);
-
- scroll_child->test_properties()->scroll_parent = scroll_parent;
- scroll_parent->test_properties()->scroll_children =
- base::MakeUnique<std::set<LayerImpl*>>();
- scroll_parent->test_properties()->scroll_children->insert(scroll_child);
-
- root->SetBounds(gfx::Size(50, 50));
- scroll_child_target->SetBounds(gfx::Size(50, 50));
- scroll_child_target->SetMasksToBounds(true);
- scroll_child_target->test_properties()->force_render_surface = true;
- scroll_child->SetBounds(gfx::Size(50, 50));
- child_of_scroll_child->SetBounds(gfx::Size(50, 50));
- child_of_scroll_child->test_properties()->force_render_surface = true;
- intervening_target->SetBounds(gfx::Size(50, 50));
- intervening_target->test_properties()->force_render_surface = true;
- clip->SetBounds(gfx::Size(50, 50));
- clip->SetMasksToBounds(true);
- scroll_parent_target->SetBounds(gfx::Size(50, 50));
- scroll_parent_target->SetMasksToBounds(true);
- scroll_parent_target->test_properties()->force_render_surface = true;
- scroll_parent->SetBounds(gfx::Size(50, 50));
-
- ExecuteCalculateDrawProperties(root);
- PropertyTrees* property_trees = root->layer_tree_impl()->property_trees();
- ClipNode* clip_node =
- property_trees->clip_tree.Node(child_of_scroll_child->clip_tree_index());
- ClipNode* parent_clip_node = property_trees->clip_tree.parent(clip_node);
- DCHECK_GT(parent_clip_node->target_transform_id,
- property_trees->transform_tree.TargetId(
- child_of_scroll_child->transform_tree_index()));
-}
-
TEST_F(LayerTreeHostCommonTest, SingularTransformSubtreesDoNotDraw) {
LayerImpl* root = root_layer_for_testing();
LayerImpl* parent = AddChildToRoot<LayerImpl>();
@@ -8966,30 +8909,17 @@ TEST_F(LayerTreeHostCommonTest,
zero_matrix.Scale3d(0.f, 0.f, 0.f);
root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated(
zero_matrix, animated->transform_tree_index(), root->layer_tree_impl());
- // While computing visible rects by combining clips in screen space, we set
- // the entire layer as visible if the screen space transform is singular. This
- // is not always true when we combine clips in target space because if the
- // intersection of combined_clip in taret space with layer_rect projected to
- // target space is empty, we set it to an empty rect.
- bool skip_verify_visible_rect_calculations = true;
- ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(
- root, skip_verify_visible_rect_calculations);
-
- // The animated layer maps to the empty rect in clipped target space, so is
- // treated as having an empty visible rect.
- EXPECT_EQ(gfx::Rect(), animated->visible_layer_rect());
+ ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root);
// The animated layer will be treated as fully visible when we combine clips
// in screen space.
- gfx::Rect visible_rect = draw_property_utils::ComputeLayerVisibleRectDynamic(
- root->layer_tree_impl()->property_trees(), animated);
- EXPECT_EQ(gfx::Rect(120, 120), visible_rect);
+ EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect());
// This time, flattening does not make |animated|'s transform invertible. This
// means the clip cannot be projected into |surface|'s space, so we treat
// |surface| and layers that draw into it as having empty visible rect.
- EXPECT_EQ(gfx::Rect(), surface->visible_layer_rect());
- EXPECT_EQ(gfx::Rect(), descendant_of_animation->visible_layer_rect());
+ EXPECT_EQ(gfx::Rect(100, 100), surface->visible_layer_rect());
+ EXPECT_EQ(gfx::Rect(200, 200), descendant_of_animation->visible_layer_rect());
}
// Verify that having animated opacity but current opacity 1 still creates
@@ -9786,14 +9716,9 @@ TEST_F(LayerTreeHostCommonTest, RenderSurfaceClipsSubtree) {
LayerImpl* page_scale_layer = nullptr;
LayerImpl* inner_viewport_scroll_layer = nullptr;
LayerImpl* outer_viewport_scroll_layer = nullptr;
- // Visible rects computed by combining clips in target space and root space
- // don't match because of rotation transforms. So, we skip
- // verify_visible_rect_calculations.
- bool skip_verify_visible_rect_calculations = true;
ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor,
page_scale_layer, inner_viewport_scroll_layer,
- outer_viewport_scroll_layer,
- skip_verify_visible_rect_calculations);
+ outer_viewport_scroll_layer);
TransformTree& transform_tree =
root->layer_tree_impl()->property_trees()->transform_tree;
@@ -9807,15 +9732,7 @@ TEST_F(LayerTreeHostCommonTest, RenderSurfaceClipsSubtree) {
EXPECT_TRUE(render_surface->GetRenderSurface());
EXPECT_FALSE(test_layer->GetRenderSurface());
- ClipTree& clip_tree = root->layer_tree_impl()->property_trees()->clip_tree;
- ClipNode* clip_node = clip_tree.Node(render_surface->clip_tree_index());
- EXPECT_EQ(clip_node->clip_type, ClipNode::ClipType::NONE);
- EXPECT_EQ(gfx::Rect(20, 20), test_layer->visible_layer_rect());
-
- // Also test the visible rects computed by combining clips in root space.
- gfx::Rect visible_rect = draw_property_utils::ComputeLayerVisibleRectDynamic(
- root->layer_tree_impl()->property_trees(), test_layer);
- EXPECT_EQ(gfx::Rect(30, 20), visible_rect);
+ EXPECT_EQ(gfx::Rect(30, 20), test_layer->visible_layer_rect());
}
TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) {
@@ -10257,9 +10174,6 @@ TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) {
ExecuteCalculateDrawProperties(root);
EXPECT_EQ(gfx::Rect(-10, -10, 30, 30), render_surface2->clip_rect());
- // A clip node is created for every render surface and for layers that have
- // local clip. So, here it should be craeted for every layer.
- EXPECT_EQ(root->layer_tree_impl()->property_trees()->clip_tree.size(), 5u);
}
TEST_F(LayerTreeHostCommonTest, MaskLayerDrawProperties) {

Powered by Google App Engine
This is Rietveld 408576698