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

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

Issue 563313002: Revert of Generalize scroll parent work in CalculateDrawProperties (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « cc/trees/layer_tree_host_common.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <set> 7 #include <set>
8 8
9 #include "cc/animation/layer_animation_controller.h" 9 #include "cc/animation/layer_animation_controller.h"
10 #include "cc/animation/transform_operations.h" 10 #include "cc/animation/transform_operations.h"
(...skipping 2860 matching lines...) Expand 10 before | Expand all | Expand 10 after
2871 true, 2871 true,
2872 false); 2872 false);
2873 SetLayerPropertiesForTesting(child.get(), 2873 SetLayerPropertiesForTesting(child.get(),
2874 identity_matrix, 2874 identity_matrix,
2875 gfx::Point3F(), 2875 gfx::Point3F(),
2876 gfx::PointF(5.f, 5.f), 2876 gfx::PointF(5.f, 5.f),
2877 gfx::Size(50, 50), 2877 gfx::Size(50, 50),
2878 true, 2878 true,
2879 false); 2879 false);
2880 2880
2881 int initial_sequence_number = child->draw_properties().sequence_number; 2881 child->draw_properties().sorted_for_recursion = true;
2882 2882
2883 TransformOperations start_transform_operations; 2883 TransformOperations start_transform_operations;
2884 start_transform_operations.AppendScale(1.f, 0.f, 0.f); 2884 start_transform_operations.AppendScale(1.f, 0.f, 0.f);
2885 2885
2886 TransformOperations end_transform_operations; 2886 TransformOperations end_transform_operations;
2887 end_transform_operations.AppendScale(1.f, 1.f, 0.f); 2887 end_transform_operations.AppendScale(1.f, 1.f, 0.f);
2888 2888
2889 AddAnimatedTransformToLayer( 2889 AddAnimatedTransformToLayer(
2890 root.get(), 10.0, start_transform_operations, end_transform_operations); 2890 root.get(), 10.0, start_transform_operations, end_transform_operations);
2891 2891
2892 EXPECT_TRUE(root->TransformIsAnimating()); 2892 EXPECT_TRUE(root->TransformIsAnimating());
2893 2893
2894 ExecuteCalculateDrawProperties(root.get()); 2894 ExecuteCalculateDrawProperties(root.get());
2895 2895
2896 EXPECT_NE(initial_sequence_number, child->draw_properties().sequence_number); 2896 EXPECT_FALSE(child->draw_properties().sorted_for_recursion);
2897 } 2897 }
2898 2898
2899 TEST_F(LayerTreeHostCommonTest, 2899 TEST_F(LayerTreeHostCommonTest,
2900 SingularNonAnimatingTransformDoesNotPreventClearingDrawProperties) { 2900 SingularNonAnimatingTransformDoesNotPreventClearingDrawProperties) {
2901 scoped_refptr<Layer> root = Layer::Create(); 2901 scoped_refptr<Layer> root = Layer::Create();
2902 2902
2903 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 2903 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
2904 host->SetRootLayer(root); 2904 host->SetRootLayer(root);
2905 2905
2906 gfx::Transform identity_matrix; 2906 gfx::Transform identity_matrix;
2907 gfx::Transform uninvertible_matrix(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); 2907 gfx::Transform uninvertible_matrix(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
2908 ASSERT_FALSE(uninvertible_matrix.IsInvertible()); 2908 ASSERT_FALSE(uninvertible_matrix.IsInvertible());
2909 2909
2910 SetLayerPropertiesForTesting(root.get(), 2910 SetLayerPropertiesForTesting(root.get(),
2911 uninvertible_matrix, 2911 uninvertible_matrix,
2912 gfx::Point3F(), 2912 gfx::Point3F(),
2913 gfx::PointF(), 2913 gfx::PointF(),
2914 gfx::Size(100, 100), 2914 gfx::Size(100, 100),
2915 true, 2915 true,
2916 false); 2916 false);
2917 2917
2918 int initial_sequence_number = root->draw_properties().sequence_number; 2918 root->draw_properties().sorted_for_recursion = true;
2919 2919
2920 EXPECT_FALSE(root->TransformIsAnimating()); 2920 EXPECT_FALSE(root->TransformIsAnimating());
2921 2921
2922 ExecuteCalculateDrawProperties(root.get()); 2922 ExecuteCalculateDrawProperties(root.get());
2923 2923
2924 EXPECT_NE(initial_sequence_number, root->draw_properties().sequence_number); 2924 EXPECT_FALSE(root->draw_properties().sorted_for_recursion);
2925 } 2925 }
2926 2926
2927 TEST_F(LayerTreeHostCommonTest, 2927 TEST_F(LayerTreeHostCommonTest,
2928 DrawableAndVisibleContentRectsForLayersInClippedRenderSurface) { 2928 DrawableAndVisibleContentRectsForLayersInClippedRenderSurface) {
2929 scoped_refptr<Layer> root = Layer::Create(); 2929 scoped_refptr<Layer> root = Layer::Create();
2930 scoped_refptr<Layer> render_surface1 = Layer::Create(); 2930 scoped_refptr<Layer> render_surface1 = Layer::Create();
2931 scoped_refptr<LayerWithForcedDrawsContent> child1 = 2931 scoped_refptr<LayerWithForcedDrawsContent> child1 =
2932 make_scoped_refptr(new LayerWithForcedDrawsContent()); 2932 make_scoped_refptr(new LayerWithForcedDrawsContent());
2933 scoped_refptr<LayerWithForcedDrawsContent> child2 = 2933 scoped_refptr<LayerWithForcedDrawsContent> child2 =
2934 make_scoped_refptr(new LayerWithForcedDrawsContent()); 2934 make_scoped_refptr(new LayerWithForcedDrawsContent());
(...skipping 4583 matching lines...) Expand 10 before | Expand all | Expand 10 after
7518 // right clip, our render_surface_layer_list's order should be unaffected. 7518 // right clip, our render_surface_layer_list's order should be unaffected.
7519 EXPECT_EQ(3u, render_surface_layer_list.size()); 7519 EXPECT_EQ(3u, render_surface_layer_list.size());
7520 EXPECT_EQ(root.get(), render_surface_layer_list.at(0)); 7520 EXPECT_EQ(root.get(), render_surface_layer_list.at(0));
7521 EXPECT_EQ(render_surface2.get(), render_surface_layer_list.at(1)); 7521 EXPECT_EQ(render_surface2.get(), render_surface_layer_list.at(1));
7522 EXPECT_EQ(render_surface1.get(), render_surface_layer_list.at(2)); 7522 EXPECT_EQ(render_surface1.get(), render_surface_layer_list.at(2));
7523 EXPECT_TRUE(render_surface_layer_list.at(0)->render_surface()); 7523 EXPECT_TRUE(render_surface_layer_list.at(0)->render_surface());
7524 EXPECT_TRUE(render_surface_layer_list.at(1)->render_surface()); 7524 EXPECT_TRUE(render_surface_layer_list.at(1)->render_surface());
7525 EXPECT_TRUE(render_surface_layer_list.at(2)->render_surface()); 7525 EXPECT_TRUE(render_surface_layer_list.at(2)->render_surface());
7526 } 7526 }
7527 7527
7528 TEST_F(LayerTreeHostCommonTest, ScrollChildIsGrandchildOfLCA) {
7529 // A previously unhandled case for layer sorting was when the scroll child was
7530 // a grand child of the lowest common ancestor of the scroll child and parent.
7531 // For example,
7532 //
7533 // + root
7534 // + top_content
7535 // + scroll_child
7536 // + bottom_content
7537 // + scroll_parent_border
7538 // + scroll_parent_clip
7539 // + scroll_parent
7540 //
7541 FakeImplProxy proxy;
7542 TestSharedBitmapManager shared_bitmap_manager;
7543 FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager);
7544 host_impl.CreatePendingTree();
7545 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1);
7546 scoped_ptr<LayerImpl> scroll_parent_border =
7547 LayerImpl::Create(host_impl.active_tree(), 2);
7548 scoped_ptr<LayerImpl> scroll_parent_clip =
7549 LayerImpl::Create(host_impl.active_tree(), 3);
7550 scoped_ptr<LayerImpl> scroll_parent =
7551 LayerImpl::Create(host_impl.active_tree(), 4);
7552 scoped_ptr<LayerImpl> scroll_child =
7553 LayerImpl::Create(host_impl.active_tree(), 5);
7554 scoped_ptr<LayerImpl> bottom_content =
7555 LayerImpl::Create(host_impl.active_tree(), 6);
7556 scoped_ptr<LayerImpl> top_content =
7557 LayerImpl::Create(host_impl.active_tree(), 7);
7558
7559 scroll_parent_clip->SetMasksToBounds(true);
7560
7561 scroll_child->SetScrollParent(scroll_parent.get());
7562 scoped_ptr<std::set<LayerImpl*> > scroll_children(new std::set<LayerImpl*>);
7563 scroll_children->insert(scroll_child.get());
7564 scroll_parent->SetScrollChildren(scroll_children.release());
7565
7566 scroll_child->SetDrawsContent(true);
7567 scroll_parent->SetDrawsContent(true);
7568 top_content->SetDrawsContent(true);
7569 bottom_content->SetDrawsContent(true);
7570
7571 gfx::Transform identity_transform;
7572 gfx::Transform top_transform;
7573 top_transform.Translate3d(0.0, 0.0, 5.0);
7574 gfx::Transform bottom_transform;
7575 bottom_transform.Translate3d(0.0, 0.0, 3.0);
7576
7577 SetLayerPropertiesForTesting(root.get(),
7578 identity_transform,
7579 gfx::Point3F(),
7580 gfx::PointF(),
7581 gfx::Size(50, 50),
7582 true,
7583 false);
7584 SetLayerPropertiesForTesting(scroll_parent_border.get(),
7585 identity_transform,
7586 gfx::Point3F(),
7587 gfx::PointF(),
7588 gfx::Size(40, 40),
7589 true,
7590 false);
7591 SetLayerPropertiesForTesting(scroll_parent_clip.get(),
7592 identity_transform,
7593 gfx::Point3F(),
7594 gfx::PointF(),
7595 gfx::Size(30, 30),
7596 true,
7597 false);
7598 SetLayerPropertiesForTesting(scroll_parent.get(),
7599 identity_transform,
7600 gfx::Point3F(),
7601 gfx::PointF(),
7602 gfx::Size(50, 50),
7603 true,
7604 false);
7605 SetLayerPropertiesForTesting(scroll_child.get(),
7606 identity_transform,
7607 gfx::Point3F(),
7608 gfx::PointF(),
7609 gfx::Size(50, 50),
7610 true,
7611 false);
7612 SetLayerPropertiesForTesting(top_content.get(),
7613 top_transform,
7614 gfx::Point3F(),
7615 gfx::PointF(),
7616 gfx::Size(50, 50),
7617 false,
7618 true);
7619 SetLayerPropertiesForTesting(bottom_content.get(),
7620 bottom_transform,
7621 gfx::Point3F(),
7622 gfx::PointF(),
7623 gfx::Size(50, 50),
7624 false,
7625 true);
7626
7627 scroll_child->SetShouldFlattenTransform(false);
7628 scroll_child->Set3dSortingContextId(1);
7629
7630 scroll_child->AddChild(bottom_content.Pass());
7631
7632 top_content->AddChild(scroll_child.Pass());
7633 root->AddChild(top_content.Pass());
7634
7635 scroll_parent_clip->AddChild(scroll_parent.Pass());
7636 scroll_parent_border->AddChild(scroll_parent_clip.Pass());
7637 root->AddChild(scroll_parent_border.Pass());
7638
7639 LayerImplList render_surface_layer_list;
7640 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
7641 root.get(), root->bounds(), &render_surface_layer_list);
7642
7643 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
7644
7645 EXPECT_TRUE(root->render_surface());
7646
7647 EXPECT_EQ(4u, root->render_surface()->layer_list().size());
7648 EXPECT_EQ(7, root->render_surface()->layer_list().at(0)->id());
7649 EXPECT_EQ(5, root->render_surface()->layer_list().at(1)->id());
7650 EXPECT_EQ(6, root->render_surface()->layer_list().at(2)->id());
7651 EXPECT_EQ(4, root->render_surface()->layer_list().at(3)->id());
7652
7653 // Explicitly check that the sort weights of the two descendancs of the lowest
7654 // common ancestor of the scroll parent and child are ordered correctly.
7655 EXPECT_EQ(7, root->child_at(0)->id());
7656 EXPECT_EQ(2, root->child_at(1)->id());
7657 EXPECT_LT(root->child_at(1)->draw_properties().sort_weight,
7658 root->child_at(0)->draw_properties().sort_weight);
7659 }
7660
7661 TEST_F(LayerTreeHostCommonTest, ScrollWeightSetMultipleTimes) {
7662 // This is a case where we have to reset a previously set weight.
7663 // scroll_parent_1_border will get a negative weight because the child is
7664 // visited first. When we reach scroll child 2, we'll have to go back and
7665 // "fix" the weight for scroll_parent_2_border so that it sorts before
7666 // scroll_parent_1_border.
7667 //
7668 // + root
7669 // + scroll_parent_2_border
7670 // | + scroll_parent_2_clip
7671 // | + scroll_parent_2
7672 // |
7673 // + top_content
7674 // | + scroll_child_1
7675 // | + bottom_content
7676 // |
7677 // + scroll_parent_1_border
7678 // + scroll_parent_1_clip
7679 // + scroll_child_2
7680 // + scroll_parent_1
7681 //
7682 FakeImplProxy proxy;
7683 TestSharedBitmapManager shared_bitmap_manager;
7684 FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager);
7685 host_impl.CreatePendingTree();
7686 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1);
7687
7688 scoped_ptr<LayerImpl> scroll_parent_1_border =
7689 LayerImpl::Create(host_impl.active_tree(), 2);
7690 scoped_ptr<LayerImpl> scroll_parent_1_clip =
7691 LayerImpl::Create(host_impl.active_tree(), 3);
7692 scoped_ptr<LayerImpl> scroll_parent_1 =
7693 LayerImpl::Create(host_impl.active_tree(), 4);
7694
7695 scoped_ptr<LayerImpl> scroll_child_1 =
7696 LayerImpl::Create(host_impl.active_tree(), 5);
7697
7698 scoped_ptr<LayerImpl> scroll_parent_2_border =
7699 LayerImpl::Create(host_impl.active_tree(), 6);
7700 scoped_ptr<LayerImpl> scroll_parent_2_clip =
7701 LayerImpl::Create(host_impl.active_tree(), 7);
7702 scoped_ptr<LayerImpl> scroll_parent_2 =
7703 LayerImpl::Create(host_impl.active_tree(), 8);
7704
7705 scoped_ptr<LayerImpl> scroll_child_2 =
7706 LayerImpl::Create(host_impl.active_tree(), 9);
7707
7708 scoped_ptr<LayerImpl> bottom_content =
7709 LayerImpl::Create(host_impl.active_tree(), 10);
7710 scoped_ptr<LayerImpl> top_content =
7711 LayerImpl::Create(host_impl.active_tree(), 11);
7712
7713 scroll_parent_1_clip->SetMasksToBounds(true);
7714 scroll_parent_2_clip->SetMasksToBounds(true);
7715
7716 scroll_child_1->SetScrollParent(scroll_parent_1.get());
7717 scroll_child_2->SetScrollParent(scroll_parent_2.get());
7718
7719 scoped_ptr<std::set<LayerImpl*> > scroll_children_1(new std::set<LayerImpl*>);
7720 scroll_children_1->insert(scroll_child_1.get());
7721 scroll_parent_1->SetScrollChildren(scroll_children_1.release());
7722
7723 scoped_ptr<std::set<LayerImpl*> > scroll_children_2(new std::set<LayerImpl*>);
7724 scroll_children_2->insert(scroll_child_2.get());
7725 scroll_parent_2->SetScrollChildren(scroll_children_2.release());
7726
7727 scroll_child_1->SetDrawsContent(true);
7728 scroll_child_2->SetDrawsContent(true);
7729 scroll_parent_1->SetDrawsContent(true);
7730 scroll_parent_2->SetDrawsContent(true);
7731
7732 top_content->SetDrawsContent(true);
7733 bottom_content->SetDrawsContent(true);
7734
7735 gfx::Transform identity_transform;
7736 gfx::Transform top_transform;
7737 top_transform.Translate3d(0.0, 0.0, 5.0);
7738 gfx::Transform bottom_transform;
7739 bottom_transform.Translate3d(0.0, 0.0, 3.0);
7740
7741 SetLayerPropertiesForTesting(root.get(),
7742 identity_transform,
7743 gfx::Point3F(),
7744 gfx::PointF(),
7745 gfx::Size(50, 50),
7746 true,
7747 false);
7748 SetLayerPropertiesForTesting(scroll_parent_1_border.get(),
7749 identity_transform,
7750 gfx::Point3F(),
7751 gfx::PointF(),
7752 gfx::Size(40, 40),
7753 true,
7754 false);
7755 SetLayerPropertiesForTesting(scroll_parent_1_clip.get(),
7756 identity_transform,
7757 gfx::Point3F(),
7758 gfx::PointF(),
7759 gfx::Size(30, 30),
7760 true,
7761 false);
7762 SetLayerPropertiesForTesting(scroll_parent_1.get(),
7763 identity_transform,
7764 gfx::Point3F(),
7765 gfx::PointF(),
7766 gfx::Size(50, 50),
7767 true,
7768 false);
7769 SetLayerPropertiesForTesting(scroll_parent_2_border.get(),
7770 identity_transform,
7771 gfx::Point3F(),
7772 gfx::PointF(),
7773 gfx::Size(40, 40),
7774 true,
7775 false);
7776 SetLayerPropertiesForTesting(scroll_parent_2_clip.get(),
7777 identity_transform,
7778 gfx::Point3F(),
7779 gfx::PointF(),
7780 gfx::Size(30, 30),
7781 true,
7782 false);
7783 SetLayerPropertiesForTesting(scroll_parent_2.get(),
7784 identity_transform,
7785 gfx::Point3F(),
7786 gfx::PointF(),
7787 gfx::Size(50, 50),
7788 true,
7789 false);
7790 SetLayerPropertiesForTesting(scroll_child_1.get(),
7791 identity_transform,
7792 gfx::Point3F(),
7793 gfx::PointF(),
7794 gfx::Size(50, 50),
7795 true,
7796 false);
7797 SetLayerPropertiesForTesting(scroll_child_2.get(),
7798 identity_transform,
7799 gfx::Point3F(),
7800 gfx::PointF(),
7801 gfx::Size(50, 50),
7802 true,
7803 false);
7804 SetLayerPropertiesForTesting(top_content.get(),
7805 top_transform,
7806 gfx::Point3F(),
7807 gfx::PointF(),
7808 gfx::Size(50, 50),
7809 false,
7810 true);
7811 SetLayerPropertiesForTesting(bottom_content.get(),
7812 bottom_transform,
7813 gfx::Point3F(),
7814 gfx::PointF(),
7815 gfx::Size(50, 50),
7816 false,
7817 true);
7818
7819 scroll_child_1->SetShouldFlattenTransform(false);
7820 scroll_child_1->Set3dSortingContextId(1);
7821
7822 scroll_child_2->SetShouldFlattenTransform(false);
7823 scroll_child_2->Set3dSortingContextId(1);
7824
7825 scroll_parent_2_clip->AddChild(scroll_parent_2.Pass());
7826 scroll_parent_2_border->AddChild(scroll_parent_2_clip.Pass());
7827 root->AddChild(scroll_parent_2_border.Pass());
7828
7829 scroll_child_1->AddChild(bottom_content.Pass());
7830 top_content->AddChild(scroll_child_1.Pass());
7831 root->AddChild(top_content.Pass());
7832
7833 scroll_parent_1_clip->AddChild(scroll_child_2.Pass());
7834 scroll_parent_1_clip->AddChild(scroll_parent_1.Pass());
7835 scroll_parent_1_border->AddChild(scroll_parent_1_clip.Pass());
7836 root->AddChild(scroll_parent_1_border.Pass());
7837
7838 LayerImplList render_surface_layer_list;
7839 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
7840 root.get(), root->bounds(), &render_surface_layer_list);
7841
7842 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
7843
7844 EXPECT_TRUE(root->render_surface());
7845
7846 EXPECT_GT(0, root->child_at(0)->draw_properties().sort_weight);
7847 EXPECT_GT(0, root->child_at(2)->draw_properties().sort_weight);
7848 EXPECT_LT(root->child_at(0)->draw_properties().sort_weight,
7849 root->child_at(2)->draw_properties().sort_weight);
7850 EXPECT_TRUE(root->draw_properties().children_need_sorting);
7851 }
7852
7853 TEST_F(LayerTreeHostCommonTest, DoNotClobberSorting) { 7528 TEST_F(LayerTreeHostCommonTest, DoNotClobberSorting) {
7854 // We rearrange layer list contributions if we have to visit children out of 7529 // We rearrange layer list contributions if we have to visit children out of
7855 // order, but it should be a 'stable' rearrangement. That is, the layer list 7530 // order, but it should be a 'stable' rearrangement. That is, the layer list
7856 // additions for a single layer should not be reordered, though their position 7531 // additions for a single layer should not be reordered, though their position
7857 // wrt to the contributions due to a sibling may vary. 7532 // wrt to the contributions due to a sibling may vary.
7858 // 7533 //
7859 // + root 7534 // + root
7860 // + scroll_child 7535 // + scroll_child
7861 // + top_content 7536 // + top_content
7862 // + bottom_content 7537 // + bottom_content
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after
8879 EXPECT_FLOAT_EQ(4.f, 8554 EXPECT_FLOAT_EQ(4.f,
8880 child1_layer->replica_layer() 8555 child1_layer->replica_layer()
8881 ->mask_layer() 8556 ->mask_layer()
8882 ->draw_properties() 8557 ->draw_properties()
8883 .device_scale_factor); 8558 .device_scale_factor);
8884 EXPECT_FLOAT_EQ(4.f, child2_layer->draw_properties().device_scale_factor); 8559 EXPECT_FLOAT_EQ(4.f, child2_layer->draw_properties().device_scale_factor);
8885 } 8560 }
8886 8561
8887 } // namespace 8562 } // namespace
8888 } // namespace cc 8563 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_common.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698