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

Side by Side Diff: cc/resources/tile_manager_unittest.cc

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tile_task_worker_pool_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/eviction_tile_priority_queue.h" 5 #include "cc/resources/eviction_tile_priority_queue.h"
6 #include "cc/resources/raster_tile_priority_queue.h" 6 #include "cc/resources/raster_tile_priority_queue.h"
7 #include "cc/resources/tile.h" 7 #include "cc/resources/tile.h"
8 #include "cc/resources/tile_priority.h" 8 #include "cc/resources/tile_priority.h"
9 #include "cc/test/begin_frame_args_test.h" 9 #include "cc/test/begin_frame_args_test.h"
10 #include "cc/test/fake_impl_proxy.h" 10 #include "cc/test/fake_impl_proxy.h"
11 #include "cc/test/fake_layer_tree_host_impl.h" 11 #include "cc/test/fake_layer_tree_host_impl.h"
12 #include "cc/test/fake_output_surface.h" 12 #include "cc/test/fake_output_surface.h"
13 #include "cc/test/fake_output_surface_client.h" 13 #include "cc/test/fake_output_surface_client.h"
14 #include "cc/test/fake_picture_layer_impl.h" 14 #include "cc/test/fake_picture_layer_impl.h"
15 #include "cc/test/fake_picture_layer_tiling_client.h"
15 #include "cc/test/fake_picture_pile_impl.h" 16 #include "cc/test/fake_picture_pile_impl.h"
16 #include "cc/test/fake_tile_manager.h" 17 #include "cc/test/fake_tile_manager.h"
17 #include "cc/test/impl_side_painting_settings.h" 18 #include "cc/test/impl_side_painting_settings.h"
18 #include "cc/test/test_shared_bitmap_manager.h" 19 #include "cc/test/test_shared_bitmap_manager.h"
19 #include "cc/test/test_tile_priorities.h" 20 #include "cc/test/test_tile_priorities.h"
20 #include "cc/trees/layer_tree_impl.h" 21 #include "cc/trees/layer_tree_impl.h"
21 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
22 23
23 namespace cc { 24 namespace cc {
24 namespace { 25 namespace {
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 while (!queue.IsEmpty()) { 872 while (!queue.IsEmpty()) {
872 EXPECT_TRUE(queue.Top()); 873 EXPECT_TRUE(queue.Top());
873 all_tiles.insert(queue.Top()); 874 all_tiles.insert(queue.Top());
874 ++tile_count; 875 ++tile_count;
875 queue.Pop(); 876 queue.Pop();
876 } 877 }
877 EXPECT_EQ(tile_count, all_tiles.size()); 878 EXPECT_EQ(tile_count, all_tiles.size());
878 EXPECT_EQ(16u, tile_count); 879 EXPECT_EQ(16u, tile_count);
879 } 880 }
880 881
882 TEST_F(TileManagerTilePriorityQueueTest,
883 RasterTilePriorityQueueStaticViewport) {
884 FakePictureLayerTilingClient client;
885
886 gfx::Rect viewport(50, 50, 100, 100);
887 gfx::Size layer_bounds(800, 800);
888
889 gfx::Rect soon_rect = viewport;
890 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
891
892 client.SetTileSize(gfx::Size(30, 30));
893 client.set_tree(ACTIVE_TREE);
894 LayerTreeSettings settings;
895 settings.max_tiles_for_interest_area = 10000;
896
897 scoped_ptr<PictureLayerTilingSet> tiling_set = PictureLayerTilingSet::Create(
898 &client, settings.max_tiles_for_interest_area,
899 settings.skewport_target_time_in_seconds,
900 settings.skewport_extrapolation_limit_in_content_pixels);
901
902 scoped_refptr<FakePicturePileImpl> pile =
903 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds);
904 PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, pile);
905 tiling->set_resolution(HIGH_RESOLUTION);
906
907 tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true);
908
909 TilingSetRasterQueue empty_queue;
910 EXPECT_TRUE(empty_queue.IsEmpty());
911
912 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
913
914 // Sanity check.
915 EXPECT_EQ(841u, all_tiles.size());
916
917 // The explanation of each iteration is as follows:
918 // 1. First iteration tests that we can get all of the tiles correctly.
919 // 2. Second iteration ensures that we can get all of the tiles again (first
920 // iteration didn't change any tiles), as well set all tiles to be ready to
921 // draw.
922 // 3. Third iteration ensures that no tiles are returned, since they were all
923 // marked as ready to draw.
924 for (int i = 0; i < 3; ++i) {
925 TilingSetRasterQueue queue(tiling_set.get(), false);
926
927 // There are 3 bins in TilePriority.
928 bool have_tiles[3] = {};
929
930 // On the third iteration, we should get no tiles since everything was
931 // marked as ready to draw.
932 if (i == 2) {
933 EXPECT_TRUE(queue.IsEmpty());
934 continue;
935 }
936
937 EXPECT_FALSE(queue.IsEmpty());
938 std::set<Tile*> unique_tiles;
939 unique_tiles.insert(queue.Top());
940 Tile* last_tile = queue.Top();
941 have_tiles[last_tile->priority(ACTIVE_TREE).priority_bin] = true;
942
943 // On the second iteration, mark everything as ready to draw (solid color).
944 if (i == 1) {
945 TileDrawInfo& draw_info = last_tile->draw_info();
946 draw_info.SetSolidColorForTesting(SK_ColorRED);
947 }
948 queue.Pop();
949 int eventually_bin_order_correct_count = 0;
950 int eventually_bin_order_incorrect_count = 0;
951 while (!queue.IsEmpty()) {
952 Tile* new_tile = queue.Top();
953 queue.Pop();
954 unique_tiles.insert(new_tile);
955
956 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
957 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
958 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
959 if (last_priority.priority_bin == new_priority.priority_bin) {
960 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
961 bool order_correct = last_priority.distance_to_visible <=
962 new_priority.distance_to_visible;
963 eventually_bin_order_correct_count += order_correct;
964 eventually_bin_order_incorrect_count += !order_correct;
965 } else if (!soon_rect.Intersects(new_tile->content_rect()) &&
966 !soon_rect.Intersects(last_tile->content_rect())) {
967 EXPECT_LE(last_priority.distance_to_visible,
968 new_priority.distance_to_visible);
969 EXPECT_EQ(TilePriority::NOW, new_priority.priority_bin);
970 } else if (new_priority.distance_to_visible > 0.f) {
971 EXPECT_EQ(TilePriority::SOON, new_priority.priority_bin);
972 }
973 }
974 have_tiles[new_priority.priority_bin] = true;
975
976 last_tile = new_tile;
977
978 // On the second iteration, mark everything as ready to draw (solid
979 // color).
980 if (i == 1) {
981 TileDrawInfo& draw_info = last_tile->draw_info();
982 draw_info.SetSolidColorForTesting(SK_ColorRED);
983 }
984 }
985
986 EXPECT_GT(eventually_bin_order_correct_count,
987 eventually_bin_order_incorrect_count);
988
989 // We should have now and eventually tiles, as well as soon tiles from
990 // the border region.
991 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
992 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
993 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
994
995 EXPECT_EQ(unique_tiles.size(), all_tiles.size());
996 }
997 }
998
999 TEST_F(TileManagerTilePriorityQueueTest,
1000 RasterTilePriorityQueueMovingViewport) {
1001 FakePictureLayerTilingClient client;
1002
1003 gfx::Rect viewport(50, 0, 100, 100);
1004 gfx::Rect moved_viewport(50, 0, 100, 500);
1005 gfx::Size layer_bounds(1000, 1000);
1006
1007 client.SetTileSize(gfx::Size(30, 30));
1008 client.set_tree(ACTIVE_TREE);
1009 LayerTreeSettings settings;
1010 settings.max_tiles_for_interest_area = 10000;
1011
1012 scoped_ptr<PictureLayerTilingSet> tiling_set = PictureLayerTilingSet::Create(
1013 &client, settings.max_tiles_for_interest_area,
1014 settings.skewport_target_time_in_seconds,
1015 settings.skewport_extrapolation_limit_in_content_pixels);
1016
1017 scoped_refptr<FakePicturePileImpl> pile =
1018 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds);
1019 PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, pile);
1020 tiling->set_resolution(HIGH_RESOLUTION);
1021
1022 tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true);
1023 tiling_set->UpdateTilePriorities(moved_viewport, 1.0f, 2.0, Occlusion(),
1024 true);
1025
1026 gfx::Rect soon_rect = moved_viewport;
1027 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
1028
1029 // There are 3 bins in TilePriority.
1030 bool have_tiles[3] = {};
1031 Tile* last_tile = NULL;
1032 int eventually_bin_order_correct_count = 0;
1033 int eventually_bin_order_incorrect_count = 0;
1034 for (TilingSetRasterQueue queue(tiling_set.get(), false); !queue.IsEmpty();
1035 queue.Pop()) {
1036 if (!last_tile)
1037 last_tile = queue.Top();
1038
1039 Tile* new_tile = queue.Top();
1040
1041 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
1042 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
1043
1044 have_tiles[new_priority.priority_bin] = true;
1045
1046 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
1047 if (last_priority.priority_bin == new_priority.priority_bin) {
1048 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
1049 bool order_correct = last_priority.distance_to_visible <=
1050 new_priority.distance_to_visible;
1051 eventually_bin_order_correct_count += order_correct;
1052 eventually_bin_order_incorrect_count += !order_correct;
1053 } else if (!soon_rect.Intersects(new_tile->content_rect()) &&
1054 !soon_rect.Intersects(last_tile->content_rect())) {
1055 EXPECT_LE(last_priority.distance_to_visible,
1056 new_priority.distance_to_visible);
1057 } else if (new_priority.distance_to_visible > 0.f) {
1058 EXPECT_EQ(TilePriority::SOON, new_priority.priority_bin);
1059 }
1060 }
1061 last_tile = new_tile;
1062 }
1063
1064 EXPECT_GT(eventually_bin_order_correct_count,
1065 eventually_bin_order_incorrect_count);
1066
1067 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
1068 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
1069 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
1070 }
1071
881 } // namespace 1072 } // namespace
882 } // namespace cc 1073 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tile_task_worker_pool_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698