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

Side by Side Diff: ui/compositor/layer_unittest.cc

Issue 1588093004: Compute if a layer is drawn without LayerTree hierarchy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
« cc/trees/property_tree_builder.cc ('K') | « ui/compositor/layer.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/compositor/layer.h" 5 #include "ui/compositor/layer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 scoped_ptr<Layer> l1(CreateLayer(LAYER_SOLID_COLOR)); 720 scoped_ptr<Layer> l1(CreateLayer(LAYER_SOLID_COLOR));
721 l1->SetFillsBoundsOpaquely(true); 721 l1->SetFillsBoundsOpaquely(true);
722 l1->SetForceRenderSurface(true); 722 l1->SetForceRenderSurface(true);
723 l1->SetVisible(false); 723 l1->SetVisible(false);
724 l1->SetBounds(gfx::Rect(4, 5)); 724 l1->SetBounds(gfx::Rect(4, 5));
725 725
726 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin()); 726 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin());
727 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent()); 727 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent());
728 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque()); 728 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque());
729 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface()); 729 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface());
730 EXPECT_TRUE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 730 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
731 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds()); 731 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds());
732 732
733 cc::Layer* before_layer = l1->cc_layer_for_testing(); 733 cc::Layer* before_layer = l1->cc_layer_for_testing();
734 734
735 bool callback1_run = false; 735 bool callback1_run = false;
736 cc::TextureMailbox mailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), 0); 736 cc::TextureMailbox mailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), 0);
737 l1->SetTextureMailbox(mailbox, cc::SingleReleaseCallback::Create( 737 l1->SetTextureMailbox(mailbox, cc::SingleReleaseCallback::Create(
738 base::Bind(ReturnMailbox, &callback1_run)), 738 base::Bind(ReturnMailbox, &callback1_run)),
739 gfx::Size(10, 10)); 739 gfx::Size(10, 10));
740 740
741 EXPECT_NE(before_layer, l1->cc_layer_for_testing()); 741 EXPECT_NE(before_layer, l1->cc_layer_for_testing());
742 742
743 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin()); 743 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin());
744 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent()); 744 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent());
745 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque()); 745 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque());
746 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface()); 746 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface());
747 EXPECT_TRUE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 747 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
748 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds()); 748 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds());
749 EXPECT_FALSE(callback1_run); 749 EXPECT_FALSE(callback1_run);
750 750
751 bool callback2_run = false; 751 bool callback2_run = false;
752 mailbox = cc::TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), 0); 752 mailbox = cc::TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), 0);
753 l1->SetTextureMailbox(mailbox, cc::SingleReleaseCallback::Create( 753 l1->SetTextureMailbox(mailbox, cc::SingleReleaseCallback::Create(
754 base::Bind(ReturnMailbox, &callback2_run)), 754 base::Bind(ReturnMailbox, &callback2_run)),
755 gfx::Size(10, 10)); 755 gfx::Size(10, 10));
756 EXPECT_TRUE(callback1_run); 756 EXPECT_TRUE(callback1_run);
757 EXPECT_FALSE(callback2_run); 757 EXPECT_FALSE(callback2_run);
758 758
759 // Show solid color instead. 759 // Show solid color instead.
760 l1->SetShowSolidColorContent(); 760 l1->SetShowSolidColorContent();
761 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin()); 761 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin());
762 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent()); 762 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent());
763 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque()); 763 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque());
764 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface()); 764 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface());
765 EXPECT_TRUE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 765 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
766 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds()); 766 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds());
767 EXPECT_TRUE(callback2_run); 767 EXPECT_TRUE(callback2_run);
768 768
769 before_layer = l1->cc_layer_for_testing(); 769 before_layer = l1->cc_layer_for_testing();
770 770
771 // Back to a texture, without changing the bounds of the layer or the texture. 771 // Back to a texture, without changing the bounds of the layer or the texture.
772 bool callback3_run = false; 772 bool callback3_run = false;
773 mailbox = cc::TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), 0); 773 mailbox = cc::TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), 0);
774 l1->SetTextureMailbox(mailbox, cc::SingleReleaseCallback::Create( 774 l1->SetTextureMailbox(mailbox, cc::SingleReleaseCallback::Create(
775 base::Bind(ReturnMailbox, &callback3_run)), 775 base::Bind(ReturnMailbox, &callback3_run)),
776 gfx::Size(10, 10)); 776 gfx::Size(10, 10));
777 777
778 EXPECT_NE(before_layer, l1->cc_layer_for_testing()); 778 EXPECT_NE(before_layer, l1->cc_layer_for_testing());
779 779
780 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin()); 780 EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin());
781 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent()); 781 EXPECT_TRUE(l1->cc_layer_for_testing()->DrawsContent());
782 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque()); 782 EXPECT_TRUE(l1->cc_layer_for_testing()->contents_opaque());
783 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface()); 783 EXPECT_TRUE(l1->cc_layer_for_testing()->force_render_surface());
784 EXPECT_TRUE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 784 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
785 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds()); 785 EXPECT_EQ(gfx::Size(4, 5), l1->cc_layer_for_testing()->bounds());
786 EXPECT_FALSE(callback3_run); 786 EXPECT_FALSE(callback3_run);
787 787
788 // Release the on |l1| mailbox to clean up the test. 788 // Release the on |l1| mailbox to clean up the test.
789 l1->SetShowSolidColorContent(); 789 l1->SetShowSolidColorContent();
790 } 790 }
791 791
792 // Various visibile/drawn assertions. 792 // Various visibile/drawn assertions.
793 TEST_F(LayerWithNullDelegateTest, Visibility) { 793 TEST_F(LayerWithNullDelegateTest, Visibility) {
794 scoped_ptr<Layer> l1(new Layer(LAYER_TEXTURED)); 794 scoped_ptr<Layer> l1(new Layer(LAYER_TEXTURED));
795 scoped_ptr<Layer> l2(new Layer(LAYER_TEXTURED)); 795 scoped_ptr<Layer> l2(new Layer(LAYER_TEXTURED));
796 scoped_ptr<Layer> l3(new Layer(LAYER_TEXTURED)); 796 scoped_ptr<Layer> l3(new Layer(LAYER_TEXTURED));
797 l1->Add(l2.get()); 797 l1->Add(l2.get());
798 l2->Add(l3.get()); 798 l2->Add(l3.get());
799 799
800 NullLayerDelegate delegate; 800 NullLayerDelegate delegate;
801 l1->set_delegate(&delegate); 801 l1->set_delegate(&delegate);
802 l2->set_delegate(&delegate); 802 l2->set_delegate(&delegate);
803 l3->set_delegate(&delegate); 803 l3->set_delegate(&delegate);
804 804
805 // Layers should initially be drawn. 805 // Layers should initially be drawn.
806 EXPECT_TRUE(l1->IsDrawn()); 806 EXPECT_TRUE(l1->IsDrawn());
807 EXPECT_TRUE(l2->IsDrawn()); 807 EXPECT_TRUE(l2->IsDrawn());
808 EXPECT_TRUE(l3->IsDrawn()); 808 EXPECT_TRUE(l3->IsDrawn());
809 EXPECT_FALSE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 809 EXPECT_NE(l1->cc_layer_for_testing()->opacity(), 0.f);
810 EXPECT_FALSE(l2->cc_layer_for_testing()->hide_layer_and_subtree()); 810 EXPECT_NE(l2->cc_layer_for_testing()->opacity(), 0.f);
811 EXPECT_FALSE(l3->cc_layer_for_testing()->hide_layer_and_subtree()); 811 EXPECT_NE(l3->cc_layer_for_testing()->opacity(), 0.f);
812 812
813 compositor()->SetRootLayer(l1.get()); 813 compositor()->SetRootLayer(l1.get());
814 814
815 Draw(); 815 Draw();
816 816
817 l1->SetVisible(false); 817 l1->SetVisible(false);
818 EXPECT_FALSE(l1->IsDrawn()); 818 EXPECT_FALSE(l1->IsDrawn());
819 EXPECT_FALSE(l2->IsDrawn()); 819 EXPECT_FALSE(l2->IsDrawn());
820 EXPECT_FALSE(l3->IsDrawn()); 820 EXPECT_FALSE(l3->IsDrawn());
821 EXPECT_TRUE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 821 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
822 EXPECT_FALSE(l2->cc_layer_for_testing()->hide_layer_and_subtree()); 822 EXPECT_NE(l2->cc_layer_for_testing()->opacity(), 0.f);
823 EXPECT_FALSE(l3->cc_layer_for_testing()->hide_layer_and_subtree()); 823 EXPECT_NE(l3->cc_layer_for_testing()->opacity(), 0.f);
824 824
825 l3->SetVisible(false); 825 l3->SetVisible(false);
826 EXPECT_FALSE(l1->IsDrawn()); 826 EXPECT_FALSE(l1->IsDrawn());
827 EXPECT_FALSE(l2->IsDrawn()); 827 EXPECT_FALSE(l2->IsDrawn());
828 EXPECT_FALSE(l3->IsDrawn()); 828 EXPECT_FALSE(l3->IsDrawn());
829 EXPECT_TRUE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 829 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
830 EXPECT_FALSE(l2->cc_layer_for_testing()->hide_layer_and_subtree()); 830 EXPECT_NE(l2->cc_layer_for_testing()->opacity(), 0.f);
831 EXPECT_TRUE(l3->cc_layer_for_testing()->hide_layer_and_subtree()); 831 EXPECT_EQ(l3->cc_layer_for_testing()->opacity(), 0.f);
832 832
833 l1->SetVisible(true); 833 l1->SetVisible(true);
834 EXPECT_TRUE(l1->IsDrawn()); 834 EXPECT_TRUE(l1->IsDrawn());
835 EXPECT_TRUE(l2->IsDrawn()); 835 EXPECT_TRUE(l2->IsDrawn());
836 EXPECT_FALSE(l3->IsDrawn()); 836 EXPECT_FALSE(l3->IsDrawn());
837 EXPECT_FALSE(l1->cc_layer_for_testing()->hide_layer_and_subtree()); 837 EXPECT_NE(l1->cc_layer_for_testing()->opacity(), 0.f);
838 EXPECT_FALSE(l2->cc_layer_for_testing()->hide_layer_and_subtree()); 838 EXPECT_NE(l2->cc_layer_for_testing()->opacity(), 0.f);
839 EXPECT_TRUE(l3->cc_layer_for_testing()->hide_layer_and_subtree()); 839 EXPECT_EQ(l3->cc_layer_for_testing()->opacity(), 0.f);
840 }
841
842 TEST_F(LayerWithNullDelegateTest, OpacityOfCCLayer) {
weiliangc 2016/01/19 21:03:08 Test names usually is description of what behavior
jaydasika 2016/01/19 22:10:36 Done.
843 scoped_ptr<Layer> l1(new Layer(LAYER_TEXTURED));
844
845 NullLayerDelegate delegate;
846 l1->set_delegate(&delegate);
847
848 // Initially, the layer should be fully opaque.
849 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 1.f);
850
851 compositor()->SetRootLayer(l1.get());
852
853 Draw();
854
855 // When a layer is invisble, the corresponding cc_layer should be completely
856 // transparent, but the ui layer should store the original opacity of cc
857 // layer.
858 l1->SetVisible(false);
859 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
860 EXPECT_EQ(l1->opacity(), 1.f);
861
862 // Any changes to opacity when the layer is invisble is cached by the ui
863 // layer and set on the corresponding cc layer only when it becomes visible.
864 l1->SetOpacity(0.5f);
865 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
866 EXPECT_EQ(l1->opacity(), 0.5f);
867 l1->SetVisible(true);
868 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.5f);
869
870 // The original opacity should be restored when invisible layer becomes
871 // visible.
872 l1->SetOpacity(0.2f);
873 l1->SetVisible(false);
874 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.f);
875 l1->SetVisible(true);
876 EXPECT_EQ(l1->cc_layer_for_testing()->opacity(), 0.2f);
840 } 877 }
841 878
842 // Checks that stacking-related methods behave as advertised. 879 // Checks that stacking-related methods behave as advertised.
843 TEST_F(LayerWithNullDelegateTest, Stacking) { 880 TEST_F(LayerWithNullDelegateTest, Stacking) {
844 scoped_ptr<Layer> root(new Layer(LAYER_NOT_DRAWN)); 881 scoped_ptr<Layer> root(new Layer(LAYER_NOT_DRAWN));
845 scoped_ptr<Layer> l1(new Layer(LAYER_TEXTURED)); 882 scoped_ptr<Layer> l1(new Layer(LAYER_TEXTURED));
846 scoped_ptr<Layer> l2(new Layer(LAYER_TEXTURED)); 883 scoped_ptr<Layer> l2(new Layer(LAYER_TEXTURED));
847 scoped_ptr<Layer> l3(new Layer(LAYER_TEXTURED)); 884 scoped_ptr<Layer> l3(new Layer(LAYER_TEXTURED));
848 l1->set_name("1"); 885 l1->set_name("1");
849 l2->set_name("2"); 886 l2->set_name("2");
(...skipping 1028 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 root->SetOpacity(0.5f); 1915 root->SetOpacity(0.5f);
1879 WaitForSwap(); 1916 WaitForSwap();
1880 EXPECT_EQ(1u, animation_observer.animation_step_count()); 1917 EXPECT_EQ(1u, animation_observer.animation_step_count());
1881 1918
1882 EXPECT_FALSE(animation_observer.shutdown()); 1919 EXPECT_FALSE(animation_observer.shutdown());
1883 ResetCompositor(); 1920 ResetCompositor();
1884 EXPECT_TRUE(animation_observer.shutdown()); 1921 EXPECT_TRUE(animation_observer.shutdown());
1885 } 1922 }
1886 1923
1887 } // namespace ui 1924 } // namespace ui
OLDNEW
« cc/trees/property_tree_builder.cc ('K') | « ui/compositor/layer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698