| 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_->AllRefTilesForTesting().size()); | 1974 EXPECT_EQ(0u, tiling_->AllRefTilesForTesting().size()); |
| 1972 } | 1975 } |
| 1973 | 1976 |
| 1974 } // namespace | 1977 } // namespace |
| 1975 } // namespace cc | 1978 } // namespace cc |
| OLD | NEW |