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

Side by Side Diff: cc/trees/layer_tree_host_common_unittest.cc

Issue 2762123004: cc: LayerTreeHostImpl uses element id to tick animations (Closed)
Patch Set: review comments Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_common.h" 5 #include "cc/trees/layer_tree_host_common.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after
1415 root->SetBounds(gfx::Size(10, 10)); 1415 root->SetBounds(gfx::Size(10, 10));
1416 render_surface1->SetBounds(gfx::Size(10, 10)); 1416 render_surface1->SetBounds(gfx::Size(10, 10));
1417 render_surface1->test_properties()->force_render_surface = true; 1417 render_surface1->test_properties()->force_render_surface = true;
1418 render_surface1->test_properties()->opacity = 0.f; 1418 render_surface1->test_properties()->opacity = 0.f;
1419 render_surface1->SetDrawsContent(true); 1419 render_surface1->SetDrawsContent(true);
1420 FilterOperations filters; 1420 FilterOperations filters;
1421 filters.Append(FilterOperation::CreateBlurFilter(1.5f)); 1421 filters.Append(FilterOperation::CreateBlurFilter(1.5f));
1422 render_surface1->test_properties()->background_filters = filters; 1422 render_surface1->test_properties()->background_filters = filters;
1423 child->SetBounds(gfx::Size(10, 10)); 1423 child->SetBounds(gfx::Size(10, 10));
1424 child->SetDrawsContent(true); 1424 child->SetDrawsContent(true);
1425 root->layer_tree_impl()->SetElementIdsForTesting();
1425 1426
1426 { 1427 {
1427 LayerImplList render_surface_layer_list; 1428 LayerImplList render_surface_layer_list;
1428 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 1429 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
1429 root, root->bounds(), &render_surface_layer_list); 1430 root, root->bounds(), &render_surface_layer_list);
1430 inputs.can_adjust_raster_scales = true; 1431 inputs.can_adjust_raster_scales = true;
1431 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); 1432 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
1432 EXPECT_EQ(2U, render_surface_layer_list.size()); 1433 EXPECT_EQ(2U, render_surface_layer_list.size());
1433 } 1434 }
1434 // The layer is fully transparent, but has a background filter, so it 1435 // The layer is fully transparent, but has a background filter, so it
1435 // shouldn't be skipped and should be drawn. 1436 // shouldn't be skipped and should be drawn.
1436 ASSERT_TRUE(root->GetRenderSurface()); 1437 ASSERT_TRUE(root->GetRenderSurface());
1437 EXPECT_EQ(1U, root->GetRenderSurface()->layer_list().size()); 1438 EXPECT_EQ(1U, root->GetRenderSurface()->layer_list().size());
1438 EXPECT_EQ(gfx::RectF(0, 0, 10, 10), 1439 EXPECT_EQ(gfx::RectF(0, 0, 10, 10),
1439 root->GetRenderSurface()->DrawableContentRect()); 1440 root->GetRenderSurface()->DrawableContentRect());
1440 EffectTree& effect_tree = 1441 EffectTree& effect_tree =
1441 root->layer_tree_impl()->property_trees()->effect_tree; 1442 root->layer_tree_impl()->property_trees()->effect_tree;
1442 EffectNode* node = effect_tree.Node(render_surface1->effect_tree_index()); 1443 EffectNode* node = effect_tree.Node(render_surface1->effect_tree_index());
1443 EXPECT_TRUE(node->is_drawn); 1444 EXPECT_TRUE(node->is_drawn);
1444 1445
1445 // When root is transparent, the layer should not be drawn. 1446 // When root is transparent, the layer should not be drawn.
1446 effect_tree.OnOpacityAnimated(0.f, root->effect_tree_index(), 1447 root->layer_tree_impl()->SetOpacityMutated(root->element_id(), 0.f);
1447 root->layer_tree_impl()); 1448 root->layer_tree_impl()->SetOpacityMutated(render_surface1->element_id(),
1448 effect_tree.OnOpacityAnimated(1.f, render_surface1->effect_tree_index(), 1449 1.f);
1449 root->layer_tree_impl());
1450 render_surface1->set_visible_layer_rect(gfx::Rect()); 1450 render_surface1->set_visible_layer_rect(gfx::Rect());
1451 { 1451 {
1452 LayerImplList render_surface_layer_list; 1452 LayerImplList render_surface_layer_list;
1453 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 1453 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
1454 root, root->bounds(), &render_surface_layer_list); 1454 root, root->bounds(), &render_surface_layer_list);
1455 inputs.can_adjust_raster_scales = true; 1455 inputs.can_adjust_raster_scales = true;
1456 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); 1456 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
1457 } 1457 }
1458 1458
1459 node = effect_tree.Node(render_surface1->effect_tree_index()); 1459 node = effect_tree.Node(render_surface1->effect_tree_index());
(...skipping 4926 matching lines...) Expand 10 before | Expand all | Expand 10 after
6386 render_surface1->SetBounds(gfx::Size(30, 30)); 6386 render_surface1->SetBounds(gfx::Size(30, 30));
6387 render_surface1->test_properties()->should_flatten_transform = false; 6387 render_surface1->test_properties()->should_flatten_transform = false;
6388 render_surface1->test_properties()->double_sided = false; 6388 render_surface1->test_properties()->double_sided = false;
6389 render_surface1->test_properties()->force_render_surface = true; 6389 render_surface1->test_properties()->force_render_surface = true;
6390 render_surface1->test_properties()->sorting_context_id = 1; 6390 render_surface1->test_properties()->sorting_context_id = 1;
6391 render_surface2->SetBounds(gfx::Size(30, 30)); 6391 render_surface2->SetBounds(gfx::Size(30, 30));
6392 render_surface2->test_properties()->should_flatten_transform = false; 6392 render_surface2->test_properties()->should_flatten_transform = false;
6393 render_surface2->test_properties()->double_sided = false; 6393 render_surface2->test_properties()->double_sided = false;
6394 render_surface2->test_properties()->force_render_surface = true; 6394 render_surface2->test_properties()->force_render_surface = true;
6395 render_surface2->test_properties()->sorting_context_id = 1; 6395 render_surface2->test_properties()->sorting_context_id = 1;
6396 SetElementIdsForTesting();
6396 ExecuteCalculateDrawProperties(root); 6397 ExecuteCalculateDrawProperties(root);
6397 6398
6398 const EffectTree& tree = 6399 const EffectTree& tree =
6399 root->layer_tree_impl()->property_trees()->effect_tree; 6400 root->layer_tree_impl()->property_trees()->effect_tree;
6400 EXPECT_TRUE(tree.Node(render_surface1->effect_tree_index()) 6401 EXPECT_TRUE(tree.Node(render_surface1->effect_tree_index())
6401 ->hidden_by_backface_visibility); 6402 ->hidden_by_backface_visibility);
6402 EXPECT_TRUE(tree.Node(render_surface2->effect_tree_index()) 6403 EXPECT_TRUE(tree.Node(render_surface2->effect_tree_index())
6403 ->hidden_by_backface_visibility); 6404 ->hidden_by_backface_visibility);
6404 6405
6405 root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated( 6406 root->layer_tree_impl()->SetTransformMutated(back_facing->element_id(),
6406 gfx::Transform(), back_facing->transform_tree_index(), 6407 gfx::Transform());
6407 root->layer_tree_impl()); 6408 root->layer_tree_impl()->SetTransformMutated(render_surface2->element_id(),
6408 root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated( 6409 rotate_about_y);
6409 rotate_about_y, render_surface2->transform_tree_index(),
6410 root->layer_tree_impl());
6411 ExecuteCalculateDrawProperties(root); 6410 ExecuteCalculateDrawProperties(root);
6412 EXPECT_FALSE(tree.Node(render_surface1->effect_tree_index()) 6411 EXPECT_FALSE(tree.Node(render_surface1->effect_tree_index())
6413 ->hidden_by_backface_visibility); 6412 ->hidden_by_backface_visibility);
6414 EXPECT_TRUE(tree.Node(render_surface2->effect_tree_index()) 6413 EXPECT_TRUE(tree.Node(render_surface2->effect_tree_index())
6415 ->hidden_by_backface_visibility); 6414 ->hidden_by_backface_visibility);
6416 6415
6417 root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated( 6416 root->layer_tree_impl()->SetTransformMutated(render_surface1->element_id(),
6418 rotate_about_y, render_surface1->transform_tree_index(), 6417 rotate_about_y);
6419 root->layer_tree_impl());
6420 ExecuteCalculateDrawProperties(root); 6418 ExecuteCalculateDrawProperties(root);
6421 EXPECT_TRUE(tree.Node(render_surface1->effect_tree_index()) 6419 EXPECT_TRUE(tree.Node(render_surface1->effect_tree_index())
6422 ->hidden_by_backface_visibility); 6420 ->hidden_by_backface_visibility);
6423 EXPECT_TRUE(tree.Node(render_surface2->effect_tree_index()) 6421 EXPECT_TRUE(tree.Node(render_surface2->effect_tree_index())
6424 ->hidden_by_backface_visibility); 6422 ->hidden_by_backface_visibility);
6425 } 6423 }
6426 6424
6427 TEST_F(LayerTreeHostCommonTest, ClippedByScrollParent) { 6425 TEST_F(LayerTreeHostCommonTest, ClippedByScrollParent) {
6428 // Checks that the simple case (being clipped by a scroll parent that would 6426 // Checks that the simple case (being clipped by a scroll parent that would
6429 // have been processed before you anyhow) results in the right clips. 6427 // have been processed before you anyhow) results in the right clips.
(...skipping 2326 matching lines...) Expand 10 before | Expand all | Expand 10 after
8756 EXPECT_FLOAT_EQ(0.f, GetMaximumAnimationScale(root_layer)); 8754 EXPECT_FLOAT_EQ(0.f, GetMaximumAnimationScale(root_layer));
8757 EXPECT_FLOAT_EQ(0.f, GetMaximumAnimationScale(child1_layer)); 8755 EXPECT_FLOAT_EQ(0.f, GetMaximumAnimationScale(child1_layer));
8758 EXPECT_FLOAT_EQ(24.f, GetMaximumAnimationScale(child2_layer)); 8756 EXPECT_FLOAT_EQ(24.f, GetMaximumAnimationScale(child2_layer));
8759 8757
8760 EXPECT_FLOAT_EQ(0.f, GetStartingAnimationScale(root_layer)); 8758 EXPECT_FLOAT_EQ(0.f, GetStartingAnimationScale(root_layer));
8761 EXPECT_FLOAT_EQ(0.f, GetStartingAnimationScale(child1_layer)); 8759 EXPECT_FLOAT_EQ(0.f, GetStartingAnimationScale(child1_layer));
8762 EXPECT_FLOAT_EQ(3.f, GetStartingAnimationScale(child2_layer)); 8760 EXPECT_FLOAT_EQ(3.f, GetStartingAnimationScale(child2_layer));
8763 8761
8764 // Correctly updates animation scale when layer property changes. 8762 // Correctly updates animation scale when layer property changes.
8765 child1_layer->test_properties()->transform = gfx::Transform(); 8763 child1_layer->test_properties()->transform = gfx::Transform();
8766 root_layer->layer_tree_impl() 8764 root_layer->layer_tree_impl()->SetTransformMutated(child1_layer->element_id(),
8767 ->property_trees() 8765 gfx::Transform());
8768 ->transform_tree.OnTransformAnimated(gfx::Transform(),
8769 child1_layer->transform_tree_index(),
8770 root_layer->layer_tree_impl());
8771 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = false; 8766 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = false;
8772 ExecuteCalculateDrawProperties(root_layer); 8767 ExecuteCalculateDrawProperties(root_layer);
8773 EXPECT_FLOAT_EQ(8.f, GetMaximumAnimationScale(child2_layer)); 8768 EXPECT_FLOAT_EQ(8.f, GetMaximumAnimationScale(child2_layer));
8774 EXPECT_FLOAT_EQ(1.f, GetStartingAnimationScale(child2_layer)); 8769 EXPECT_FLOAT_EQ(1.f, GetStartingAnimationScale(child2_layer));
8775 8770
8776 // Do not update animation scale if already updated. 8771 // Do not update animation scale if already updated.
8777 host_impl.active_tree()->property_trees()->SetAnimationScalesForTesting( 8772 host_impl.active_tree()->property_trees()->SetAnimationScalesForTesting(
8778 child2_layer->transform_tree_index(), 100.f, 100.f); 8773 child2_layer->transform_tree_index(), 100.f, 100.f);
8779 EXPECT_FLOAT_EQ(100.f, GetMaximumAnimationScale(child2_layer)); 8774 EXPECT_FLOAT_EQ(100.f, GetMaximumAnimationScale(child2_layer));
8780 EXPECT_FLOAT_EQ(100.f, GetStartingAnimationScale(child2_layer)); 8775 EXPECT_FLOAT_EQ(100.f, GetStartingAnimationScale(child2_layer));
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
9036 // clipped target space, so is treated as fully visible. 9031 // clipped target space, so is treated as fully visible.
9037 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect()); 9032 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect());
9038 9033
9039 // The singular transform on |animated| is flattened when inherited by 9034 // The singular transform on |animated| is flattened when inherited by
9040 // |surface|, and this happens to make it invertible. 9035 // |surface|, and this happens to make it invertible.
9041 EXPECT_EQ(gfx::Rect(2, 2), surface->visible_layer_rect()); 9036 EXPECT_EQ(gfx::Rect(2, 2), surface->visible_layer_rect());
9042 EXPECT_EQ(gfx::Rect(2, 2), descendant_of_animation->visible_layer_rect()); 9037 EXPECT_EQ(gfx::Rect(2, 2), descendant_of_animation->visible_layer_rect());
9043 9038
9044 gfx::Transform zero_matrix; 9039 gfx::Transform zero_matrix;
9045 zero_matrix.Scale3d(0.f, 0.f, 0.f); 9040 zero_matrix.Scale3d(0.f, 0.f, 0.f);
9046 root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated( 9041 root->layer_tree_impl()->SetTransformMutated(animated->element_id(),
9047 zero_matrix, animated->transform_tree_index(), root->layer_tree_impl()); 9042 zero_matrix);
9048 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root); 9043 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root);
9049 9044
9050 // The animated layer will be treated as fully visible when we combine clips 9045 // The animated layer will be treated as fully visible when we combine clips
9051 // in screen space. 9046 // in screen space.
9052 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect()); 9047 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect());
9053 9048
9054 // This time, flattening does not make |animated|'s transform invertible. This 9049 // This time, flattening does not make |animated|'s transform invertible. This
9055 // means the clip cannot be projected into |surface|'s space, so we treat 9050 // means the clip cannot be projected into |surface|'s space, so we treat
9056 // |surface| and layers that draw into it as having empty visible rect. 9051 // |surface| and layers that draw into it as having empty visible rect.
9057 EXPECT_EQ(gfx::Rect(100, 100), surface->visible_layer_rect()); 9052 EXPECT_EQ(gfx::Rect(100, 100), surface->visible_layer_rect());
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
9537 host_impl.active_tree()->property_trees()->needs_rebuild = true; 9532 host_impl.active_tree()->property_trees()->needs_rebuild = true;
9538 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 9533 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
9539 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 9534 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
9540 child_ptr->test_properties()->transform = gfx::Transform(); 9535 child_ptr->test_properties()->transform = gfx::Transform();
9541 9536
9542 child_ptr->test_properties()->hide_layer_and_subtree = true; 9537 child_ptr->test_properties()->hide_layer_and_subtree = true;
9543 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 9538 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
9544 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 9539 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
9545 child_ptr->test_properties()->hide_layer_and_subtree = false; 9540 child_ptr->test_properties()->hide_layer_and_subtree = false;
9546 9541
9547 child_ptr->layer_tree_impl()->property_trees()->effect_tree.OnOpacityAnimated( 9542 child_ptr->test_properties()->opacity = 0.f;
9548 0.f, child_ptr->effect_tree_index(), child_ptr->layer_tree_impl()); 9543 host_impl.active_tree()->property_trees()->needs_rebuild = true;
9549 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 9544 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
9550 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 9545 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
9551 child_ptr->test_properties()->opacity = 1.f; 9546 child_ptr->test_properties()->opacity = 1.f;
9552 9547
9553 root_ptr->test_properties()->transform = singular; 9548 root_ptr->test_properties()->transform = singular;
9554 // Force transform tree to have a node for child, so that ancestor's 9549 // Force transform tree to have a node for child, so that ancestor's
9555 // invertible transform can be tested. 9550 // invertible transform can be tested.
9556 child_ptr->test_properties()->transform = rotate; 9551 child_ptr->test_properties()->transform = rotate;
9557 host_impl.active_tree()->property_trees()->needs_rebuild = true; 9552 host_impl.active_tree()->property_trees()->needs_rebuild = true;
9558 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 9553 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after
10828 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); 10823 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index());
10829 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); 10824 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index());
10830 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); 10825 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index());
10831 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); 10826 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index());
10832 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); 10827 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index());
10833 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); 10828 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index());
10834 } 10829 }
10835 10830
10836 } // namespace 10831 } // namespace
10837 } // namespace cc 10832 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698