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

Side by Side Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 260963008: Fixing crash in PictureLayerImpl::MarkVisibleResourcesAsRequired when low-res tiles are disabled (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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/layers/picture_layer_impl.cc ('k') | cc/test/fake_picture_layer_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 EXPECT_LT(low_res_factor, 1.f); 696 EXPECT_LT(low_res_factor, 1.f);
697 697
698 pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale 698 pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale
699 1.7f, // device scale 699 1.7f, // device scale
700 3.2f, // page scale 700 3.2f, // page scale
701 1.f, // maximum animation scale 701 1.f, // maximum animation scale
702 false, 702 false,
703 &result_scale_x, 703 &result_scale_x,
704 &result_scale_y, 704 &result_scale_y,
705 &result_bounds); 705 &result_bounds);
706 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); 706 ASSERT_EQ(
707 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
enne (OOO) 2014/05/02 17:03:16 Just make the test set the settings appropriately
Sergey 2014/05/07 02:34:25 Done.
708 pending_layer_->tilings()->num_tilings());
707 EXPECT_FLOAT_EQ( 709 EXPECT_FLOAT_EQ(
708 1.3f, 710 1.3f,
709 pending_layer_->tilings()->tiling_at(0)->contents_scale()); 711 pending_layer_->tilings()->tiling_at(0)->contents_scale());
710 EXPECT_FLOAT_EQ( 712 if (host_impl_.settings().create_low_res_tiling)
711 1.3f * low_res_factor, 713 EXPECT_FLOAT_EQ(
712 pending_layer_->tilings()->tiling_at(1)->contents_scale()); 714 1.3f * low_res_factor,
715 pending_layer_->tilings()->tiling_at(1)->contents_scale());
713 716
714 // If we change the layer's CSS scale factor, then we should not get new 717 // If we change the layer's CSS scale factor, then we should not get new
715 // tilings. 718 // tilings.
716 pending_layer_->CalculateContentsScale(1.8f, // ideal contents scale 719 pending_layer_->CalculateContentsScale(1.8f, // ideal contents scale
717 1.7f, // device scale 720 1.7f, // device scale
718 3.2f, // page scale 721 3.2f, // page scale
719 1.f, // maximum animation scale 722 1.f, // maximum animation scale
720 false, 723 false,
721 &result_scale_x, 724 &result_scale_x,
722 &result_scale_y, 725 &result_scale_y,
723 &result_bounds); 726 &result_bounds);
724 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); 727 ASSERT_EQ(
728 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
729 pending_layer_->tilings()->num_tilings());
725 EXPECT_FLOAT_EQ( 730 EXPECT_FLOAT_EQ(
726 1.3f, 731 1.3f,
727 pending_layer_->tilings()->tiling_at(0)->contents_scale()); 732 pending_layer_->tilings()->tiling_at(0)->contents_scale());
728 EXPECT_FLOAT_EQ( 733 if (host_impl_.settings().create_low_res_tiling)
729 1.3f * low_res_factor, 734 EXPECT_FLOAT_EQ(
730 pending_layer_->tilings()->tiling_at(1)->contents_scale()); 735 1.3f * low_res_factor,
736 pending_layer_->tilings()->tiling_at(1)->contents_scale());
731 737
732 // If we change the page scale factor, then we should get new tilings. 738 // If we change the page scale factor, then we should get new tilings.
733 pending_layer_->CalculateContentsScale(1.8f, // ideal contents scale 739 pending_layer_->CalculateContentsScale(1.8f, // ideal contents scale
734 1.7f, // device scale 740 1.7f, // device scale
735 2.2f, // page scale 741 2.2f, // page scale
736 1.f, // maximum animation scale 742 1.f, // maximum animation scale
737 false, 743 false,
738 &result_scale_x, 744 &result_scale_x,
739 &result_scale_y, 745 &result_scale_y,
740 &result_bounds); 746 &result_bounds);
741 ASSERT_EQ(4u, pending_layer_->tilings()->num_tilings()); 747 ASSERT_EQ(
748 host_impl_.settings().create_low_res_tiling ? 4u : 2u,
749 pending_layer_->tilings()->num_tilings());
742 EXPECT_FLOAT_EQ( 750 EXPECT_FLOAT_EQ(
743 1.8f, 751 1.8f,
744 pending_layer_->tilings()->tiling_at(0)->contents_scale()); 752 pending_layer_->tilings()->tiling_at(0)->contents_scale());
745 EXPECT_FLOAT_EQ( 753 if (host_impl_.settings().create_low_res_tiling)
746 1.8f * low_res_factor, 754 EXPECT_FLOAT_EQ(
747 pending_layer_->tilings()->tiling_at(2)->contents_scale()); 755 1.8f * low_res_factor,
756 pending_layer_->tilings()->tiling_at(2)->contents_scale());
748 757
749 // If we change the device scale factor, then we should get new tilings. 758 // If we change the device scale factor, then we should get new tilings.
750 pending_layer_->CalculateContentsScale(1.9f, // ideal contents scale 759 pending_layer_->CalculateContentsScale(1.9f, // ideal contents scale
751 1.4f, // device scale 760 1.4f, // device scale
752 2.2f, // page scale 761 2.2f, // page scale
753 1.f, // maximum animation scale 762 1.f, // maximum animation scale
754 false, 763 false,
755 &result_scale_x, 764 &result_scale_x,
756 &result_scale_y, 765 &result_scale_y,
757 &result_bounds); 766 &result_bounds);
758 ASSERT_EQ(6u, pending_layer_->tilings()->num_tilings()); 767 ASSERT_EQ(
768 host_impl_.settings().create_low_res_tiling ? 6u : 3u,
769 pending_layer_->tilings()->num_tilings());
759 EXPECT_FLOAT_EQ( 770 EXPECT_FLOAT_EQ(
760 1.9f, 771 1.9f,
761 pending_layer_->tilings()->tiling_at(0)->contents_scale()); 772 pending_layer_->tilings()->tiling_at(0)->contents_scale());
762 EXPECT_FLOAT_EQ( 773 if (host_impl_.settings().create_low_res_tiling)
763 1.9f * low_res_factor, 774 EXPECT_FLOAT_EQ(
764 pending_layer_->tilings()->tiling_at(3)->contents_scale()); 775 1.9f * low_res_factor,
776 pending_layer_->tilings()->tiling_at(3)->contents_scale());
765 777
766 // If we change the device scale factor, but end up at the same total scale 778 // If we change the device scale factor, but end up at the same total scale
767 // factor somehow, then we don't get new tilings. 779 // factor somehow, then we don't get new tilings.
768 pending_layer_->CalculateContentsScale(1.9f, // ideal contents scale 780 pending_layer_->CalculateContentsScale(1.9f, // ideal contents scale
769 2.2f, // device scale 781 2.2f, // device scale
770 1.4f, // page scale 782 1.4f, // page scale
771 1.f, // maximum animation scale 783 1.f, // maximum animation scale
772 false, 784 false,
773 &result_scale_x, 785 &result_scale_x,
774 &result_scale_y, 786 &result_scale_y,
775 &result_bounds); 787 &result_bounds);
776 ASSERT_EQ(6u, pending_layer_->tilings()->num_tilings()); 788 ASSERT_EQ(
789 host_impl_.settings().create_low_res_tiling ? 6u : 3u,
790 pending_layer_->tilings()->num_tilings());
777 EXPECT_FLOAT_EQ( 791 EXPECT_FLOAT_EQ(
778 1.9f, 792 1.9f,
779 pending_layer_->tilings()->tiling_at(0)->contents_scale()); 793 pending_layer_->tilings()->tiling_at(0)->contents_scale());
780 EXPECT_FLOAT_EQ( 794 if (host_impl_.settings().create_low_res_tiling)
781 1.9f * low_res_factor, 795 EXPECT_FLOAT_EQ(
782 pending_layer_->tilings()->tiling_at(3)->contents_scale()); 796 1.9f * low_res_factor,
797 pending_layer_->tilings()->tiling_at(3)->contents_scale());
783 } 798 }
784 799
785 TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) { 800 TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) {
786 // This test makes sure that if a layer can have tilings, then a commit makes 801 // This test makes sure that if a layer can have tilings, then a commit makes
787 // it not able to have tilings (empty size), and then a future commit that 802 // it not able to have tilings (empty size), and then a future commit that
788 // makes it valid again should be able to create tilings. 803 // makes it valid again should be able to create tilings.
789 gfx::Size tile_size(400, 400); 804 gfx::Size tile_size(400, 400);
790 gfx::Size layer_bounds(1300, 1900); 805 gfx::Size layer_bounds(1300, 1900);
791 806
792 scoped_refptr<FakePicturePileImpl> empty_pile = 807 scoped_refptr<FakePicturePileImpl> empty_pile =
(...skipping 14 matching lines...) Expand all
807 822
808 SetupPendingTree(valid_pile); 823 SetupPendingTree(valid_pile);
809 pending_layer_->CalculateContentsScale(high_res_scale, 824 pending_layer_->CalculateContentsScale(high_res_scale,
810 device_scale, 825 device_scale,
811 page_scale, 826 page_scale,
812 maximum_animation_scale, 827 maximum_animation_scale,
813 false, 828 false,
814 &result_scale_x, 829 &result_scale_x,
815 &result_scale_y, 830 &result_scale_y,
816 &result_bounds); 831 &result_bounds);
817 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); 832 ASSERT_EQ(
833 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
834 pending_layer_->tilings()->num_tilings());
818 EXPECT_FLOAT_EQ(high_res_scale, 835 EXPECT_FLOAT_EQ(high_res_scale,
819 pending_layer_->HighResTiling()->contents_scale()); 836 pending_layer_->HighResTiling()->contents_scale());
820 EXPECT_FLOAT_EQ(low_res_scale, 837 if (host_impl_.settings().create_low_res_tiling)
821 pending_layer_->LowResTiling()->contents_scale()); 838 EXPECT_FLOAT_EQ(low_res_scale,
839 pending_layer_->LowResTiling()->contents_scale());
822 840
823 ActivateTree(); 841 ActivateTree();
824 SetupPendingTree(empty_pile); 842 SetupPendingTree(empty_pile);
825 pending_layer_->CalculateContentsScale(high_res_scale, 843 pending_layer_->CalculateContentsScale(high_res_scale,
826 device_scale, 844 device_scale,
827 page_scale, 845 page_scale,
828 maximum_animation_scale, 846 maximum_animation_scale,
829 false, 847 false,
830 &result_scale_x, 848 &result_scale_x,
831 &result_scale_y, 849 &result_scale_y,
832 &result_bounds); 850 &result_bounds);
833 ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); 851 ASSERT_EQ(
852 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
853 active_layer_->tilings()->num_tilings());
834 ASSERT_EQ(0u, pending_layer_->tilings()->num_tilings()); 854 ASSERT_EQ(0u, pending_layer_->tilings()->num_tilings());
835 855
836 ActivateTree(); 856 ActivateTree();
837 active_layer_->CalculateContentsScale(high_res_scale, 857 active_layer_->CalculateContentsScale(high_res_scale,
838 device_scale, 858 device_scale,
839 page_scale, 859 page_scale,
840 maximum_animation_scale, 860 maximum_animation_scale,
841 false, 861 false,
842 &result_scale_x, 862 &result_scale_x,
843 &result_scale_y, 863 &result_scale_y,
844 &result_bounds); 864 &result_bounds);
845 ASSERT_EQ(0u, active_layer_->tilings()->num_tilings()); 865 ASSERT_EQ(0u, active_layer_->tilings()->num_tilings());
846 866
847 SetupPendingTree(valid_pile); 867 SetupPendingTree(valid_pile);
848 pending_layer_->CalculateContentsScale(high_res_scale, 868 pending_layer_->CalculateContentsScale(high_res_scale,
849 device_scale, 869 device_scale,
850 page_scale, 870 page_scale,
851 maximum_animation_scale, 871 maximum_animation_scale,
852 false, 872 false,
853 &result_scale_x, 873 &result_scale_x,
854 &result_scale_y, 874 &result_scale_y,
855 &result_bounds); 875 &result_bounds);
856 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); 876 ASSERT_EQ(
877 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
878 pending_layer_->tilings()->num_tilings());
857 ASSERT_EQ(0u, active_layer_->tilings()->num_tilings()); 879 ASSERT_EQ(0u, active_layer_->tilings()->num_tilings());
858 EXPECT_FLOAT_EQ(high_res_scale, 880 EXPECT_FLOAT_EQ(high_res_scale,
859 pending_layer_->HighResTiling()->contents_scale()); 881 pending_layer_->HighResTiling()->contents_scale());
860 EXPECT_FLOAT_EQ(low_res_scale, 882 if (host_impl_.settings().create_low_res_tiling)
861 pending_layer_->LowResTiling()->contents_scale()); 883 EXPECT_FLOAT_EQ(low_res_scale,
884 pending_layer_->LowResTiling()->contents_scale());
862 } 885 }
863 886
864 TEST_F(PictureLayerImplTest, ZoomOutCrash) { 887 TEST_F(PictureLayerImplTest, ZoomOutCrash) {
865 gfx::Size tile_size(400, 400); 888 gfx::Size tile_size(400, 400);
866 gfx::Size layer_bounds(1300, 1900); 889 gfx::Size layer_bounds(1300, 1900);
867 890
868 // Set up the high and low res tilings before pinch zoom. 891 // Set up the high and low res tilings before pinch zoom.
869 scoped_refptr<FakePicturePileImpl> pending_pile = 892 scoped_refptr<FakePicturePileImpl> pending_pile =
870 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 893 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
871 scoped_refptr<FakePicturePileImpl> active_pile = 894 scoped_refptr<FakePicturePileImpl> active_pile =
(...skipping 15 matching lines...) Expand all
887 scoped_refptr<FakePicturePileImpl> pending_pile = 910 scoped_refptr<FakePicturePileImpl> pending_pile =
888 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 911 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
889 scoped_refptr<FakePicturePileImpl> active_pile = 912 scoped_refptr<FakePicturePileImpl> active_pile =
890 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 913 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
891 914
892 // Set up the high and low res tilings before pinch zoom. 915 // Set up the high and low res tilings before pinch zoom.
893 SetupTrees(pending_pile, active_pile); 916 SetupTrees(pending_pile, active_pile);
894 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); 917 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings());
895 SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, 1.0f, false); 918 SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, 1.0f, false);
896 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; 919 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor;
897 EXPECT_EQ(2u, active_layer_->tilings()->num_tilings()); 920 EXPECT_EQ(
921 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
922 active_layer_->tilings()->num_tilings());
898 EXPECT_FLOAT_EQ( 923 EXPECT_FLOAT_EQ(
899 1.0f, 924 1.0f,
900 active_layer_->tilings()->tiling_at(0)->contents_scale()); 925 active_layer_->tilings()->tiling_at(0)->contents_scale());
901 EXPECT_FLOAT_EQ( 926 if (host_impl_.settings().create_low_res_tiling)
902 1.0f * low_res_factor, 927 EXPECT_FLOAT_EQ(
903 active_layer_->tilings()->tiling_at(1)->contents_scale()); 928 1.0f * low_res_factor,
929 active_layer_->tilings()->tiling_at(1)->contents_scale());
904 930
905 // Start a pinch gesture. 931 // Start a pinch gesture.
906 host_impl_.PinchGestureBegin(); 932 host_impl_.PinchGestureBegin();
907 933
908 // Zoom out by a small amount. We should create a tiling at half 934 // Zoom out by a small amount. We should create a tiling at half
909 // the scale (1/kMaxScaleRatioDuringPinch). 935 // the scale (1/kMaxScaleRatioDuringPinch).
910 SetContentsScaleOnBothLayers(0.90f, 1.0f, 0.9f, 1.0f, false); 936 SetContentsScaleOnBothLayers(0.90f, 1.0f, 0.9f, 1.0f, false);
911 EXPECT_EQ(3u, active_layer_->tilings()->num_tilings()); 937 EXPECT_EQ(
938 host_impl_.settings().create_low_res_tiling ? 3u : 2u,
939 active_layer_->tilings()->num_tilings());
912 EXPECT_FLOAT_EQ( 940 EXPECT_FLOAT_EQ(
913 1.0f, 941 1.0f,
914 active_layer_->tilings()->tiling_at(0)->contents_scale()); 942 active_layer_->tilings()->tiling_at(0)->contents_scale());
915 EXPECT_FLOAT_EQ( 943 EXPECT_FLOAT_EQ(
916 0.5f, 944 0.5f,
917 active_layer_->tilings()->tiling_at(1)->contents_scale()); 945 active_layer_->tilings()->tiling_at(1)->contents_scale());
918 EXPECT_FLOAT_EQ( 946 if (host_impl_.settings().create_low_res_tiling)
919 1.0f * low_res_factor, 947 EXPECT_FLOAT_EQ(
920 active_layer_->tilings()->tiling_at(2)->contents_scale()); 948 1.0f * low_res_factor,
949 active_layer_->tilings()->tiling_at(2)->contents_scale());
921 950
922 // Zoom out further, close to our low-res scale factor. We should 951 // Zoom out further, close to our low-res scale factor. We should
923 // use that tiling as high-res, and not create a new tiling. 952 // use that tiling as high-res, and not create a new tiling.
924 SetContentsScaleOnBothLayers( 953 SetContentsScaleOnBothLayers(
925 low_res_factor, 1.0f, low_res_factor, 1.0f, false); 954 low_res_factor, 1.0f, low_res_factor, 1.0f, false);
926 EXPECT_EQ(3u, active_layer_->tilings()->num_tilings()); 955 EXPECT_EQ(3u, active_layer_->tilings()->num_tilings());
927 956
928 // Zoom in a lot now. Since we increase by increments of 957 // Zoom in a lot now. Since we increase by increments of
929 // kMaxScaleRatioDuringPinch, this will first use 0.5, then 1.0 958 // kMaxScaleRatioDuringPinch, this will first use 0.5, then 1.0
930 // and then finally create a new tiling at 2.0. 959 // and then finally create a new tiling at 2.0.
(...skipping 24 matching lines...) Expand all
955 SetupTrees(pending_pile, active_pile); 984 SetupTrees(pending_pile, active_pile);
956 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); 985 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings());
957 986
958 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; 987 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor;
959 EXPECT_LT(low_res_factor, 1.f); 988 EXPECT_LT(low_res_factor, 1.f);
960 989
961 float device_scale = 1.7f; 990 float device_scale = 1.7f;
962 float page_scale = 3.2f; 991 float page_scale = 3.2f;
963 992
964 SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, 1.f, false); 993 SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, 1.f, false);
965 ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); 994 ASSERT_EQ(
995 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
996 active_layer_->tilings()->num_tilings());
966 997
967 // We only have ideal tilings, so they aren't removed. 998 // We only have ideal tilings, so they aren't removed.
968 used_tilings.clear(); 999 used_tilings.clear();
969 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1000 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
970 ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); 1001 ASSERT_EQ(
1002 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1003 active_layer_->tilings()->num_tilings());
971 1004
972 // Changing the ideal but not creating new tilings. 1005 // Changing the ideal but not creating new tilings.
973 SetContentsScaleOnBothLayers(1.5f, device_scale, page_scale, 1.f, false); 1006 SetContentsScaleOnBothLayers(1.5f, device_scale, page_scale, 1.f, false);
974 ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); 1007 ASSERT_EQ(
1008 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1009 active_layer_->tilings()->num_tilings());
975 1010
976 // The tilings are still our target scale, so they aren't removed. 1011 // The tilings are still our target scale, so they aren't removed.
977 used_tilings.clear(); 1012 used_tilings.clear();
978 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1013 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
979 ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); 1014 ASSERT_EQ(
1015 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1016 active_layer_->tilings()->num_tilings());
980 1017
981 // Create a 1.2 scale tiling. Now we have 1.0 and 1.2 tilings. Ideal = 1.2. 1018 // Create a 1.2 scale tiling. Now we have 1.0 and 1.2 tilings. Ideal = 1.2.
982 page_scale = 1.2f; 1019 page_scale = 1.2f;
983 SetContentsScaleOnBothLayers(1.2f, device_scale, page_scale, 1.f, false); 1020 SetContentsScaleOnBothLayers(1.2f, device_scale, page_scale, 1.f, false);
984 ASSERT_EQ(4u, active_layer_->tilings()->num_tilings()); 1021 ASSERT_EQ(
1022 host_impl_.settings().create_low_res_tiling ? 4u : 2u,
1023 active_layer_->tilings()->num_tilings());
985 EXPECT_FLOAT_EQ( 1024 EXPECT_FLOAT_EQ(
986 1.f, 1025 1.f,
987 active_layer_->tilings()->tiling_at(1)->contents_scale()); 1026 active_layer_->tilings()->tiling_at(1)->contents_scale());
988 EXPECT_FLOAT_EQ( 1027 if (host_impl_.settings().create_low_res_tiling)
989 1.f * low_res_factor, 1028 EXPECT_FLOAT_EQ(
990 active_layer_->tilings()->tiling_at(3)->contents_scale()); 1029 1.f * low_res_factor,
1030 active_layer_->tilings()->tiling_at(3)->contents_scale());
991 1031
992 // Mark the non-ideal tilings as used. They won't be removed. 1032 // Mark the non-ideal tilings as used. They won't be removed.
993 used_tilings.clear(); 1033 used_tilings.clear();
994 used_tilings.push_back(active_layer_->tilings()->tiling_at(1)); 1034 used_tilings.push_back(active_layer_->tilings()->tiling_at(1));
995 used_tilings.push_back(active_layer_->tilings()->tiling_at(3)); 1035 used_tilings.push_back(active_layer_->tilings()->tiling_at(3));
996 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1036 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
997 ASSERT_EQ(4u, active_layer_->tilings()->num_tilings()); 1037 ASSERT_EQ(
1038 host_impl_.settings().create_low_res_tiling ? 4u : 2u,
1039 active_layer_->tilings()->num_tilings());
998 1040
999 // Now move the ideal scale to 0.5. Our target stays 1.2. 1041 // Now move the ideal scale to 0.5. Our target stays 1.2.
1000 SetContentsScaleOnBothLayers(0.5f, device_scale, page_scale, 1.f, false); 1042 SetContentsScaleOnBothLayers(0.5f, device_scale, page_scale, 1.f, false);
1001 1043
1002 // The high resolution tiling is between target and ideal, so is not 1044 // The high resolution tiling is between target and ideal, so is not
1003 // removed. The low res tiling for the old ideal=1.0 scale is removed. 1045 // removed. The low res tiling for the old ideal=1.0 scale is removed.
1004 used_tilings.clear(); 1046 used_tilings.clear();
1005 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1047 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
1006 ASSERT_EQ(3u, active_layer_->tilings()->num_tilings()); 1048 ASSERT_EQ(
1049 host_impl_.settings().create_low_res_tiling ? 3u : 2u,
1050 active_layer_->tilings()->num_tilings());
1007 1051
1008 // Now move the ideal scale to 1.0. Our target stays 1.2. 1052 // Now move the ideal scale to 1.0. Our target stays 1.2.
1009 SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, 1.f, false); 1053 SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, 1.f, false);
1010 1054
1011 // All the tilings are between are target and the ideal, so they are not 1055 // All the tilings are between are target and the ideal, so they are not
1012 // removed. 1056 // removed.
1013 used_tilings.clear(); 1057 used_tilings.clear();
1014 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1058 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
1015 ASSERT_EQ(3u, active_layer_->tilings()->num_tilings()); 1059 ASSERT_EQ(
1060 host_impl_.settings().create_low_res_tiling ? 3u : 2u,
1061 active_layer_->tilings()->num_tilings());
1016 1062
1017 // Now move the ideal scale to 1.1 on the active layer. Our target stays 1.2. 1063 // Now move the ideal scale to 1.1 on the active layer. Our target stays 1.2.
1018 active_layer_->CalculateContentsScale(1.1f, 1064 active_layer_->CalculateContentsScale(1.1f,
1019 device_scale, 1065 device_scale,
1020 page_scale, 1066 page_scale,
1021 1.f, 1067 1.f,
1022 false, 1068 false,
1023 &result_scale_x, 1069 &result_scale_x,
1024 &result_scale_y, 1070 &result_scale_y,
1025 &result_bounds); 1071 &result_bounds);
1026 1072
1027 // Because the pending layer's ideal scale is still 1.0, our tilings fall 1073 // Because the pending layer's ideal scale is still 1.0, our tilings fall
1028 // in the range [1.0,1.2] and are kept. 1074 // in the range [1.0,1.2] and are kept.
1029 used_tilings.clear(); 1075 used_tilings.clear();
1030 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1076 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
1031 ASSERT_EQ(3u, active_layer_->tilings()->num_tilings()); 1077 ASSERT_EQ(
1078 host_impl_.settings().create_low_res_tiling ? 3u : 2u,
1079 active_layer_->tilings()->num_tilings());
1032 1080
1033 // Move the ideal scale on the pending layer to 1.1 as well. Our target stays 1081 // Move the ideal scale on the pending layer to 1.1 as well. Our target stays
1034 // 1.2 still. 1082 // 1.2 still.
1035 pending_layer_->CalculateContentsScale(1.1f, 1083 pending_layer_->CalculateContentsScale(1.1f,
1036 device_scale, 1084 device_scale,
1037 page_scale, 1085 page_scale,
1038 1.f, 1086 1.f,
1039 false, 1087 false,
1040 &result_scale_x, 1088 &result_scale_x,
1041 &result_scale_y, 1089 &result_scale_y,
1042 &result_bounds); 1090 &result_bounds);
1043 1091
1044 // Our 1.0 tiling now falls outside the range between our ideal scale and our 1092 // Our 1.0 tiling now falls outside the range between our ideal scale and our
1045 // target raster scale. But it is in our used tilings set, so nothing is 1093 // target raster scale. But it is in our used tilings set, so nothing is
1046 // deleted. 1094 // deleted.
1047 used_tilings.clear(); 1095 used_tilings.clear();
1048 used_tilings.push_back(active_layer_->tilings()->tiling_at(1)); 1096 used_tilings.push_back(active_layer_->tilings()->tiling_at(1));
1049 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1097 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
1050 ASSERT_EQ(3u, active_layer_->tilings()->num_tilings()); 1098 ASSERT_EQ(
1099 host_impl_.settings().create_low_res_tiling ? 3u : 2u,
1100 active_layer_->tilings()->num_tilings());
1051 1101
1052 // If we remove it from our used tilings set, it is outside the range to keep 1102 // If we remove it from our used tilings set, it is outside the range to keep
1053 // so it is deleted. 1103 // so it is deleted.
1054 used_tilings.clear(); 1104 used_tilings.clear();
1055 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings); 1105 active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
1056 ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); 1106 ASSERT_EQ(
1107 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1108 active_layer_->tilings()->num_tilings());
1057 } 1109 }
1058 1110
1059 #define EXPECT_BOTH_EQ(expression, x) \ 1111 #define EXPECT_BOTH_EQ(expression, x) \
1060 do { \ 1112 do { \
1061 EXPECT_EQ(pending_layer_->expression, x); \ 1113 EXPECT_EQ(pending_layer_->expression, x); \
1062 EXPECT_EQ(active_layer_->expression, x); \ 1114 EXPECT_EQ(active_layer_->expression, x); \
1063 } while (false) 1115 } while (false)
1064 1116
1065 TEST_F(PictureLayerImplTest, DontAddLowResDuringAnimation) { 1117 TEST_F(PictureLayerImplTest, DontAddLowResDuringAnimation) {
1066 // Make sure this layer covers multiple tiles, since otherwise low 1118 // Make sure this layer covers multiple tiles, since otherwise low
(...skipping 21 matching lines...) Expand all
1088 EXPECT_BOTH_EQ(num_tilings(), 1u); 1140 EXPECT_BOTH_EQ(num_tilings(), 1u);
1089 1141
1090 // Stop animating, low res gets created. 1142 // Stop animating, low res gets created.
1091 animating_transform = false; 1143 animating_transform = false;
1092 SetContentsScaleOnBothLayers(contents_scale, 1144 SetContentsScaleOnBothLayers(contents_scale,
1093 device_scale, 1145 device_scale,
1094 page_scale, 1146 page_scale,
1095 maximum_animation_scale, 1147 maximum_animation_scale,
1096 animating_transform); 1148 animating_transform);
1097 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f); 1149 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f);
1098 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), low_res_factor); 1150 if (host_impl_.settings().create_low_res_tiling)
1099 EXPECT_BOTH_EQ(num_tilings(), 2u); 1151 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), low_res_factor);
1152 EXPECT_BOTH_EQ(
1153 num_tilings(),
1154 host_impl_.settings().create_low_res_tiling ? 2u : 1u);
1100 1155
1101 // Page scale animation, new high res, but not new low res because animating. 1156 // Page scale animation, new high res, but not new low res because animating.
1102 contents_scale = 2.f; 1157 contents_scale = 2.f;
1103 page_scale = 2.f; 1158 page_scale = 2.f;
1104 animating_transform = true; 1159 animating_transform = true;
1105 SetContentsScaleOnBothLayers(contents_scale, 1160 SetContentsScaleOnBothLayers(contents_scale,
1106 device_scale, 1161 device_scale,
1107 page_scale, 1162 page_scale,
1108 maximum_animation_scale, 1163 maximum_animation_scale,
1109 animating_transform); 1164 animating_transform);
1110 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); 1165 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
1111 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), low_res_factor); 1166 if (host_impl_.settings().create_low_res_tiling)
1112 EXPECT_BOTH_EQ(num_tilings(), 3u); 1167 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), low_res_factor);
1168 EXPECT_BOTH_EQ(
1169 num_tilings(),
1170 host_impl_.settings().create_low_res_tiling ? 3u : 2u);
1113 1171
1114 // Stop animating, new low res gets created for final page scale. 1172 // Stop animating, new low res gets created for final page scale.
1115 animating_transform = false; 1173 animating_transform = false;
1116 SetContentsScaleOnBothLayers(contents_scale, 1174 SetContentsScaleOnBothLayers(contents_scale,
1117 device_scale, 1175 device_scale,
1118 page_scale, 1176 page_scale,
1119 maximum_animation_scale, 1177 maximum_animation_scale,
1120 animating_transform); 1178 animating_transform);
1121 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); 1179 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f);
1122 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), 2.f * low_res_factor); 1180 if (host_impl_.settings().create_low_res_tiling)
1123 EXPECT_BOTH_EQ(num_tilings(), 4u); 1181 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), 2.f * low_res_factor);
1182 EXPECT_BOTH_EQ(
1183 num_tilings(),
1184 host_impl_.settings().create_low_res_tiling ? 4u : 2u);
1124 } 1185 }
1125 1186
1126 TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) { 1187 TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) {
1127 gfx::Size tile_size(host_impl_.settings().default_tile_size); 1188 gfx::Size tile_size(host_impl_.settings().default_tile_size);
1128 SetupDefaultTrees(tile_size); 1189 SetupDefaultTrees(tile_size);
1129 1190
1130 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; 1191 float low_res_factor = host_impl_.settings().low_res_contents_scale_factor;
1131 float device_scale = 1.f; 1192 float device_scale = 1.f;
1132 float page_scale = 1.f; 1193 float page_scale = 1.f;
1133 float maximum_animation_scale = 1.f; 1194 float maximum_animation_scale = 1.f;
(...skipping 25 matching lines...) Expand all
1159 1220
1160 // Any content bounds that would create more than one tile will 1221 // Any content bounds that would create more than one tile will
1161 // generate a low res tiling. 1222 // generate a low res tiling.
1162 contents_scale = 2.5f; 1223 contents_scale = 2.5f;
1163 SetContentsScaleOnBothLayers(contents_scale, 1224 SetContentsScaleOnBothLayers(contents_scale,
1164 device_scale, 1225 device_scale,
1165 page_scale, 1226 page_scale,
1166 maximum_animation_scale, 1227 maximum_animation_scale,
1167 animating_transform); 1228 animating_transform);
1168 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale); 1229 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale);
1169 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), 1230 if (host_impl_.settings().create_low_res_tiling)
1170 contents_scale * low_res_factor); 1231 EXPECT_BOTH_EQ(LowResTiling()->contents_scale(),
1171 EXPECT_BOTH_EQ(num_tilings(), 2u); 1232 contents_scale * low_res_factor);
1233 EXPECT_BOTH_EQ(
1234 num_tilings(),
1235 host_impl_.settings().create_low_res_tiling ? 2u : 1u);
1172 1236
1173 ResetTilingsAndRasterScales(); 1237 ResetTilingsAndRasterScales();
1174 1238
1175 // Mask layers dont create low res since they always fit on one tile. 1239 // Mask layers dont create low res since they always fit on one tile.
1176 pending_layer_->SetIsMask(true); 1240 pending_layer_->SetIsMask(true);
1177 active_layer_->SetIsMask(true); 1241 active_layer_->SetIsMask(true);
1178 SetContentsScaleOnBothLayers(contents_scale, 1242 SetContentsScaleOnBothLayers(contents_scale,
1179 device_scale, 1243 device_scale,
1180 page_scale, 1244 page_scale,
1181 maximum_animation_scale, 1245 maximum_animation_scale,
(...skipping 18 matching lines...) Expand all
1200 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); 1264 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings());
1201 1265
1202 pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale 1266 pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale
1203 2.7f, // device scale 1267 2.7f, // device scale
1204 3.2f, // page scale 1268 3.2f, // page scale
1205 1.f, // maximum animation scale 1269 1.f, // maximum animation scale
1206 false, 1270 false,
1207 &result_scale_x, 1271 &result_scale_x,
1208 &result_scale_y, 1272 &result_scale_y,
1209 &result_bounds); 1273 &result_bounds);
1210 EXPECT_EQ(2u, pending_layer_->tilings()->num_tilings()); 1274 EXPECT_EQ(
1275 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1276 pending_layer_->tilings()->num_tilings());
1211 1277
1212 // All tilings should be removed when losing output surface. 1278 // All tilings should be removed when losing output surface.
1213 active_layer_->ReleaseResources(); 1279 active_layer_->ReleaseResources();
1214 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); 1280 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings());
1215 pending_layer_->ReleaseResources(); 1281 pending_layer_->ReleaseResources();
1216 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); 1282 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings());
1217 1283
1218 // This should create new tilings. 1284 // This should create new tilings.
1219 pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale 1285 pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale
1220 2.7f, // device scale 1286 2.7f, // device scale
1221 3.2f, // page scale 1287 3.2f, // page scale
1222 1.f, // maximum animation scale 1288 1.f, // maximum animation scale
1223 false, 1289 false,
1224 &result_scale_x, 1290 &result_scale_x,
1225 &result_scale_y, 1291 &result_scale_y,
1226 &result_bounds); 1292 &result_bounds);
1227 EXPECT_EQ(2u, pending_layer_->tilings()->num_tilings()); 1293 EXPECT_EQ(
1294 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1295 pending_layer_->tilings()->num_tilings());
1228 } 1296 }
1229 1297
1230 TEST_F(PictureLayerImplTest, ClampTilesToToMaxTileSize) { 1298 TEST_F(PictureLayerImplTest, ClampTilesToToMaxTileSize) {
1231 // The default max tile size is larger than 400x400. 1299 // The default max tile size is larger than 400x400.
1232 gfx::Size tile_size(400, 400); 1300 gfx::Size tile_size(400, 400);
1233 gfx::Size layer_bounds(5000, 5000); 1301 gfx::Size layer_bounds(5000, 5000);
1234 1302
1235 scoped_refptr<FakePicturePileImpl> pending_pile = 1303 scoped_refptr<FakePicturePileImpl> pending_pile =
1236 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 1304 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1237 scoped_refptr<FakePicturePileImpl> active_pile = 1305 scoped_refptr<FakePicturePileImpl> active_pile =
1238 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 1306 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1239 1307
1240 float result_scale_x, result_scale_y; 1308 float result_scale_x, result_scale_y;
1241 gfx::Size result_bounds; 1309 gfx::Size result_bounds;
1242 1310
1243 SetupTrees(pending_pile, active_pile); 1311 SetupTrees(pending_pile, active_pile);
1244 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); 1312 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings());
1245 1313
1246 pending_layer_->CalculateContentsScale(1.f, 1314 pending_layer_->CalculateContentsScale(1.f,
1247 1.f, 1315 1.f,
1248 1.f, 1316 1.f,
1249 1.f, 1317 1.f,
1250 false, 1318 false,
1251 &result_scale_x, 1319 &result_scale_x,
1252 &result_scale_y, 1320 &result_scale_y,
1253 &result_bounds); 1321 &result_bounds);
1254 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); 1322 ASSERT_EQ(
1323 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1324 pending_layer_->tilings()->num_tilings());
1255 1325
1256 pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting(); 1326 pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting();
1257 1327
1258 // The default value. 1328 // The default value.
1259 EXPECT_EQ(gfx::Size(256, 256).ToString(), 1329 EXPECT_EQ(gfx::Size(256, 256).ToString(),
1260 host_impl_.settings().default_tile_size.ToString()); 1330 host_impl_.settings().default_tile_size.ToString());
1261 1331
1262 Tile* tile = pending_layer_->tilings()->tiling_at(0)->AllTilesForTesting()[0]; 1332 Tile* tile = pending_layer_->tilings()->tiling_at(0)->AllTilesForTesting()[0];
1263 EXPECT_EQ(gfx::Size(256, 256).ToString(), 1333 EXPECT_EQ(gfx::Size(256, 256).ToString(),
1264 tile->content_rect().size().ToString()); 1334 tile->content_rect().size().ToString());
1265 1335
1266 pending_layer_->ReleaseResources(); 1336 pending_layer_->ReleaseResources();
1267 1337
1268 // Change the max texture size on the output surface context. 1338 // Change the max texture size on the output surface context.
1269 scoped_ptr<TestWebGraphicsContext3D> context = 1339 scoped_ptr<TestWebGraphicsContext3D> context =
1270 TestWebGraphicsContext3D::Create(); 1340 TestWebGraphicsContext3D::Create();
1271 context->set_max_texture_size(140); 1341 context->set_max_texture_size(140);
1272 host_impl_.DidLoseOutputSurface(); 1342 host_impl_.DidLoseOutputSurface();
1273 host_impl_.InitializeRenderer(FakeOutputSurface::Create3d( 1343 host_impl_.InitializeRenderer(FakeOutputSurface::Create3d(
1274 context.Pass()).PassAs<OutputSurface>()); 1344 context.Pass()).PassAs<OutputSurface>());
1275 1345
1276 pending_layer_->CalculateContentsScale(1.f, 1346 pending_layer_->CalculateContentsScale(1.f,
1277 1.f, 1347 1.f,
1278 1.f, 1348 1.f,
1279 1.f, 1349 1.f,
1280 false, 1350 false,
1281 &result_scale_x, 1351 &result_scale_x,
1282 &result_scale_y, 1352 &result_scale_y,
1283 &result_bounds); 1353 &result_bounds);
1284 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); 1354 ASSERT_EQ(
1355 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1356 pending_layer_->tilings()->num_tilings());
1285 1357
1286 pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting(); 1358 pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting();
1287 1359
1288 // Verify the tiles are not larger than the context's max texture size. 1360 // Verify the tiles are not larger than the context's max texture size.
1289 tile = pending_layer_->tilings()->tiling_at(0)->AllTilesForTesting()[0]; 1361 tile = pending_layer_->tilings()->tiling_at(0)->AllTilesForTesting()[0];
1290 EXPECT_GE(140, tile->content_rect().width()); 1362 EXPECT_GE(140, tile->content_rect().width());
1291 EXPECT_GE(140, tile->content_rect().height()); 1363 EXPECT_GE(140, tile->content_rect().height());
1292 } 1364 }
1293 1365
1294 TEST_F(PictureLayerImplTest, ClampSingleTileToToMaxTileSize) { 1366 TEST_F(PictureLayerImplTest, ClampSingleTileToToMaxTileSize) {
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 } 1542 }
1471 } 1543 }
1472 1544
1473 EXPECT_GT(num_visible, 0); 1545 EXPECT_GT(num_visible, 0);
1474 EXPECT_GT(num_offscreen, 0); 1546 EXPECT_GT(num_offscreen, 0);
1475 } 1547 }
1476 1548
1477 TEST_F(PictureLayerImplTest, HighResRequiredWhenUnsharedActiveAllReady) { 1549 TEST_F(PictureLayerImplTest, HighResRequiredWhenUnsharedActiveAllReady) {
1478 gfx::Size layer_bounds(400, 400); 1550 gfx::Size layer_bounds(400, 400);
1479 gfx::Size tile_size(100, 100); 1551 gfx::Size tile_size(100, 100);
1552
1480 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); 1553 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size);
1481 1554
1482 // No tiles shared. 1555 // No tiles shared.
1483 pending_layer_->set_invalidation(gfx::Rect(layer_bounds)); 1556 pending_layer_->set_invalidation(gfx::Rect(layer_bounds));
1484 1557
1485 CreateHighLowResAndSetAllTilesVisible(); 1558 CreateHighLowResAndSetAllTilesVisible();
1486 1559
1487 active_layer_->SetAllTilesReady(); 1560 active_layer_->SetAllTilesReady();
1488 1561
1489 // No shared tiles and all active tiles ready, so pending can only 1562 // No shared tiles and all active tiles ready, so pending can only
1490 // activate with all high res tiles. 1563 // activate with all high res tiles.
1491 pending_layer_->MarkVisibleResourcesAsRequired(); 1564 pending_layer_->MarkVisibleResourcesAsRequired();
1492 AssertAllTilesRequired(pending_layer_->HighResTiling()); 1565 AssertAllTilesRequired(pending_layer_->HighResTiling());
1493 AssertNoTilesRequired(pending_layer_->LowResTiling()); 1566 if (host_impl_.settings().create_low_res_tiling)
1567 AssertNoTilesRequired(pending_layer_->LowResTiling());
1494 } 1568 }
1495 1569
1496 TEST_F(PictureLayerImplTest, HighResRequiredWhenMissingHighResFlagOn) { 1570 TEST_F(PictureLayerImplTest, HighResRequiredWhenMissingHighResFlagOn) {
1497 gfx::Size layer_bounds(400, 400); 1571 gfx::Size layer_bounds(400, 400);
1498 gfx::Size tile_size(100, 100); 1572 gfx::Size tile_size(100, 100);
1499 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); 1573 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size);
1500 1574
1501 // All tiles shared (no invalidation). 1575 // All tiles shared (no invalidation).
1502 CreateHighLowResAndSetAllTilesVisible(); 1576 CreateHighLowResAndSetAllTilesVisible();
1503 1577
1504 // Verify active tree not ready. 1578 // Verify active tree not ready.
1505 Tile* some_active_tile = 1579 Tile* some_active_tile =
1506 active_layer_->HighResTiling()->AllTilesForTesting()[0]; 1580 active_layer_->HighResTiling()->AllTilesForTesting()[0];
1507 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); 1581 EXPECT_FALSE(some_active_tile->IsReadyToDraw());
1508 1582
1509 // When high res are required, even if the active tree is not ready, 1583 // When high res are required, even if the active tree is not ready,
1510 // the high res tiles must be ready. 1584 // the high res tiles must be ready.
1511 host_impl_.active_tree()->SetRequiresHighResToDraw(); 1585 host_impl_.active_tree()->SetRequiresHighResToDraw();
1512 pending_layer_->MarkVisibleResourcesAsRequired(); 1586 pending_layer_->MarkVisibleResourcesAsRequired();
1513 AssertAllTilesRequired(pending_layer_->HighResTiling()); 1587 AssertAllTilesRequired(pending_layer_->HighResTiling());
1514 AssertNoTilesRequired(pending_layer_->LowResTiling()); 1588 if (host_impl_.settings().create_low_res_tiling)
1589 AssertNoTilesRequired(pending_layer_->LowResTiling());
1515 } 1590 }
1516 1591
1517 TEST_F(PictureLayerImplTest, NothingRequiredIfAllHighResTilesShared) { 1592 TEST_F(PictureLayerImplTest, NothingRequiredIfAllHighResTilesShared) {
1518 gfx::Size layer_bounds(400, 400); 1593 gfx::Size layer_bounds(400, 400);
1519 gfx::Size tile_size(100, 100); 1594 gfx::Size tile_size(100, 100);
1520 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); 1595 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size);
1521 1596
1522 CreateHighLowResAndSetAllTilesVisible(); 1597 CreateHighLowResAndSetAllTilesVisible();
1523 1598
1524 Tile* some_active_tile = 1599 Tile* some_active_tile =
1525 active_layer_->HighResTiling()->AllTilesForTesting()[0]; 1600 active_layer_->HighResTiling()->AllTilesForTesting()[0];
1526 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); 1601 EXPECT_FALSE(some_active_tile->IsReadyToDraw());
1527 1602
1528 // All tiles shared (no invalidation), so even though the active tree's 1603 // All tiles shared (no invalidation), so even though the active tree's
1529 // tiles aren't ready, there is nothing required. 1604 // tiles aren't ready, there is nothing required.
1530 pending_layer_->MarkVisibleResourcesAsRequired(); 1605 pending_layer_->MarkVisibleResourcesAsRequired();
1606 VLOG(0) << "NothingRequiredIfAllHighResTilesShared::AssertNoTilesRequired";
1531 AssertNoTilesRequired(pending_layer_->HighResTiling()); 1607 AssertNoTilesRequired(pending_layer_->HighResTiling());
1532 AssertNoTilesRequired(pending_layer_->LowResTiling()); 1608 if (host_impl_.settings().create_low_res_tiling) {
1609 VLOG(0) << "NothingRequiredIfAllHighResTilesShared::AssertNoTilesRequired -> low-res";
1610 AssertNoTilesRequired(pending_layer_->LowResTiling());
1611 }
1533 } 1612 }
1534 1613
1535 TEST_F(PictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { 1614 TEST_F(PictureLayerImplTest, NothingRequiredIfActiveMissingTiles) {
1536 gfx::Size layer_bounds(400, 400); 1615 gfx::Size layer_bounds(400, 400);
1537 gfx::Size tile_size(100, 100); 1616 gfx::Size tile_size(100, 100);
1538 scoped_refptr<FakePicturePileImpl> pending_pile = 1617 scoped_refptr<FakePicturePileImpl> pending_pile =
1539 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 1618 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1540 // This pile will create tilings, but has no recordings so will not create any 1619 // This pile will create tilings, but has no recordings so will not create any
1541 // tiles. This is attempting to simulate scrolling past the end of recorded 1620 // tiles. This is attempting to simulate scrolling past the end of recorded
1542 // content on the active layer, where the recordings are so far away that 1621 // content on the active layer, where the recordings are so far away that
1543 // no tiles are created. 1622 // no tiles are created.
1544 scoped_refptr<FakePicturePileImpl> active_pile = 1623 scoped_refptr<FakePicturePileImpl> active_pile =
1545 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings( 1624 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings(
1546 tile_size, layer_bounds); 1625 tile_size, layer_bounds);
1547 SetupTrees(pending_pile, active_pile); 1626 SetupTrees(pending_pile, active_pile);
1548 pending_layer_->set_fixed_tile_size(tile_size); 1627 pending_layer_->set_fixed_tile_size(tile_size);
1549 active_layer_->set_fixed_tile_size(tile_size); 1628 active_layer_->set_fixed_tile_size(tile_size);
1550 1629
1551 CreateHighLowResAndSetAllTilesVisible(); 1630 CreateHighLowResAndSetAllTilesVisible();
1552 1631
1553 // Active layer has tilings, but no tiles due to missing recordings. 1632 // Active layer has tilings, but no tiles due to missing recordings.
1554 EXPECT_TRUE(active_layer_->CanHaveTilings()); 1633 EXPECT_TRUE(active_layer_->CanHaveTilings());
1555 EXPECT_EQ(active_layer_->tilings()->num_tilings(), 2u); 1634 EXPECT_EQ(
1635 active_layer_->tilings()->num_tilings(),
1636 host_impl_.settings().create_low_res_tiling ? 2u : 1u);
1556 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); 1637 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u);
1557 1638
1558 // Since the active layer has no tiles at all, the pending layer doesn't 1639 // Since the active layer has no tiles at all, the pending layer doesn't
1559 // need content in order to activate. 1640 // need content in order to activate.
1560 pending_layer_->MarkVisibleResourcesAsRequired(); 1641 pending_layer_->MarkVisibleResourcesAsRequired();
1561 AssertNoTilesRequired(pending_layer_->HighResTiling()); 1642 AssertNoTilesRequired(pending_layer_->HighResTiling());
1562 AssertNoTilesRequired(pending_layer_->LowResTiling()); 1643 if (host_impl_.settings().create_low_res_tiling)
1644 AssertNoTilesRequired(pending_layer_->LowResTiling());
1563 } 1645 }
1564 1646
1565 TEST_F(PictureLayerImplTest, HighResRequiredIfActiveCantHaveTiles) { 1647 TEST_F(PictureLayerImplTest, HighResRequiredIfActiveCantHaveTiles) {
1566 gfx::Size layer_bounds(400, 400); 1648 gfx::Size layer_bounds(400, 400);
1567 gfx::Size tile_size(100, 100); 1649 gfx::Size tile_size(100, 100);
1568 scoped_refptr<FakePicturePileImpl> pending_pile = 1650 scoped_refptr<FakePicturePileImpl> pending_pile =
1569 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 1651 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1570 scoped_refptr<FakePicturePileImpl> active_pile = 1652 scoped_refptr<FakePicturePileImpl> active_pile =
1571 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); 1653 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds);
1572 SetupTrees(pending_pile, active_pile); 1654 SetupTrees(pending_pile, active_pile);
1573 pending_layer_->set_fixed_tile_size(tile_size); 1655 pending_layer_->set_fixed_tile_size(tile_size);
1574 active_layer_->set_fixed_tile_size(tile_size); 1656 active_layer_->set_fixed_tile_size(tile_size);
1575 1657
1576 CreateHighLowResAndSetAllTilesVisible(); 1658 CreateHighLowResAndSetAllTilesVisible();
1577 1659
1578 // Active layer can't have tiles. 1660 // Active layer can't have tiles.
1579 EXPECT_FALSE(active_layer_->CanHaveTilings()); 1661 EXPECT_FALSE(active_layer_->CanHaveTilings());
1580 1662
1581 // All high res tiles required. This should be considered identical 1663 // All high res tiles required. This should be considered identical
1582 // to the case where there is no active layer, to avoid flashing content. 1664 // to the case where there is no active layer, to avoid flashing content.
1583 // This can happen if a layer exists for a while and switches from 1665 // This can happen if a layer exists for a while and switches from
1584 // not being able to have content to having content. 1666 // not being able to have content to having content.
1585 pending_layer_->MarkVisibleResourcesAsRequired(); 1667 pending_layer_->MarkVisibleResourcesAsRequired();
1586 AssertAllTilesRequired(pending_layer_->HighResTiling()); 1668 AssertAllTilesRequired(pending_layer_->HighResTiling());
1587 AssertNoTilesRequired(pending_layer_->LowResTiling()); 1669 if (host_impl_.settings().create_low_res_tiling)
1670 AssertNoTilesRequired(pending_layer_->LowResTiling());
1588 } 1671 }
1589 1672
1590 TEST_F(PictureLayerImplTest, ActivateUninitializedLayer) { 1673 TEST_F(PictureLayerImplTest, ActivateUninitializedLayer) {
1591 gfx::Size tile_size(100, 100); 1674 gfx::Size tile_size(100, 100);
1592 gfx::Size layer_bounds(400, 400); 1675 gfx::Size layer_bounds(400, 400);
1593 scoped_refptr<FakePicturePileImpl> pending_pile = 1676 scoped_refptr<FakePicturePileImpl> pending_pile =
1594 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 1677 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1595 1678
1596 host_impl_.CreatePendingTree(); 1679 host_impl_.CreatePendingTree();
1597 LayerTreeImpl* pending_tree = host_impl_.pending_tree(); 1680 LayerTreeImpl* pending_tree = host_impl_.pending_tree();
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1698 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); 1781 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings());
1699 pending_layer_->CalculateContentsScale(1.f, 1782 pending_layer_->CalculateContentsScale(1.f,
1700 1.f, 1783 1.f,
1701 1.f, 1784 1.f,
1702 1.f, 1785 1.f,
1703 false, 1786 false,
1704 &result_scale_x, 1787 &result_scale_x,
1705 &result_scale_y, 1788 &result_scale_y,
1706 &result_bounds); 1789 &result_bounds);
1707 // Should have a low-res and a high-res tiling. 1790 // Should have a low-res and a high-res tiling.
1708 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); 1791 ASSERT_EQ(
1792 host_impl_.settings().create_low_res_tiling ? 2u : 1u,
1793 pending_layer_->tilings()->num_tilings());
1709 1794
1710 pending_layer_->SetUseGpuRasterization(true); 1795 pending_layer_->SetUseGpuRasterization(true);
1711 EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); 1796 EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization());
1712 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); 1797 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings());
1713 pending_layer_->CalculateContentsScale(1.f, 1798 pending_layer_->CalculateContentsScale(1.f,
1714 1.f, 1799 1.f,
1715 1.f, 1800 1.f,
1716 1.f, 1801 1.f,
1717 false, 1802 false,
1718 &result_scale_x, 1803 &result_scale_x,
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
2274 occluded, 2359 occluded,
2275 &partially_occluded_count); 2360 &partially_occluded_count);
2276 // The layer outputs one quad, which is partially occluded. 2361 // The layer outputs one quad, which is partially occluded.
2277 EXPECT_EQ(100u - 10u, impl.quad_list().size()); 2362 EXPECT_EQ(100u - 10u, impl.quad_list().size());
2278 EXPECT_EQ(10u + 10u, partially_occluded_count); 2363 EXPECT_EQ(10u + 10u, partially_occluded_count);
2279 } 2364 }
2280 } 2365 }
2281 2366
2282 } // namespace 2367 } // namespace
2283 } // namespace cc 2368 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/test/fake_picture_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698