OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 <limits> | 5 #include <limits> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include "cc/base/math_util.h" | 8 #include "cc/base/math_util.h" |
9 #include "cc/resources/picture_layer_tiling.h" | 9 #include "cc/resources/picture_layer_tiling.h" |
10 #include "cc/resources/picture_layer_tiling_set.h" | 10 #include "cc/resources/picture_layer_tiling_set.h" |
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 // tiling. | 777 // tiling. |
778 scoped_refptr<FakePicturePileImpl> pile = | 778 scoped_refptr<FakePicturePileImpl> pile = |
779 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds); | 779 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds); |
780 scoped_ptr<TestablePictureLayerTiling> tiling = | 780 scoped_ptr<TestablePictureLayerTiling> tiling = |
781 TestablePictureLayerTiling::Create(ACTIVE_TREE, 0.25f, pile, &client, | 781 TestablePictureLayerTiling::Create(ACTIVE_TREE, 0.25f, pile, &client, |
782 settings); | 782 settings); |
783 gfx::Rect viewport_in_content_space = | 783 gfx::Rect viewport_in_content_space = |
784 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); | 784 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); |
785 | 785 |
786 tiling->ComputeTilePriorityRects(viewport, 1.f, 1.0, Occlusion()); | 786 tiling->ComputeTilePriorityRects(viewport, 1.f, 1.0, Occlusion()); |
787 tiling->UpdateAllTilePrioritiesForTesting(); | 787 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
788 | 788 |
789 // Compute the soon border. | 789 // Compute the soon border. |
790 float inset = PictureLayerTiling::CalculateSoonBorderDistance( | 790 float inset = PictureLayerTiling::CalculateSoonBorderDistance( |
791 viewport_in_content_space, 1.0f / 0.25f); | 791 viewport_in_content_space, 1.0f / 0.25f); |
792 gfx::Rect soon_rect_in_content_space = viewport_in_content_space; | 792 gfx::Rect soon_rect_in_content_space = viewport_in_content_space; |
793 soon_rect_in_content_space.Inset(-inset, -inset); | 793 soon_rect_in_content_space.Inset(-inset, -inset); |
794 | 794 |
795 // Sanity checks. | 795 // Sanity checks. |
796 for (int i = 0; i < 47; ++i) { | 796 for (int i = 0; i < 47; ++i) { |
797 for (int j = 0; j < 47; ++j) { | 797 for (int j = 0; j < 47; ++j) { |
798 EXPECT_TRUE(tiling->TileAt(i, j)) << "i: " << i << " j: " << j; | 798 EXPECT_TRUE(tiling->TileAt(i, j)) << "i: " << i << " j: " << j; |
799 } | 799 } |
800 } | 800 } |
801 for (int i = 0; i < 47; ++i) { | 801 for (int i = 0; i < 47; ++i) { |
802 EXPECT_FALSE(tiling->TileAt(i, 47)) << "i: " << i; | 802 EXPECT_FALSE(tiling->TileAt(i, 47)) << "i: " << i; |
803 EXPECT_FALSE(tiling->TileAt(47, i)) << "i: " << i; | 803 EXPECT_FALSE(tiling->TileAt(47, i)) << "i: " << i; |
804 } | 804 } |
805 | 805 |
806 // No movement in the viewport implies that tiles will either be NOW | 806 // No movement in the viewport implies that tiles will either be NOW |
807 // or EVENTUALLY, with the exception of tiles that are between 0 and 312 | 807 // or EVENTUALLY, with the exception of tiles that are between 0 and 312 |
808 // pixels away from the viewport, which will be in the SOON bin. | 808 // pixels away from the viewport, which will be in the SOON bin. |
809 bool have_now = false; | 809 bool have_now = false; |
810 bool have_eventually = false; | 810 bool have_eventually = false; |
811 bool have_soon = false; | 811 bool have_soon = false; |
812 for (int i = 0; i < 47; ++i) { | 812 for (int i = 0; i < 47; ++i) { |
813 for (int j = 0; j < 47; ++j) { | 813 for (int j = 0; j < 47; ++j) { |
814 Tile* tile = tiling->TileAt(i, j); | 814 Tile* tile = tiling->TileAt(i, j); |
815 TilePriority priority = tile->priority(); | 815 PrioritizedTile prioritized_tile = prioritized_tiles[tile]; |
| 816 TilePriority priority = prioritized_tile.priority(); |
816 | 817 |
817 gfx::Rect tile_rect = tiling->TilingDataForTesting().TileBounds(i, j); | 818 gfx::Rect tile_rect = tiling->TilingDataForTesting().TileBounds(i, j); |
818 if (viewport_in_content_space.Intersects(tile_rect)) { | 819 if (viewport_in_content_space.Intersects(tile_rect)) { |
819 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 820 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
820 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 821 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
821 have_now = true; | 822 have_now = true; |
822 } else if (soon_rect_in_content_space.Intersects(tile_rect)) { | 823 } else if (soon_rect_in_content_space.Intersects(tile_rect)) { |
823 EXPECT_EQ(TilePriority::SOON, priority.priority_bin); | 824 EXPECT_EQ(TilePriority::SOON, priority.priority_bin); |
824 have_soon = true; | 825 have_soon = true; |
825 } else { | 826 } else { |
(...skipping 11 matching lines...) Expand all Loading... |
837 // Spot check some distances. | 838 // Spot check some distances. |
838 // Tile at 5, 1 should begin at 41x9 in content space (without borders), | 839 // Tile at 5, 1 should begin at 41x9 in content space (without borders), |
839 // so the distance to a viewport that ends at 25x25 in content space | 840 // so the distance to a viewport that ends at 25x25 in content space |
840 // should be 17 (41 - 25 + 1). In layer space, then that should be | 841 // should be 17 (41 - 25 + 1). In layer space, then that should be |
841 // 17 / 0.25 = 68 pixels. | 842 // 17 / 0.25 = 68 pixels. |
842 | 843 |
843 // We can verify that the content rect (with borders) is one pixel off | 844 // We can verify that the content rect (with borders) is one pixel off |
844 // 41,9 8x8 on all sides. | 845 // 41,9 8x8 on all sides. |
845 EXPECT_EQ(tiling->TileAt(5, 1)->content_rect().ToString(), "40,8 10x10"); | 846 EXPECT_EQ(tiling->TileAt(5, 1)->content_rect().ToString(), "40,8 10x10"); |
846 | 847 |
847 TilePriority priority = tiling->TileAt(5, 1)->priority(); | 848 TilePriority priority = prioritized_tiles[tiling->TileAt(5, 1)].priority(); |
848 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); | 849 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); |
849 | 850 |
850 priority = tiling->TileAt(2, 5)->priority(); | 851 priority = prioritized_tiles[tiling->TileAt(2, 5)].priority(); |
851 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); | 852 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); |
852 | 853 |
853 priority = tiling->TileAt(3, 4)->priority(); | 854 priority = prioritized_tiles[tiling->TileAt(3, 4)].priority(); |
854 EXPECT_FLOAT_EQ(40.f, priority.distance_to_visible); | 855 EXPECT_FLOAT_EQ(40.f, priority.distance_to_visible); |
855 | 856 |
856 // Move the viewport down 40 pixels. | 857 // Move the viewport down 40 pixels. |
857 viewport = gfx::Rect(0, 40, 100, 100); | 858 viewport = gfx::Rect(0, 40, 100, 100); |
858 viewport_in_content_space = | 859 viewport_in_content_space = |
859 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); | 860 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); |
860 gfx::Rect skewport = tiling->ComputeSkewport(2.0, viewport_in_content_space); | 861 gfx::Rect skewport = tiling->ComputeSkewport(2.0, viewport_in_content_space); |
861 | 862 |
862 // Compute the soon border. | 863 // Compute the soon border. |
863 inset = PictureLayerTiling::CalculateSoonBorderDistance( | 864 inset = PictureLayerTiling::CalculateSoonBorderDistance( |
864 viewport_in_content_space, 1.0f / 0.25f); | 865 viewport_in_content_space, 1.0f / 0.25f); |
865 soon_rect_in_content_space = viewport_in_content_space; | 866 soon_rect_in_content_space = viewport_in_content_space; |
866 soon_rect_in_content_space.Inset(-inset, -inset); | 867 soon_rect_in_content_space.Inset(-inset, -inset); |
867 | 868 |
868 EXPECT_EQ(0, skewport.x()); | 869 EXPECT_EQ(0, skewport.x()); |
869 EXPECT_EQ(10, skewport.y()); | 870 EXPECT_EQ(10, skewport.y()); |
870 EXPECT_EQ(25, skewport.width()); | 871 EXPECT_EQ(25, skewport.width()); |
871 EXPECT_EQ(35, skewport.height()); | 872 EXPECT_EQ(35, skewport.height()); |
872 | 873 |
873 tiling->ComputeTilePriorityRects(viewport, 1.f, 2.0, Occlusion()); | 874 tiling->ComputeTilePriorityRects(viewport, 1.f, 2.0, Occlusion()); |
874 tiling->UpdateAllTilePrioritiesForTesting(); | 875 prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
875 | 876 |
876 have_now = false; | 877 have_now = false; |
877 have_eventually = false; | 878 have_eventually = false; |
878 have_soon = false; | 879 have_soon = false; |
879 | 880 |
880 // Viewport moved, so we expect to find some NOW tiles, some SOON tiles and | 881 // Viewport moved, so we expect to find some NOW tiles, some SOON tiles and |
881 // some EVENTUALLY tiles. | 882 // some EVENTUALLY tiles. |
882 for (int i = 0; i < 47; ++i) { | 883 for (int i = 0; i < 47; ++i) { |
883 for (int j = 0; j < 47; ++j) { | 884 for (int j = 0; j < 47; ++j) { |
884 Tile* tile = tiling->TileAt(i, j); | 885 Tile* tile = tiling->TileAt(i, j); |
885 TilePriority priority = tile->priority(); | 886 TilePriority priority = prioritized_tiles[tile].priority(); |
886 | 887 |
887 gfx::Rect tile_rect = tiling->TilingDataForTesting().TileBounds(i, j); | 888 gfx::Rect tile_rect = tiling->TilingDataForTesting().TileBounds(i, j); |
888 if (viewport_in_content_space.Intersects(tile_rect)) { | 889 if (viewport_in_content_space.Intersects(tile_rect)) { |
889 EXPECT_EQ(TilePriority::NOW, priority.priority_bin) << "i: " << i | 890 EXPECT_EQ(TilePriority::NOW, priority.priority_bin) << "i: " << i |
890 << " j: " << j; | 891 << " j: " << j; |
891 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible) << "i: " << i | 892 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible) << "i: " << i |
892 << " j: " << j; | 893 << " j: " << j; |
893 have_now = true; | 894 have_now = true; |
894 } else if (skewport.Intersects(tile_rect) || | 895 } else if (skewport.Intersects(tile_rect) || |
895 soon_rect_in_content_space.Intersects(tile_rect)) { | 896 soon_rect_in_content_space.Intersects(tile_rect)) { |
896 EXPECT_EQ(TilePriority::SOON, priority.priority_bin) << "i: " << i | 897 EXPECT_EQ(TilePriority::SOON, priority.priority_bin) << "i: " << i |
897 << " j: " << j; | 898 << " j: " << j; |
898 EXPECT_GT(priority.distance_to_visible, 0.f) << "i: " << i | 899 EXPECT_GT(priority.distance_to_visible, 0.f) << "i: " << i |
899 << " j: " << j; | 900 << " j: " << j; |
900 have_soon = true; | 901 have_soon = true; |
901 } else { | 902 } else { |
902 EXPECT_EQ(TilePriority::EVENTUALLY, priority.priority_bin) | 903 EXPECT_EQ(TilePriority::EVENTUALLY, priority.priority_bin) |
903 << "i: " << i << " j: " << j; | 904 << "i: " << i << " j: " << j; |
904 EXPECT_GT(priority.distance_to_visible, 0.f) << "i: " << i | 905 EXPECT_GT(priority.distance_to_visible, 0.f) << "i: " << i |
905 << " j: " << j; | 906 << " j: " << j; |
906 have_eventually = true; | 907 have_eventually = true; |
907 } | 908 } |
908 } | 909 } |
909 } | 910 } |
910 | 911 |
911 EXPECT_TRUE(have_now); | 912 EXPECT_TRUE(have_now); |
912 EXPECT_TRUE(have_soon); | 913 EXPECT_TRUE(have_soon); |
913 EXPECT_TRUE(have_eventually); | 914 EXPECT_TRUE(have_eventually); |
914 | 915 |
915 priority = tiling->TileAt(5, 1)->priority(); | 916 priority = prioritized_tiles[tiling->TileAt(5, 1)].priority(); |
916 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); | 917 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); |
917 | 918 |
918 priority = tiling->TileAt(2, 5)->priority(); | 919 priority = prioritized_tiles[tiling->TileAt(2, 5)].priority(); |
919 EXPECT_FLOAT_EQ(28.f, priority.distance_to_visible); | 920 EXPECT_FLOAT_EQ(28.f, priority.distance_to_visible); |
920 | 921 |
921 priority = tiling->TileAt(3, 4)->priority(); | 922 priority = prioritized_tiles[tiling->TileAt(3, 4)].priority(); |
922 EXPECT_FLOAT_EQ(4.f, priority.distance_to_visible); | 923 EXPECT_FLOAT_EQ(4.f, priority.distance_to_visible); |
923 | 924 |
924 // Change the underlying layer scale. | 925 // Change the underlying layer scale. |
925 tiling->ComputeTilePriorityRects(viewport, 2.0f, 3.0, Occlusion()); | 926 tiling->ComputeTilePriorityRects(viewport, 2.0f, 3.0, Occlusion()); |
926 tiling->UpdateAllTilePrioritiesForTesting(); | 927 prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
927 | 928 |
928 priority = tiling->TileAt(5, 1)->priority(); | 929 priority = prioritized_tiles[tiling->TileAt(5, 1)].priority(); |
929 EXPECT_FLOAT_EQ(136.f, priority.distance_to_visible); | 930 EXPECT_FLOAT_EQ(136.f, priority.distance_to_visible); |
930 | 931 |
931 priority = tiling->TileAt(2, 5)->priority(); | 932 priority = prioritized_tiles[tiling->TileAt(2, 5)].priority(); |
932 EXPECT_FLOAT_EQ(56.f, priority.distance_to_visible); | 933 EXPECT_FLOAT_EQ(56.f, priority.distance_to_visible); |
933 | 934 |
934 priority = tiling->TileAt(3, 4)->priority(); | 935 priority = prioritized_tiles[tiling->TileAt(3, 4)].priority(); |
935 EXPECT_FLOAT_EQ(8.f, priority.distance_to_visible); | 936 EXPECT_FLOAT_EQ(8.f, priority.distance_to_visible); |
936 | 937 |
937 // Test additional scales. | 938 // Test additional scales. |
938 tiling = TestablePictureLayerTiling::Create(ACTIVE_TREE, 0.2f, pile, &client, | 939 tiling = TestablePictureLayerTiling::Create(ACTIVE_TREE, 0.2f, pile, &client, |
939 LayerTreeSettings()); | 940 LayerTreeSettings()); |
940 tiling->ComputeTilePriorityRects(viewport, 1.0f, 4.0, Occlusion()); | 941 tiling->ComputeTilePriorityRects(viewport, 1.0f, 4.0, Occlusion()); |
941 tiling->UpdateAllTilePrioritiesForTesting(); | 942 prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
942 | 943 |
943 priority = tiling->TileAt(5, 1)->priority(); | 944 priority = prioritized_tiles[tiling->TileAt(5, 1)].priority(); |
944 EXPECT_FLOAT_EQ(110.f, priority.distance_to_visible); | 945 EXPECT_FLOAT_EQ(110.f, priority.distance_to_visible); |
945 | 946 |
946 priority = tiling->TileAt(2, 5)->priority(); | 947 priority = prioritized_tiles[tiling->TileAt(2, 5)].priority(); |
947 EXPECT_FLOAT_EQ(70.f, priority.distance_to_visible); | 948 EXPECT_FLOAT_EQ(70.f, priority.distance_to_visible); |
948 | 949 |
949 priority = tiling->TileAt(3, 4)->priority(); | 950 priority = prioritized_tiles[tiling->TileAt(3, 4)].priority(); |
950 EXPECT_FLOAT_EQ(60.f, priority.distance_to_visible); | 951 EXPECT_FLOAT_EQ(60.f, priority.distance_to_visible); |
951 | 952 |
952 tiling->ComputeTilePriorityRects(viewport, 0.5f, 5.0, Occlusion()); | 953 tiling->ComputeTilePriorityRects(viewport, 0.5f, 5.0, Occlusion()); |
953 tiling->UpdateAllTilePrioritiesForTesting(); | 954 prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
954 | 955 |
955 priority = tiling->TileAt(5, 1)->priority(); | 956 priority = prioritized_tiles[tiling->TileAt(5, 1)].priority(); |
956 EXPECT_FLOAT_EQ(55.f, priority.distance_to_visible); | 957 EXPECT_FLOAT_EQ(55.f, priority.distance_to_visible); |
957 | 958 |
958 priority = tiling->TileAt(2, 5)->priority(); | 959 priority = prioritized_tiles[tiling->TileAt(2, 5)].priority(); |
959 EXPECT_FLOAT_EQ(35.f, priority.distance_to_visible); | 960 EXPECT_FLOAT_EQ(35.f, priority.distance_to_visible); |
960 | 961 |
961 priority = tiling->TileAt(3, 4)->priority(); | 962 priority = prioritized_tiles[tiling->TileAt(3, 4)].priority(); |
962 EXPECT_FLOAT_EQ(30.f, priority.distance_to_visible); | 963 EXPECT_FLOAT_EQ(30.f, priority.distance_to_visible); |
963 } | 964 } |
964 | 965 |
965 TEST(PictureLayerTilingTest, ExpandRectEqual) { | 966 TEST(PictureLayerTilingTest, ExpandRectEqual) { |
966 gfx::Rect in(40, 50, 100, 200); | 967 gfx::Rect in(40, 50, 100, 200); |
967 gfx::Rect bounds(-1000, -1000, 10000, 10000); | 968 gfx::Rect bounds(-1000, -1000, 10000, 10000); |
968 int64 target_area = 100 * 200; | 969 int64 target_area = 100 * 200; |
969 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( | 970 gfx::Rect out = PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( |
970 in, target_area, bounds, NULL); | 971 in, target_area, bounds, NULL); |
971 EXPECT_EQ(in.ToString(), out.ToString()); | 972 EXPECT_EQ(in.ToString(), out.ToString()); |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1307 scoped_refptr<FakePicturePileImpl> pile = | 1308 scoped_refptr<FakePicturePileImpl> pile = |
1308 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( | 1309 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( |
1309 current_layer_bounds); | 1310 current_layer_bounds); |
1310 scoped_ptr<TestablePictureLayerTiling> tiling = | 1311 scoped_ptr<TestablePictureLayerTiling> tiling = |
1311 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, | 1312 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, |
1312 LayerTreeSettings()); | 1313 LayerTreeSettings()); |
1313 | 1314 |
1314 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1315 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1315 current_layer_contents_scale, | 1316 current_layer_contents_scale, |
1316 current_frame_time_in_seconds, Occlusion()); | 1317 current_frame_time_in_seconds, Occlusion()); |
1317 tiling->UpdateAllTilePrioritiesForTesting(); | 1318 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1318 | 1319 |
1319 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1320 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1320 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1321 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1321 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1322 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1322 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1323 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1323 | 1324 |
1324 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1325 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1325 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1326 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1326 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); | 1327 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); |
1327 | 1328 |
1328 priority = tiling->TileAt(0, 1)->priority(); | 1329 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1329 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1330 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1330 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); | 1331 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); |
1331 | 1332 |
1332 priority = tiling->TileAt(1, 0)->priority(); | 1333 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1333 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1334 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1334 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); | 1335 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); |
1335 | 1336 |
1336 priority = tiling->TileAt(1, 1)->priority(); | 1337 priority = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1337 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1338 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1338 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); | 1339 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); |
1339 } | 1340 } |
1340 | 1341 |
1341 TEST(ComputeTilePriorityRectsTest, OffscreenTiles) { | 1342 TEST(ComputeTilePriorityRectsTest, OffscreenTiles) { |
1342 // The TilePriority of offscreen tiles (without movement) should have nonzero | 1343 // The TilePriority of offscreen tiles (without movement) should have nonzero |
1343 // distance_to_visible and infinite time_to_visible. | 1344 // distance_to_visible and infinite time_to_visible. |
1344 FakePictureLayerTilingClient client; | 1345 FakePictureLayerTilingClient client; |
1345 | 1346 |
1346 gfx::Size device_viewport(800, 600); | 1347 gfx::Size device_viewport(800, 600); |
(...skipping 15 matching lines...) Expand all Loading... |
1362 scoped_refptr<FakePicturePileImpl> pile = | 1363 scoped_refptr<FakePicturePileImpl> pile = |
1363 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( | 1364 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( |
1364 current_layer_bounds); | 1365 current_layer_bounds); |
1365 scoped_ptr<TestablePictureLayerTiling> tiling = | 1366 scoped_ptr<TestablePictureLayerTiling> tiling = |
1366 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, | 1367 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, |
1367 LayerTreeSettings()); | 1368 LayerTreeSettings()); |
1368 | 1369 |
1369 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1370 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1370 current_layer_contents_scale, | 1371 current_layer_contents_scale, |
1371 current_frame_time_in_seconds, Occlusion()); | 1372 current_frame_time_in_seconds, Occlusion()); |
1372 tiling->UpdateAllTilePrioritiesForTesting(); | 1373 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1373 | 1374 |
1374 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1375 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1375 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1376 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1376 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1377 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1377 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1378 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1378 | 1379 |
1379 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1380 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1380 EXPECT_GT(priority.distance_to_visible, 0.f); | 1381 EXPECT_GT(priority.distance_to_visible, 0.f); |
1381 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1382 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1382 | 1383 |
1383 priority = tiling->TileAt(0, 1)->priority(); | 1384 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1384 EXPECT_GT(priority.distance_to_visible, 0.f); | 1385 EXPECT_GT(priority.distance_to_visible, 0.f); |
1385 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1386 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1386 | 1387 |
1387 priority = tiling->TileAt(1, 0)->priority(); | 1388 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1388 EXPECT_GT(priority.distance_to_visible, 0.f); | 1389 EXPECT_GT(priority.distance_to_visible, 0.f); |
1389 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1390 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1390 | 1391 |
1391 priority = tiling->TileAt(1, 1)->priority(); | 1392 priority = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1392 EXPECT_GT(priority.distance_to_visible, 0.f); | 1393 EXPECT_GT(priority.distance_to_visible, 0.f); |
1393 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1394 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1394 | 1395 |
1395 // Furthermore, in this scenario tiles on the right hand side should have a | 1396 // Furthermore, in this scenario tiles on the right hand side should have a |
1396 // larger distance to visible. | 1397 // larger distance to visible. |
1397 TilePriority left = tiling->TileAt(0, 0)->priority(); | 1398 TilePriority left = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1398 TilePriority right = tiling->TileAt(1, 0)->priority(); | 1399 TilePriority right = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1399 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); | 1400 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); |
1400 | 1401 |
1401 left = tiling->TileAt(0, 1)->priority(); | 1402 left = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1402 right = tiling->TileAt(1, 1)->priority(); | 1403 right = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1403 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); | 1404 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); |
1404 } | 1405 } |
1405 | 1406 |
1406 TEST(ComputeTilePriorityRectsTest, PartiallyOffscreenLayer) { | 1407 TEST(ComputeTilePriorityRectsTest, PartiallyOffscreenLayer) { |
1407 // Sanity check that a layer with some tiles visible and others offscreen has | 1408 // Sanity check that a layer with some tiles visible and others offscreen has |
1408 // correct TilePriorities for each tile. | 1409 // correct TilePriorities for each tile. |
1409 FakePictureLayerTilingClient client; | 1410 FakePictureLayerTilingClient client; |
1410 | 1411 |
1411 gfx::Size device_viewport(800, 600); | 1412 gfx::Size device_viewport(800, 600); |
1412 gfx::Size last_layer_bounds(200, 200); | 1413 gfx::Size last_layer_bounds(200, 200); |
(...skipping 14 matching lines...) Expand all Loading... |
1427 scoped_refptr<FakePicturePileImpl> pile = | 1428 scoped_refptr<FakePicturePileImpl> pile = |
1428 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( | 1429 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( |
1429 current_layer_bounds); | 1430 current_layer_bounds); |
1430 scoped_ptr<TestablePictureLayerTiling> tiling = | 1431 scoped_ptr<TestablePictureLayerTiling> tiling = |
1431 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, | 1432 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, |
1432 LayerTreeSettings()); | 1433 LayerTreeSettings()); |
1433 | 1434 |
1434 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1435 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1435 current_layer_contents_scale, | 1436 current_layer_contents_scale, |
1436 current_frame_time_in_seconds, Occlusion()); | 1437 current_frame_time_in_seconds, Occlusion()); |
1437 tiling->UpdateAllTilePrioritiesForTesting(); | 1438 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1438 | 1439 |
1439 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1440 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1440 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1441 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1441 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1442 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1442 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1443 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1443 | 1444 |
1444 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1445 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1445 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1446 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1446 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); | 1447 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); |
1447 | 1448 |
1448 priority = tiling->TileAt(0, 1)->priority(); | 1449 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1449 EXPECT_GT(priority.distance_to_visible, 0.f); | 1450 EXPECT_GT(priority.distance_to_visible, 0.f); |
1450 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1451 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1451 | 1452 |
1452 priority = tiling->TileAt(1, 0)->priority(); | 1453 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1453 EXPECT_GT(priority.distance_to_visible, 0.f); | 1454 EXPECT_GT(priority.distance_to_visible, 0.f); |
1454 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1455 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1455 | 1456 |
1456 priority = tiling->TileAt(1, 1)->priority(); | 1457 priority = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1457 EXPECT_GT(priority.distance_to_visible, 0.f); | 1458 EXPECT_GT(priority.distance_to_visible, 0.f); |
1458 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1459 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1459 } | 1460 } |
1460 | 1461 |
1461 TEST(ComputeTilePriorityRectsTest, PartiallyOffscreenRotatedLayer) { | 1462 TEST(ComputeTilePriorityRectsTest, PartiallyOffscreenRotatedLayer) { |
1462 // Each tile of a layer may be affected differently by a transform; Check | 1463 // Each tile of a layer may be affected differently by a transform; Check |
1463 // that ComputeTilePriorityRects correctly accounts for the transform between | 1464 // that ComputeTilePriorityRects correctly accounts for the transform between |
1464 // layer space and screen space. | 1465 // layer space and screen space. |
1465 FakePictureLayerTilingClient client; | 1466 FakePictureLayerTilingClient client; |
1466 | 1467 |
(...skipping 19 matching lines...) Expand all Loading... |
1486 scoped_refptr<FakePicturePileImpl> pile = | 1487 scoped_refptr<FakePicturePileImpl> pile = |
1487 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( | 1488 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( |
1488 current_layer_bounds); | 1489 current_layer_bounds); |
1489 scoped_ptr<TestablePictureLayerTiling> tiling = | 1490 scoped_ptr<TestablePictureLayerTiling> tiling = |
1490 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, | 1491 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, |
1491 LayerTreeSettings()); | 1492 LayerTreeSettings()); |
1492 | 1493 |
1493 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1494 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1494 current_layer_contents_scale, | 1495 current_layer_contents_scale, |
1495 current_frame_time_in_seconds, Occlusion()); | 1496 current_frame_time_in_seconds, Occlusion()); |
1496 tiling->UpdateAllTilePrioritiesForTesting(); | 1497 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1497 | 1498 |
1498 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1499 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1499 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1500 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1500 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1501 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1501 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1502 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1502 | 1503 |
1503 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1504 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1504 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1505 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1505 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1506 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1506 | 1507 |
1507 priority = tiling->TileAt(0, 1)->priority(); | 1508 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1508 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1509 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1509 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1510 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1510 | 1511 |
1511 priority = tiling->TileAt(1, 0)->priority(); | 1512 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1512 EXPECT_GT(priority.distance_to_visible, 0.f); | 1513 EXPECT_GT(priority.distance_to_visible, 0.f); |
1513 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1514 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1514 | 1515 |
1515 priority = tiling->TileAt(1, 1)->priority(); | 1516 priority = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1516 EXPECT_GT(priority.distance_to_visible, 0.f); | 1517 EXPECT_GT(priority.distance_to_visible, 0.f); |
1517 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1518 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1518 | 1519 |
1519 // Furthermore, in this scenario the bottom-right tile should have the larger | 1520 // Furthermore, in this scenario the bottom-right tile should have the larger |
1520 // distance to visible. | 1521 // distance to visible. |
1521 TilePriority top_left = tiling->TileAt(0, 0)->priority(); | 1522 TilePriority top_left = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1522 TilePriority top_right = tiling->TileAt(1, 0)->priority(); | 1523 TilePriority top_right = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1523 TilePriority bottom_right = tiling->TileAt(1, 1)->priority(); | 1524 TilePriority bottom_right = |
| 1525 prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1524 EXPECT_GT(top_right.distance_to_visible, top_left.distance_to_visible); | 1526 EXPECT_GT(top_right.distance_to_visible, top_left.distance_to_visible); |
1525 | 1527 |
1526 EXPECT_EQ(bottom_right.distance_to_visible, top_right.distance_to_visible); | 1528 EXPECT_EQ(bottom_right.distance_to_visible, top_right.distance_to_visible); |
1527 } | 1529 } |
1528 | 1530 |
1529 TEST(ComputeTilePriorityRectsTest, PerspectiveLayer) { | 1531 TEST(ComputeTilePriorityRectsTest, PerspectiveLayer) { |
1530 // Perspective transforms need to take a different code path. | 1532 // Perspective transforms need to take a different code path. |
1531 // This test checks tile priorities of a perspective layer. | 1533 // This test checks tile priorities of a perspective layer. |
1532 FakePictureLayerTilingClient client; | 1534 FakePictureLayerTilingClient client; |
1533 | 1535 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1569 scoped_refptr<FakePicturePileImpl> pile = | 1571 scoped_refptr<FakePicturePileImpl> pile = |
1570 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( | 1572 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( |
1571 current_layer_bounds); | 1573 current_layer_bounds); |
1572 scoped_ptr<TestablePictureLayerTiling> tiling = | 1574 scoped_ptr<TestablePictureLayerTiling> tiling = |
1573 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, | 1575 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, |
1574 LayerTreeSettings()); | 1576 LayerTreeSettings()); |
1575 | 1577 |
1576 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1578 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1577 current_layer_contents_scale, | 1579 current_layer_contents_scale, |
1578 current_frame_time_in_seconds, Occlusion()); | 1580 current_frame_time_in_seconds, Occlusion()); |
1579 tiling->UpdateAllTilePrioritiesForTesting(); | 1581 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1580 | 1582 |
1581 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1583 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1582 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1584 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1583 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1585 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1584 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1586 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1585 | 1587 |
1586 // All tiles will have a positive distance_to_visible | 1588 // All tiles will have a positive distance_to_visible |
1587 // and an infinite time_to_visible. | 1589 // and an infinite time_to_visible. |
1588 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1590 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1589 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); | 1591 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); |
1590 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1592 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1591 | 1593 |
1592 priority = tiling->TileAt(0, 1)->priority(); | 1594 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1593 EXPECT_GT(priority.distance_to_visible, 0.f); | 1595 EXPECT_GT(priority.distance_to_visible, 0.f); |
1594 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1596 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1595 | 1597 |
1596 priority = tiling->TileAt(1, 0)->priority(); | 1598 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1597 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); | 1599 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); |
1598 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1600 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1599 | 1601 |
1600 priority = tiling->TileAt(1, 1)->priority(); | 1602 priority = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1601 EXPECT_GT(priority.distance_to_visible, 0.f); | 1603 EXPECT_GT(priority.distance_to_visible, 0.f); |
1602 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1604 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1603 | 1605 |
1604 // Furthermore, in this scenario the top-left distance_to_visible | 1606 // Furthermore, in this scenario the top-left distance_to_visible |
1605 // will be smallest, followed by top-right. The bottom layers | 1607 // will be smallest, followed by top-right. The bottom layers |
1606 // will of course be further than the top layers. | 1608 // will of course be further than the top layers. |
1607 TilePriority top_left = tiling->TileAt(0, 0)->priority(); | 1609 TilePriority top_left = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1608 TilePriority top_right = tiling->TileAt(1, 0)->priority(); | 1610 TilePriority top_right = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1609 TilePriority bottom_left = tiling->TileAt(0, 1)->priority(); | 1611 TilePriority bottom_left = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1610 TilePriority bottom_right = tiling->TileAt(1, 1)->priority(); | 1612 TilePriority bottom_right = |
| 1613 prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1611 | 1614 |
1612 EXPECT_GT(bottom_right.distance_to_visible, top_right.distance_to_visible); | 1615 EXPECT_GT(bottom_right.distance_to_visible, top_right.distance_to_visible); |
1613 | 1616 |
1614 EXPECT_GT(bottom_left.distance_to_visible, top_left.distance_to_visible); | 1617 EXPECT_GT(bottom_left.distance_to_visible, top_left.distance_to_visible); |
1615 } | 1618 } |
1616 | 1619 |
1617 TEST(ComputeTilePriorityRectsTest, PerspectiveLayerClippedByW) { | 1620 TEST(ComputeTilePriorityRectsTest, PerspectiveLayerClippedByW) { |
1618 // Perspective transforms need to take a different code path. | 1621 // Perspective transforms need to take a different code path. |
1619 // This test checks tile priorities of a perspective layer. | 1622 // This test checks tile priorities of a perspective layer. |
1620 FakePictureLayerTilingClient client; | 1623 FakePictureLayerTilingClient client; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1662 scoped_refptr<FakePicturePileImpl> pile = | 1665 scoped_refptr<FakePicturePileImpl> pile = |
1663 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( | 1666 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize( |
1664 current_layer_bounds); | 1667 current_layer_bounds); |
1665 scoped_ptr<TestablePictureLayerTiling> tiling = | 1668 scoped_ptr<TestablePictureLayerTiling> tiling = |
1666 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, | 1669 TestablePictureLayerTiling::Create(ACTIVE_TREE, 1.0f, pile, &client, |
1667 LayerTreeSettings()); | 1670 LayerTreeSettings()); |
1668 | 1671 |
1669 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1672 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1670 current_layer_contents_scale, | 1673 current_layer_contents_scale, |
1671 current_frame_time_in_seconds, Occlusion()); | 1674 current_frame_time_in_seconds, Occlusion()); |
1672 tiling->UpdateAllTilePrioritiesForTesting(); | 1675 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1673 | 1676 |
1674 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1677 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1675 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1678 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1676 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1679 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1677 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1680 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1678 | 1681 |
1679 // Left-side tiles will be clipped by the transform, so we have to assume | 1682 // Left-side tiles will be clipped by the transform, so we have to assume |
1680 // they are visible just in case. | 1683 // they are visible just in case. |
1681 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1684 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1682 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1685 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1683 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); | 1686 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); |
1684 | 1687 |
1685 priority = tiling->TileAt(0, 1)->priority(); | 1688 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1686 EXPECT_GT(priority.distance_to_visible, 0.f); | 1689 EXPECT_GT(priority.distance_to_visible, 0.f); |
1687 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1690 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1688 | 1691 |
1689 // Right-side tiles will have a positive distance_to_visible | 1692 // Right-side tiles will have a positive distance_to_visible |
1690 // and an infinite time_to_visible. | 1693 // and an infinite time_to_visible. |
1691 priority = tiling->TileAt(1, 0)->priority(); | 1694 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1692 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); | 1695 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); |
1693 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1696 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1694 | 1697 |
1695 priority = tiling->TileAt(1, 1)->priority(); | 1698 priority = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1696 EXPECT_GT(priority.distance_to_visible, 0.f); | 1699 EXPECT_GT(priority.distance_to_visible, 0.f); |
1697 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1700 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1698 } | 1701 } |
1699 | 1702 |
1700 TEST(ComputeTilePriorityRectsTest, BasicMotion) { | 1703 TEST(ComputeTilePriorityRectsTest, BasicMotion) { |
1701 // Test that time_to_visible is computed correctly when | 1704 // Test that time_to_visible is computed correctly when |
1702 // there is some motion. | 1705 // there is some motion. |
1703 FakePictureLayerTilingClient client; | 1706 FakePictureLayerTilingClient client; |
1704 | 1707 |
1705 gfx::Size device_viewport(800, 600); | 1708 gfx::Size device_viewport(800, 600); |
(...skipping 27 matching lines...) Expand all Loading... |
1733 | 1736 |
1734 // previous ("last") frame | 1737 // previous ("last") frame |
1735 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1738 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1736 last_layer_contents_scale, | 1739 last_layer_contents_scale, |
1737 last_frame_time_in_seconds, Occlusion()); | 1740 last_frame_time_in_seconds, Occlusion()); |
1738 | 1741 |
1739 // current frame | 1742 // current frame |
1740 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1743 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1741 current_layer_contents_scale, | 1744 current_layer_contents_scale, |
1742 current_frame_time_in_seconds, Occlusion()); | 1745 current_frame_time_in_seconds, Occlusion()); |
1743 tiling->UpdateAllTilePrioritiesForTesting(); | 1746 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1744 | 1747 |
1745 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1748 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1746 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1749 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1747 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1750 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1748 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1751 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1749 | 1752 |
1750 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1753 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1751 EXPECT_GT(priority.distance_to_visible, 0.f); | 1754 EXPECT_GT(priority.distance_to_visible, 0.f); |
1752 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1755 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1753 | 1756 |
1754 priority = tiling->TileAt(0, 1)->priority(); | 1757 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1755 EXPECT_GT(priority.distance_to_visible, 0.f); | 1758 EXPECT_GT(priority.distance_to_visible, 0.f); |
1756 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1759 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1757 | 1760 |
1758 // time_to_visible for the right hand side layers needs an extra 0.099 | 1761 // time_to_visible for the right hand side layers needs an extra 0.099 |
1759 // seconds because this tile is 99 pixels further away. | 1762 // seconds because this tile is 99 pixels further away. |
1760 priority = tiling->TileAt(1, 0)->priority(); | 1763 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1761 EXPECT_GT(priority.distance_to_visible, 0.f); | 1764 EXPECT_GT(priority.distance_to_visible, 0.f); |
1762 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1765 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1763 | 1766 |
1764 priority = tiling->TileAt(1, 1)->priority(); | 1767 priority = prioritized_tiles[tiling->TileAt(1, 1)].priority(); |
1765 EXPECT_GT(priority.distance_to_visible, 0.f); | 1768 EXPECT_GT(priority.distance_to_visible, 0.f); |
1766 EXPECT_NE(TilePriority::NOW, priority.priority_bin); | 1769 EXPECT_NE(TilePriority::NOW, priority.priority_bin); |
1767 } | 1770 } |
1768 | 1771 |
1769 TEST(ComputeTilePriorityRectsTest, RotationMotion) { | 1772 TEST(ComputeTilePriorityRectsTest, RotationMotion) { |
1770 // Each tile of a layer may be affected differently by a transform; Check | 1773 // Each tile of a layer may be affected differently by a transform; Check |
1771 // that ComputeTilePriorityRects correctly accounts for the transform between | 1774 // that ComputeTilePriorityRects correctly accounts for the transform between |
1772 // layer space and screen space. | 1775 // layer space and screen space. |
1773 | 1776 |
1774 FakePictureLayerTilingClient client; | 1777 FakePictureLayerTilingClient client; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1810 | 1813 |
1811 // previous ("last") frame | 1814 // previous ("last") frame |
1812 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1815 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1813 last_layer_contents_scale, | 1816 last_layer_contents_scale, |
1814 last_frame_time_in_seconds, Occlusion()); | 1817 last_frame_time_in_seconds, Occlusion()); |
1815 | 1818 |
1816 // current frame | 1819 // current frame |
1817 tiling->ComputeTilePriorityRects(viewport_in_layer_space, | 1820 tiling->ComputeTilePriorityRects(viewport_in_layer_space, |
1818 current_layer_contents_scale, | 1821 current_layer_contents_scale, |
1819 current_frame_time_in_seconds, Occlusion()); | 1822 current_frame_time_in_seconds, Occlusion()); |
1820 tiling->UpdateAllTilePrioritiesForTesting(); | 1823 auto prioritized_tiles = tiling->UpdateAndGetAllPrioritizedTilesForTesting(); |
1821 | 1824 |
1822 ASSERT_TRUE(tiling->TileAt(0, 0)); | 1825 ASSERT_TRUE(tiling->TileAt(0, 0)); |
1823 ASSERT_TRUE(tiling->TileAt(0, 1)); | 1826 ASSERT_TRUE(tiling->TileAt(0, 1)); |
1824 ASSERT_TRUE(tiling->TileAt(1, 0)); | 1827 ASSERT_TRUE(tiling->TileAt(1, 0)); |
1825 ASSERT_TRUE(tiling->TileAt(1, 1)); | 1828 ASSERT_TRUE(tiling->TileAt(1, 1)); |
1826 | 1829 |
1827 TilePriority priority = tiling->TileAt(0, 0)->priority(); | 1830 TilePriority priority = prioritized_tiles[tiling->TileAt(0, 0)].priority(); |
1828 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1831 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1829 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1832 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1830 | 1833 |
1831 priority = tiling->TileAt(0, 1)->priority(); | 1834 priority = prioritized_tiles[tiling->TileAt(0, 1)].priority(); |
1832 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1835 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1833 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1836 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1834 | 1837 |
1835 priority = tiling->TileAt(1, 0)->priority(); | 1838 priority = prioritized_tiles[tiling->TileAt(1, 0)].priority(); |
1836 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); | 1839 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); |
1837 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); | 1840 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); |
1838 } | 1841 } |
1839 | 1842 |
1840 TEST(PictureLayerTilingTest, RecycledTilesCleared) { | 1843 TEST(PictureLayerTilingTest, RecycledTilesCleared) { |
1841 // This test performs the following: | 1844 // This test performs the following: |
1842 // Setup: | 1845 // Setup: |
1843 // - Two tilings, one active one recycled with all tiles shared. | 1846 // - Two tilings, one active one recycled with all tiles shared. |
1844 // Procedure: | 1847 // Procedure: |
1845 // - Viewport moves somewhere far away and active tiling clears tiles. | 1848 // - Viewport moves somewhere far away and active tiling clears tiles. |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1966 tiling_->SetRasterSourceAndResize(pile); | 1969 tiling_->SetRasterSourceAndResize(pile); |
1967 | 1970 |
1968 // Tile size in the tiling should be resized to 250x200. | 1971 // Tile size in the tiling should be resized to 250x200. |
1969 EXPECT_EQ(250, tiling_->TilingDataForTesting().max_texture_size().width()); | 1972 EXPECT_EQ(250, tiling_->TilingDataForTesting().max_texture_size().width()); |
1970 EXPECT_EQ(200, tiling_->TilingDataForTesting().max_texture_size().height()); | 1973 EXPECT_EQ(200, tiling_->TilingDataForTesting().max_texture_size().height()); |
1971 EXPECT_EQ(0u, tiling_->AllTilesForTesting().size()); | 1974 EXPECT_EQ(0u, tiling_->AllTilesForTesting().size()); |
1972 } | 1975 } |
1973 | 1976 |
1974 } // namespace | 1977 } // namespace |
1975 } // namespace cc | 1978 } // namespace cc |
OLD | NEW |