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

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

Issue 367833003: cc: Start using raster/eviction iterators. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « cc/resources/picture_layer_tiling_set.cc ('k') | cc/resources/prioritized_tile_set.h » ('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 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 "cc/resources/picture_layer_tiling.h" 5 #include "cc/resources/picture_layer_tiling.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <set> 8 #include <set>
9 9
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
(...skipping 22 matching lines...) Expand all
33 inverse, gfx::RectF(gfx::Point(0, 0), device_viewport)); 33 inverse, gfx::RectF(gfx::Point(0, 0), device_viewport));
34 return ToEnclosingRect(viewport_in_layer_space); 34 return ToEnclosingRect(viewport_in_layer_space);
35 } 35 }
36 36
37 static void UpdateAllTilePriorities(PictureLayerTilingSet* set, 37 static void UpdateAllTilePriorities(PictureLayerTilingSet* set,
38 WhichTree tree, 38 WhichTree tree,
39 const gfx::Rect& visible_layer_rect, 39 const gfx::Rect& visible_layer_rect,
40 float layer_contents_scale, 40 float layer_contents_scale,
41 double current_frame_time_in_seconds) { 41 double current_frame_time_in_seconds) {
42 for (size_t i = 0; i < set->num_tilings(); ++i) { 42 for (size_t i = 0; i < set->num_tilings(); ++i) {
43 set->tiling_at(i)->UpdateTilePriorities(tree, 43 set->tiling_at(i)->ComputeTilePriorityRects(tree,
44 visible_layer_rect, 44 visible_layer_rect,
45 layer_contents_scale, 45 layer_contents_scale,
46 current_frame_time_in_seconds, 46 current_frame_time_in_seconds,
47 Occlusion()); 47 Occlusion());
48 } 48 }
49 } 49 }
50 50
51 class TestablePictureLayerTiling : public PictureLayerTiling { 51 class TestablePictureLayerTiling : public PictureLayerTiling {
52 public: 52 public:
53 using PictureLayerTiling::SetLiveTilesRect; 53 using PictureLayerTiling::SetLiveTilesRect;
54 using PictureLayerTiling::TileAt; 54 using PictureLayerTiling::TileAt;
55 55
56 static scoped_ptr<TestablePictureLayerTiling> Create( 56 static scoped_ptr<TestablePictureLayerTiling> Create(
57 float contents_scale, 57 float contents_scale,
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 client.set_skewport_extrapolation_limit_in_content_pixels(75); 531 client.set_skewport_extrapolation_limit_in_content_pixels(75);
532 client.set_tree(ACTIVE_TREE); 532 client.set_tree(ACTIVE_TREE);
533 scoped_ptr<TestablePictureLayerTiling> tiling; 533 scoped_ptr<TestablePictureLayerTiling> tiling;
534 534
535 gfx::Rect viewport(0, 0, 100, 100); 535 gfx::Rect viewport(0, 0, 100, 100);
536 gfx::Size layer_bounds(200, 200); 536 gfx::Size layer_bounds(200, 200);
537 537
538 client.SetTileSize(gfx::Size(100, 100)); 538 client.SetTileSize(gfx::Size(100, 100));
539 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); 539 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client);
540 540
541 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion()); 541 tiling->ComputeTilePriorityRects(
542 ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion());
542 543
543 // Move viewport down 50 pixels in 0.5 seconds. 544 // Move viewport down 50 pixels in 0.5 seconds.
544 gfx::Rect down_skewport = 545 gfx::Rect down_skewport =
545 tiling->ComputeSkewport(1.5, gfx::Rect(0, 50, 100, 100)); 546 tiling->ComputeSkewport(1.5, gfx::Rect(0, 50, 100, 100));
546 547
547 EXPECT_EQ(0, down_skewport.x()); 548 EXPECT_EQ(0, down_skewport.x());
548 EXPECT_EQ(50, down_skewport.y()); 549 EXPECT_EQ(50, down_skewport.y());
549 EXPECT_EQ(100, down_skewport.width()); 550 EXPECT_EQ(100, down_skewport.width());
550 EXPECT_EQ(175, down_skewport.height()); 551 EXPECT_EQ(175, down_skewport.height());
551 EXPECT_TRUE(down_skewport.Contains(gfx::Rect(0, 50, 100, 100))); 552 EXPECT_TRUE(down_skewport.Contains(gfx::Rect(0, 50, 100, 100)));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 FakePictureLayerTilingClient client; 598 FakePictureLayerTilingClient client;
598 scoped_ptr<TestablePictureLayerTiling> tiling; 599 scoped_ptr<TestablePictureLayerTiling> tiling;
599 600
600 gfx::Rect viewport(0, 0, 100, 100); 601 gfx::Rect viewport(0, 0, 100, 100);
601 gfx::Size layer_bounds(200, 200); 602 gfx::Size layer_bounds(200, 200);
602 603
603 client.SetTileSize(gfx::Size(100, 100)); 604 client.SetTileSize(gfx::Size(100, 100));
604 client.set_tree(ACTIVE_TREE); 605 client.set_tree(ACTIVE_TREE);
605 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); 606 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client);
606 607
607 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion()); 608 tiling->ComputeTilePriorityRects(
609 ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion());
608 610
609 // Move viewport down 50 pixels in 0.5 seconds. 611 // Move viewport down 50 pixels in 0.5 seconds.
610 gfx::Rect down_skewport = 612 gfx::Rect down_skewport =
611 tiling->ComputeSkewport(1.5, gfx::Rect(0, 50, 100, 100)); 613 tiling->ComputeSkewport(1.5, gfx::Rect(0, 50, 100, 100));
612 614
613 EXPECT_EQ(0, down_skewport.x()); 615 EXPECT_EQ(0, down_skewport.x());
614 EXPECT_EQ(50, down_skewport.y()); 616 EXPECT_EQ(50, down_skewport.y());
615 EXPECT_EQ(100, down_skewport.width()); 617 EXPECT_EQ(100, down_skewport.width());
616 EXPECT_EQ(200, down_skewport.height()); 618 EXPECT_EQ(200, down_skewport.height());
617 619
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 666
665 // Tiling at 0.25 scale: this should create 47x47 tiles of size 10x10. 667 // Tiling at 0.25 scale: this should create 47x47 tiles of size 10x10.
666 // The reason is that each tile has a one pixel border, so tile at (1, 2) 668 // The reason is that each tile has a one pixel border, so tile at (1, 2)
667 // for instance begins at (8, 16) pixels. So tile at (46, 46) will begin at 669 // for instance begins at (8, 16) pixels. So tile at (46, 46) will begin at
668 // (368, 368) and extend to the end of 1500 * 0.25 = 375 edge of the 670 // (368, 368) and extend to the end of 1500 * 0.25 = 375 edge of the
669 // tiling. 671 // tiling.
670 tiling = TestablePictureLayerTiling::Create(0.25f, layer_bounds, &client); 672 tiling = TestablePictureLayerTiling::Create(0.25f, layer_bounds, &client);
671 gfx::Rect viewport_in_content_space = 673 gfx::Rect viewport_in_content_space =
672 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); 674 gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f));
673 675
674 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion()); 676 tiling->ComputeTilePriorityRects(
677 ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion());
678 tiling->UpdateAllTilePrioritiesForTesting();
675 679
676 gfx::Rect soon_rect = viewport; 680 gfx::Rect soon_rect = viewport;
677 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 681 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
678 gfx::Rect soon_rect_in_content_space = 682 gfx::Rect soon_rect_in_content_space =
679 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f)); 683 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f));
680 684
681 // Sanity checks. 685 // Sanity checks.
682 for (int i = 0; i < 47; ++i) { 686 for (int i = 0; i < 47; ++i) {
683 for (int j = 0; j < 47; ++j) { 687 for (int j = 0; j < 47; ++j) {
684 EXPECT_TRUE(tiling->TileAt(i, j)) << "i: " << i << " j: " << j; 688 EXPECT_TRUE(tiling->TileAt(i, j)) << "i: " << i << " j: " << j;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 soon_rect = viewport; 752 soon_rect = viewport;
749 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 753 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
750 soon_rect_in_content_space = 754 soon_rect_in_content_space =
751 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f)); 755 gfx::ToEnclosedRect(gfx::ScaleRect(soon_rect, 0.25f));
752 756
753 EXPECT_EQ(0, skewport.x()); 757 EXPECT_EQ(0, skewport.x());
754 EXPECT_EQ(10, skewport.y()); 758 EXPECT_EQ(10, skewport.y());
755 EXPECT_EQ(25, skewport.width()); 759 EXPECT_EQ(25, skewport.width());
756 EXPECT_EQ(35, skewport.height()); 760 EXPECT_EQ(35, skewport.height());
757 761
758 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 2.0, Occlusion()); 762 tiling->ComputeTilePriorityRects(
763 ACTIVE_TREE, viewport, 1.f, 2.0, Occlusion());
764 tiling->UpdateAllTilePrioritiesForTesting();
759 765
760 have_now = false; 766 have_now = false;
761 have_eventually = false; 767 have_eventually = false;
762 have_soon = false; 768 have_soon = false;
763 769
764 // Viewport moved, so we expect to find some NOW tiles, some SOON tiles and 770 // Viewport moved, so we expect to find some NOW tiles, some SOON tiles and
765 // some EVENTUALLY tiles. 771 // some EVENTUALLY tiles.
766 for (int i = 0; i < 47; ++i) { 772 for (int i = 0; i < 47; ++i) {
767 for (int j = 0; j < 47; ++j) { 773 for (int j = 0; j < 47; ++j) {
768 Tile* tile = tiling->TileAt(i, j); 774 Tile* tile = tiling->TileAt(i, j);
(...skipping 30 matching lines...) Expand all
799 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); 805 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE);
800 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible); 806 EXPECT_FLOAT_EQ(68.f, priority.distance_to_visible);
801 807
802 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE); 808 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE);
803 EXPECT_FLOAT_EQ(28.f, priority.distance_to_visible); 809 EXPECT_FLOAT_EQ(28.f, priority.distance_to_visible);
804 810
805 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); 811 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE);
806 EXPECT_FLOAT_EQ(4.f, priority.distance_to_visible); 812 EXPECT_FLOAT_EQ(4.f, priority.distance_to_visible);
807 813
808 // Change the underlying layer scale. 814 // Change the underlying layer scale.
809 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 2.0f, 3.0, Occlusion()); 815 tiling->ComputeTilePriorityRects(
816 ACTIVE_TREE, viewport, 2.0f, 3.0, Occlusion());
817 tiling->UpdateAllTilePrioritiesForTesting();
810 818
811 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); 819 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE);
812 EXPECT_FLOAT_EQ(136.f, priority.distance_to_visible); 820 EXPECT_FLOAT_EQ(136.f, priority.distance_to_visible);
813 821
814 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE); 822 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE);
815 EXPECT_FLOAT_EQ(56.f, priority.distance_to_visible); 823 EXPECT_FLOAT_EQ(56.f, priority.distance_to_visible);
816 824
817 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); 825 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE);
818 EXPECT_FLOAT_EQ(8.f, priority.distance_to_visible); 826 EXPECT_FLOAT_EQ(8.f, priority.distance_to_visible);
819 827
820 // Test additional scales. 828 // Test additional scales.
821 tiling = TestablePictureLayerTiling::Create(0.2f, layer_bounds, &client); 829 tiling = TestablePictureLayerTiling::Create(0.2f, layer_bounds, &client);
822 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 4.0, Occlusion()); 830 tiling->ComputeTilePriorityRects(
831 ACTIVE_TREE, viewport, 1.0f, 4.0, Occlusion());
832 tiling->UpdateAllTilePrioritiesForTesting();
823 833
824 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); 834 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE);
825 EXPECT_FLOAT_EQ(110.f, priority.distance_to_visible); 835 EXPECT_FLOAT_EQ(110.f, priority.distance_to_visible);
826 836
827 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE); 837 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE);
828 EXPECT_FLOAT_EQ(70.f, priority.distance_to_visible); 838 EXPECT_FLOAT_EQ(70.f, priority.distance_to_visible);
829 839
830 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); 840 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE);
831 EXPECT_FLOAT_EQ(60.f, priority.distance_to_visible); 841 EXPECT_FLOAT_EQ(60.f, priority.distance_to_visible);
832 842
833 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 0.5f, 5.0, Occlusion()); 843 tiling->ComputeTilePriorityRects(
844 ACTIVE_TREE, viewport, 0.5f, 5.0, Occlusion());
845 tiling->UpdateAllTilePrioritiesForTesting();
834 846
835 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); 847 priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE);
836 EXPECT_FLOAT_EQ(55.f, priority.distance_to_visible); 848 EXPECT_FLOAT_EQ(55.f, priority.distance_to_visible);
837 849
838 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE); 850 priority = tiling->TileAt(2, 5)->priority(ACTIVE_TREE);
839 EXPECT_FLOAT_EQ(35.f, priority.distance_to_visible); 851 EXPECT_FLOAT_EQ(35.f, priority.distance_to_visible);
840 852
841 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); 853 priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE);
842 EXPECT_FLOAT_EQ(30.f, priority.distance_to_visible); 854 EXPECT_FLOAT_EQ(30.f, priority.distance_to_visible);
843 } 855 }
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 gfx::Rect viewport(50, 50, 100, 100); 1083 gfx::Rect viewport(50, 50, 100, 100);
1072 gfx::Size layer_bounds(800, 800); 1084 gfx::Size layer_bounds(800, 800);
1073 1085
1074 gfx::Rect soon_rect = viewport; 1086 gfx::Rect soon_rect = viewport;
1075 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 1087 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
1076 1088
1077 client.SetTileSize(gfx::Size(30, 30)); 1089 client.SetTileSize(gfx::Size(30, 30));
1078 client.set_tree(ACTIVE_TREE); 1090 client.set_tree(ACTIVE_TREE);
1079 1091
1080 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); 1092 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client);
1081 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); 1093 tiling->ComputeTilePriorityRects(
1094 ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion());
1095 tiling->UpdateAllTilePrioritiesForTesting();
1082 1096
1083 PictureLayerTiling::TilingRasterTileIterator empty_iterator; 1097 PictureLayerTiling::TilingRasterTileIterator empty_iterator;
1084 EXPECT_FALSE(empty_iterator); 1098 EXPECT_FALSE(empty_iterator);
1085 1099
1086 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting(); 1100 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
1087 1101
1088 // Sanity check. 1102 // Sanity check.
1089 EXPECT_EQ(841u, all_tiles.size()); 1103 EXPECT_EQ(841u, all_tiles.size());
1090 1104
1091 // The explanation of each iteration is as follows: 1105 // The explanation of each iteration is as follows:
1092 // 1. First iteration tests that we can get all of the tiles correctly. 1106 // 1. First iteration tests that we can get all of the tiles correctly.
1093 // 2. Second iteration ensures that we can get all of the tiles again (first 1107 // 2. Second iteration ensures that we can get all of the tiles again (first
1094 // iteration didn't change any tiles), as well set all tiles to be ready to 1108 // iteration didn't change any tiles), as well set all tiles to be ready to
1095 // draw. 1109 // draw.
1096 // 3. Third iteration ensures that no tiles are returned, since they were all 1110 // 3. Third iteration ensures that no tiles are returned, since they were all
1097 // marked as ready to draw. 1111 // marked as ready to draw.
1098 for (int i = 0; i < 3; ++i) { 1112 for (int i = 0; i < 3; ++i) {
1099 PictureLayerTiling::TilingRasterTileIterator it(tiling.get(), ACTIVE_TREE); 1113 PictureLayerTiling::TilingRasterTileIterator it(tiling.get());
1100 1114
1101 // There are 3 bins in TilePriority. 1115 // There are 3 bins in TilePriority.
1102 bool have_tiles[3] = {}; 1116 bool have_tiles[3] = {};
1103 1117
1104 // On the third iteration, we should get no tiles since everything was 1118 // On the third iteration, we should get no tiles since everything was
1105 // marked as ready to draw. 1119 // marked as ready to draw.
1106 if (i == 2) { 1120 if (i == 2) {
1107 EXPECT_FALSE(it); 1121 EXPECT_FALSE(it);
1108 continue; 1122 continue;
1109 } 1123 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 scoped_ptr<TestablePictureLayerTiling> tiling; 1189 scoped_ptr<TestablePictureLayerTiling> tiling;
1176 1190
1177 gfx::Rect viewport(50, 0, 100, 100); 1191 gfx::Rect viewport(50, 0, 100, 100);
1178 gfx::Rect moved_viewport(50, 0, 100, 500); 1192 gfx::Rect moved_viewport(50, 0, 100, 500);
1179 gfx::Size layer_bounds(1000, 1000); 1193 gfx::Size layer_bounds(1000, 1000);
1180 1194
1181 client.SetTileSize(gfx::Size(30, 30)); 1195 client.SetTileSize(gfx::Size(30, 30));
1182 client.set_tree(ACTIVE_TREE); 1196 client.set_tree(ACTIVE_TREE);
1183 1197
1184 tiling = TestablePictureLayerTiling::Create(1.f, layer_bounds, &client); 1198 tiling = TestablePictureLayerTiling::Create(1.f, layer_bounds, &client);
1185 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); 1199 tiling->ComputeTilePriorityRects(
1186 tiling->UpdateTilePriorities( 1200 ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion());
1201 tiling->ComputeTilePriorityRects(
1187 ACTIVE_TREE, moved_viewport, 1.0f, 2.0, Occlusion()); 1202 ACTIVE_TREE, moved_viewport, 1.0f, 2.0, Occlusion());
1203 tiling->UpdateAllTilePrioritiesForTesting();
1188 1204
1189 gfx::Rect soon_rect = moved_viewport; 1205 gfx::Rect soon_rect = moved_viewport;
1190 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 1206 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
1191 1207
1192 // There are 3 bins in TilePriority. 1208 // There are 3 bins in TilePriority.
1193 bool have_tiles[3] = {}; 1209 bool have_tiles[3] = {};
1194 Tile* last_tile = NULL; 1210 Tile* last_tile = NULL;
1195 int eventually_bin_order_correct_count = 0; 1211 int eventually_bin_order_correct_count = 0;
1196 int eventually_bin_order_incorrect_count = 0; 1212 int eventually_bin_order_incorrect_count = 0;
1197 for (PictureLayerTiling::TilingRasterTileIterator it(tiling.get(), 1213 for (PictureLayerTiling::TilingRasterTileIterator it(tiling.get()); it;
1198 ACTIVE_TREE);
1199 it;
1200 ++it) { 1214 ++it) {
1201 if (!last_tile) 1215 if (!last_tile)
1202 last_tile = *it; 1216 last_tile = *it;
1203 1217
1204 Tile* new_tile = *it; 1218 Tile* new_tile = *it;
1205 1219
1206 TilePriority last_priority = last_tile->priority(ACTIVE_TREE); 1220 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
1207 TilePriority new_priority = new_tile->priority(ACTIVE_TREE); 1221 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
1208 1222
1209 have_tiles[new_priority.priority_bin] = true; 1223 have_tiles[new_priority.priority_bin] = true;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 FakePictureLayerTilingClient client(resource_provider.get()); 1264 FakePictureLayerTilingClient client(resource_provider.get());
1251 scoped_ptr<TestablePictureLayerTiling> tiling; 1265 scoped_ptr<TestablePictureLayerTiling> tiling;
1252 1266
1253 gfx::Rect viewport(50, 50, 100, 100); 1267 gfx::Rect viewport(50, 50, 100, 100);
1254 gfx::Size layer_bounds(2000, 2000); 1268 gfx::Size layer_bounds(2000, 2000);
1255 1269
1256 client.SetTileSize(gfx::Size(30, 30)); 1270 client.SetTileSize(gfx::Size(30, 30));
1257 client.set_tree(ACTIVE_TREE); 1271 client.set_tree(ACTIVE_TREE);
1258 1272
1259 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); 1273 tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client);
1260 tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); 1274 tiling->ComputeTilePriorityRects(
1275 ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion());
1276 tiling->UpdateAllTilePrioritiesForTesting();
1261 1277
1262 PictureLayerTiling::TilingRasterTileIterator empty_iterator; 1278 PictureLayerTiling::TilingRasterTileIterator empty_iterator;
1263 EXPECT_FALSE(empty_iterator); 1279 EXPECT_FALSE(empty_iterator);
1264 1280
1265 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting(); 1281 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
1266 1282
1267 PictureLayerTiling::TilingEvictionTileIterator it( 1283 PictureLayerTiling::TilingEvictionTileIterator it(
1268 tiling.get(), SMOOTHNESS_TAKES_PRIORITY, PictureLayerTiling::NOW); 1284 tiling.get(), SMOOTHNESS_TAKES_PRIORITY, PictureLayerTiling::NOW);
1269 1285
1270 // Tiles don't have resources to evict. 1286 // Tiles don't have resources to evict.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 EXPECT_EQ(all_tiles_set, eviction_tiles); 1339 EXPECT_EQ(all_tiles_set, eviction_tiles);
1324 } 1340 }
1325 1341
1326 TEST_F(PictureLayerTilingIteratorTest, TilesExist) { 1342 TEST_F(PictureLayerTilingIteratorTest, TilesExist) {
1327 gfx::Size layer_bounds(1099, 801); 1343 gfx::Size layer_bounds(1099, 801);
1328 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 1344 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
1329 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds)); 1345 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
1330 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 1346 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1331 1347
1332 client_.set_tree(ACTIVE_TREE); 1348 client_.set_tree(ACTIVE_TREE);
1333 tiling_->UpdateTilePriorities( 1349 tiling_->ComputeTilePriorityRects(
1334 ACTIVE_TREE, 1350 ACTIVE_TREE,
1335 gfx::Rect(layer_bounds), // visible content rect 1351 gfx::Rect(layer_bounds), // visible content rect
1336 1.f, // current contents scale 1352 1.f, // current contents scale
1337 1.0, // current frame time 1353 1.0, // current frame time
1338 Occlusion()); 1354 Occlusion());
1339 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 1355 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
1340 1356
1341 // Make the viewport rect empty. All tiles are killed and become zombies. 1357 // Make the viewport rect empty. All tiles are killed and become zombies.
1342 tiling_->UpdateTilePriorities(ACTIVE_TREE, 1358 tiling_->ComputeTilePriorityRects(ACTIVE_TREE,
1343 gfx::Rect(), // visible content rect 1359 gfx::Rect(), // visible content rect
1344 1.f, // current contents scale 1360 1.f, // current contents scale
1345 2.0, // current frame time 1361 2.0, // current frame time
1346 Occlusion()); 1362 Occlusion());
1347 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 1363 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1348 } 1364 }
1349 1365
1350 TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) { 1366 TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) {
1351 gfx::Size layer_bounds(1099, 801); 1367 gfx::Size layer_bounds(1099, 801);
1352 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 1368 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
1353 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds)); 1369 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
1354 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 1370 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1355 1371
1356 gfx::Rect giant_rect(-10000000, -10000000, 1000000000, 1000000000); 1372 gfx::Rect giant_rect(-10000000, -10000000, 1000000000, 1000000000);
1357 1373
1358 client_.set_tree(ACTIVE_TREE); 1374 client_.set_tree(ACTIVE_TREE);
1359 tiling_->UpdateTilePriorities( 1375 tiling_->ComputeTilePriorityRects(
1360 ACTIVE_TREE, 1376 ACTIVE_TREE,
1361 gfx::Rect(layer_bounds), // visible content rect 1377 gfx::Rect(layer_bounds), // visible content rect
1362 1.f, // current contents scale 1378 1.f, // current contents scale
1363 1.0, // current frame time 1379 1.0, // current frame time
1364 Occlusion()); 1380 Occlusion());
1365 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 1381 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
1366 1382
1367 // If the visible content rect is empty, it should still have live tiles. 1383 // If the visible content rect is empty, it should still have live tiles.
1368 tiling_->UpdateTilePriorities(ACTIVE_TREE, 1384 tiling_->ComputeTilePriorityRects(ACTIVE_TREE,
1369 giant_rect, // visible content rect 1385 giant_rect, // visible content rect
1370 1.f, // current contents scale 1386 1.f, // current contents scale
1371 2.0, // current frame time 1387 2.0, // current frame time
1372 Occlusion()); 1388 Occlusion());
1373 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 1389 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
1374 } 1390 }
1375 1391
1376 TEST_F(PictureLayerTilingIteratorTest, TilesExistOutsideViewport) { 1392 TEST_F(PictureLayerTilingIteratorTest, TilesExistOutsideViewport) {
1377 gfx::Size layer_bounds(1099, 801); 1393 gfx::Size layer_bounds(1099, 801);
1378 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 1394 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
1379 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds)); 1395 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
1380 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 1396 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1381 1397
1382 // This rect does not intersect with the layer, as the layer is outside the 1398 // This rect does not intersect with the layer, as the layer is outside the
1383 // viewport. 1399 // viewport.
1384 gfx::Rect viewport_rect(1100, 0, 1000, 1000); 1400 gfx::Rect viewport_rect(1100, 0, 1000, 1000);
1385 EXPECT_FALSE(viewport_rect.Intersects(gfx::Rect(layer_bounds))); 1401 EXPECT_FALSE(viewport_rect.Intersects(gfx::Rect(layer_bounds)));
1386 1402
1387 client_.set_tree(ACTIVE_TREE); 1403 client_.set_tree(ACTIVE_TREE);
1388 tiling_->UpdateTilePriorities(ACTIVE_TREE, 1404 tiling_->ComputeTilePriorityRects(ACTIVE_TREE,
1389 viewport_rect, // visible content rect 1405 viewport_rect, // visible content rect
1390 1.f, // current contents scale 1406 1.f, // current contents scale
1391 1.0, // current frame time 1407 1.0, // current frame time
1392 Occlusion()); 1408 Occlusion());
1393 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 1409 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
1394 } 1410 }
1395 1411
1396 static void TilesIntersectingRectExist(const gfx::Rect& rect, 1412 static void TilesIntersectingRectExist(const gfx::Rect& rect,
1397 bool intersect_exists, 1413 bool intersect_exists,
1398 Tile* tile, 1414 Tile* tile,
1399 const gfx::Rect& geometry_rect) { 1415 const gfx::Rect& geometry_rect) {
1400 bool intersects = rect.Intersects(geometry_rect); 1416 bool intersects = rect.Intersects(geometry_rect);
1401 bool expected_exists = intersect_exists ? intersects : !intersects; 1417 bool expected_exists = intersect_exists ? intersects : !intersects;
1402 EXPECT_EQ(expected_exists, tile != NULL) 1418 EXPECT_EQ(expected_exists, tile != NULL)
1403 << "Rects intersecting " << rect.ToString() << " should exist. " 1419 << "Rects intersecting " << rect.ToString() << " should exist. "
1404 << "Current tile rect is " << geometry_rect.ToString(); 1420 << "Current tile rect is " << geometry_rect.ToString();
1405 } 1421 }
1406 1422
1407 TEST_F(PictureLayerTilingIteratorTest, 1423 TEST_F(PictureLayerTilingIteratorTest,
1408 TilesExistLargeViewportAndLayerWithSmallVisibleArea) { 1424 TilesExistLargeViewportAndLayerWithSmallVisibleArea) {
1409 gfx::Size layer_bounds(10000, 10000); 1425 gfx::Size layer_bounds(10000, 10000);
1410 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 1426 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
1411 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds)); 1427 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
1412 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 1428 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
1413 1429
1414 gfx::Rect visible_rect(8000, 8000, 50, 50); 1430 gfx::Rect visible_rect(8000, 8000, 50, 50);
1415 1431
1416 client_.set_tree(ACTIVE_TREE); 1432 client_.set_tree(ACTIVE_TREE);
1417 set_max_tiles_for_interest_area(1); 1433 set_max_tiles_for_interest_area(1);
1418 tiling_->UpdateTilePriorities(ACTIVE_TREE, 1434 tiling_->ComputeTilePriorityRects(ACTIVE_TREE,
1419 visible_rect, // visible content rect 1435 visible_rect, // visible content rect
1420 1.f, // current contents scale 1436 1.f, // current contents scale
1421 1.0, // current frame time 1437 1.0, // current frame time
1422 Occlusion()); 1438 Occlusion());
1423 VerifyTiles(1.f, 1439 VerifyTiles(1.f,
1424 gfx::Rect(layer_bounds), 1440 gfx::Rect(layer_bounds),
1425 base::Bind(&TilesIntersectingRectExist, visible_rect, true)); 1441 base::Bind(&TilesIntersectingRectExist, visible_rect, true));
1426 } 1442 }
1427 1443
1428 TEST_F(PictureLayerTilingIteratorTest, AddTilingsToMatchScale) { 1444 TEST_F(PictureLayerTilingIteratorTest, AddTilingsToMatchScale) {
1429 gfx::Size layer_bounds(1099, 801); 1445 gfx::Size layer_bounds(1099, 801);
1430 gfx::Size tile_size(100, 100); 1446 gfx::Size tile_size(100, 100);
1431 1447
1432 client_.SetTileSize(tile_size); 1448 client_.SetTileSize(tile_size);
(...skipping 24 matching lines...) Expand all
1457 PictureLayerTilingSet pending_set(&client_, layer_bounds); 1473 PictureLayerTilingSet pending_set(&client_, layer_bounds);
1458 Region invalidation; 1474 Region invalidation;
1459 pending_set.SyncTilings(active_set, layer_bounds, invalidation, 0.f); 1475 pending_set.SyncTilings(active_set, layer_bounds, invalidation, 0.f);
1460 1476
1461 // The pending tiling starts with no tiles. 1477 // The pending tiling starts with no tiles.
1462 VerifyTiles(pending_set.tiling_at(0), 1478 VerifyTiles(pending_set.tiling_at(0),
1463 1.f, 1479 1.f,
1464 gfx::Rect(layer_bounds), 1480 gfx::Rect(layer_bounds),
1465 base::Bind(&TileExists, false)); 1481 base::Bind(&TileExists, false));
1466 1482
1467 // UpdateTilePriorities on the pending tiling at the same frame time. The 1483 // ComputeTilePriorityRects on the pending tiling at the same frame time. The
1468 // pending tiling should get tiles. 1484 // pending tiling should get tiles.
1469 UpdateAllTilePriorities(&pending_set, 1485 UpdateAllTilePriorities(&pending_set,
1470 PENDING_TREE, 1486 PENDING_TREE,
1471 gfx::Rect(layer_bounds), // visible content rect 1487 gfx::Rect(layer_bounds), // visible content rect
1472 1.f, // current contents scale 1488 1.f, // current contents scale
1473 1.0); // current frame time 1489 1.0); // current frame time
1474 1490
1475 VerifyTiles(pending_set.tiling_at(0), 1491 VerifyTiles(pending_set.tiling_at(0),
1476 1.f, 1492 1.f,
1477 gfx::Rect(layer_bounds), 1493 gfx::Rect(layer_bounds),
1478 base::Bind(&TileExists, true)); 1494 base::Bind(&TileExists, true));
1479 } 1495 }
1480 1496
1481 TEST(UpdateTilePrioritiesTest, VisibleTiles) { 1497 TEST(ComputeTilePriorityRectsTest, VisibleTiles) {
1482 // The TilePriority of visible tiles should have zero distance_to_visible 1498 // The TilePriority of visible tiles should have zero distance_to_visible
1483 // and time_to_visible. 1499 // and time_to_visible.
1484 1500
1485 FakePictureLayerTilingClient client; 1501 FakePictureLayerTilingClient client;
1486 scoped_ptr<TestablePictureLayerTiling> tiling; 1502 scoped_ptr<TestablePictureLayerTiling> tiling;
1487 1503
1488 gfx::Size device_viewport(800, 600); 1504 gfx::Size device_viewport(800, 600);
1489 gfx::Size last_layer_bounds(200, 200); 1505 gfx::Size last_layer_bounds(200, 200);
1490 gfx::Size current_layer_bounds(200, 200); 1506 gfx::Size current_layer_bounds(200, 200);
1491 float current_layer_contents_scale = 1.f; 1507 float current_layer_contents_scale = 1.f;
1492 gfx::Transform current_screen_transform; 1508 gfx::Transform current_screen_transform;
1493 double current_frame_time_in_seconds = 1.0; 1509 double current_frame_time_in_seconds = 1.0;
1494 1510
1495 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1511 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1496 current_screen_transform, device_viewport); 1512 current_screen_transform, device_viewport);
1497 1513
1498 client.SetTileSize(gfx::Size(100, 100)); 1514 client.SetTileSize(gfx::Size(100, 100));
1499 client.set_tree(ACTIVE_TREE); 1515 client.set_tree(ACTIVE_TREE);
1500 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1516 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1501 current_layer_bounds, 1517 current_layer_bounds,
1502 &client); 1518 &client);
1503 1519
1504 tiling->UpdateTilePriorities(ACTIVE_TREE, 1520 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1505 viewport_in_layer_space, 1521 viewport_in_layer_space,
1506 current_layer_contents_scale, 1522 current_layer_contents_scale,
1507 current_frame_time_in_seconds, 1523 current_frame_time_in_seconds,
1508 Occlusion()); 1524 Occlusion());
1525 tiling->UpdateAllTilePrioritiesForTesting();
1509 1526
1510 ASSERT_TRUE(tiling->TileAt(0, 0)); 1527 ASSERT_TRUE(tiling->TileAt(0, 0));
1511 ASSERT_TRUE(tiling->TileAt(0, 1)); 1528 ASSERT_TRUE(tiling->TileAt(0, 1));
1512 ASSERT_TRUE(tiling->TileAt(1, 0)); 1529 ASSERT_TRUE(tiling->TileAt(1, 0));
1513 ASSERT_TRUE(tiling->TileAt(1, 1)); 1530 ASSERT_TRUE(tiling->TileAt(1, 1));
1514 1531
1515 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1532 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1516 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1533 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1517 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1534 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1518 1535
1519 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1536 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1520 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1537 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1521 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1538 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1522 1539
1523 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1540 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1524 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1541 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1525 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1542 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1526 1543
1527 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1544 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1528 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1545 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1529 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1546 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1530 } 1547 }
1531 1548
1532 TEST(UpdateTilePrioritiesTest, OffscreenTiles) { 1549 TEST(ComputeTilePriorityRectsTest, OffscreenTiles) {
1533 // The TilePriority of offscreen tiles (without movement) should have nonzero 1550 // The TilePriority of offscreen tiles (without movement) should have nonzero
1534 // distance_to_visible and infinite time_to_visible. 1551 // distance_to_visible and infinite time_to_visible.
1535 1552
1536 FakePictureLayerTilingClient client; 1553 FakePictureLayerTilingClient client;
1537 scoped_ptr<TestablePictureLayerTiling> tiling; 1554 scoped_ptr<TestablePictureLayerTiling> tiling;
1538 1555
1539 gfx::Size device_viewport(800, 600); 1556 gfx::Size device_viewport(800, 600);
1540 gfx::Size last_layer_bounds(200, 200); 1557 gfx::Size last_layer_bounds(200, 200);
1541 gfx::Size current_layer_bounds(200, 200); 1558 gfx::Size current_layer_bounds(200, 200);
1542 float current_layer_contents_scale = 1.f; 1559 float current_layer_contents_scale = 1.f;
1543 gfx::Transform last_screen_transform; 1560 gfx::Transform last_screen_transform;
1544 gfx::Transform current_screen_transform; 1561 gfx::Transform current_screen_transform;
1545 double current_frame_time_in_seconds = 1.0; 1562 double current_frame_time_in_seconds = 1.0;
1546 1563
1547 current_screen_transform.Translate(850, 0); 1564 current_screen_transform.Translate(850, 0);
1548 last_screen_transform = current_screen_transform; 1565 last_screen_transform = current_screen_transform;
1549 1566
1550 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1567 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1551 current_screen_transform, device_viewport); 1568 current_screen_transform, device_viewport);
1552 1569
1553 client.SetTileSize(gfx::Size(100, 100)); 1570 client.SetTileSize(gfx::Size(100, 100));
1554 client.set_tree(ACTIVE_TREE); 1571 client.set_tree(ACTIVE_TREE);
1555 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1572 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1556 current_layer_bounds, 1573 current_layer_bounds,
1557 &client); 1574 &client);
1558 1575
1559 tiling->UpdateTilePriorities(ACTIVE_TREE, 1576 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1560 viewport_in_layer_space, 1577 viewport_in_layer_space,
1561 current_layer_contents_scale, 1578 current_layer_contents_scale,
1562 current_frame_time_in_seconds, 1579 current_frame_time_in_seconds,
1563 Occlusion()); 1580 Occlusion());
1581 tiling->UpdateAllTilePrioritiesForTesting();
1564 1582
1565 ASSERT_TRUE(tiling->TileAt(0, 0)); 1583 ASSERT_TRUE(tiling->TileAt(0, 0));
1566 ASSERT_TRUE(tiling->TileAt(0, 1)); 1584 ASSERT_TRUE(tiling->TileAt(0, 1));
1567 ASSERT_TRUE(tiling->TileAt(1, 0)); 1585 ASSERT_TRUE(tiling->TileAt(1, 0));
1568 ASSERT_TRUE(tiling->TileAt(1, 1)); 1586 ASSERT_TRUE(tiling->TileAt(1, 1));
1569 1587
1570 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1588 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1571 EXPECT_GT(priority.distance_to_visible, 0.f); 1589 EXPECT_GT(priority.distance_to_visible, 0.f);
1572 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1590 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1573 1591
(...skipping 13 matching lines...) Expand all
1587 // larger distance to visible. 1605 // larger distance to visible.
1588 TilePriority left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1606 TilePriority left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1589 TilePriority right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1607 TilePriority right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1590 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); 1608 EXPECT_GT(right.distance_to_visible, left.distance_to_visible);
1591 1609
1592 left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1610 left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1593 right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1611 right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1594 EXPECT_GT(right.distance_to_visible, left.distance_to_visible); 1612 EXPECT_GT(right.distance_to_visible, left.distance_to_visible);
1595 } 1613 }
1596 1614
1597 TEST(UpdateTilePrioritiesTest, PartiallyOffscreenLayer) { 1615 TEST(ComputeTilePriorityRectsTest, PartiallyOffscreenLayer) {
1598 // Sanity check that a layer with some tiles visible and others offscreen has 1616 // Sanity check that a layer with some tiles visible and others offscreen has
1599 // correct TilePriorities for each tile. 1617 // correct TilePriorities for each tile.
1600 1618
1601 FakePictureLayerTilingClient client; 1619 FakePictureLayerTilingClient client;
1602 scoped_ptr<TestablePictureLayerTiling> tiling; 1620 scoped_ptr<TestablePictureLayerTiling> tiling;
1603 1621
1604 gfx::Size device_viewport(800, 600); 1622 gfx::Size device_viewport(800, 600);
1605 gfx::Size last_layer_bounds(200, 200); 1623 gfx::Size last_layer_bounds(200, 200);
1606 gfx::Size current_layer_bounds(200, 200); 1624 gfx::Size current_layer_bounds(200, 200);
1607 float current_layer_contents_scale = 1.f; 1625 float current_layer_contents_scale = 1.f;
1608 gfx::Transform last_screen_transform; 1626 gfx::Transform last_screen_transform;
1609 gfx::Transform current_screen_transform; 1627 gfx::Transform current_screen_transform;
1610 double current_frame_time_in_seconds = 1.0; 1628 double current_frame_time_in_seconds = 1.0;
1611 1629
1612 current_screen_transform.Translate(705, 505); 1630 current_screen_transform.Translate(705, 505);
1613 last_screen_transform = current_screen_transform; 1631 last_screen_transform = current_screen_transform;
1614 1632
1615 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1633 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1616 current_screen_transform, device_viewport); 1634 current_screen_transform, device_viewport);
1617 1635
1618 client.SetTileSize(gfx::Size(100, 100)); 1636 client.SetTileSize(gfx::Size(100, 100));
1619 client.set_tree(ACTIVE_TREE); 1637 client.set_tree(ACTIVE_TREE);
1620 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1638 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1621 current_layer_bounds, 1639 current_layer_bounds,
1622 &client); 1640 &client);
1623 1641
1624 tiling->UpdateTilePriorities(ACTIVE_TREE, 1642 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1625 viewport_in_layer_space, 1643 viewport_in_layer_space,
1626 current_layer_contents_scale, 1644 current_layer_contents_scale,
1627 current_frame_time_in_seconds, 1645 current_frame_time_in_seconds,
1628 Occlusion()); 1646 Occlusion());
1647 tiling->UpdateAllTilePrioritiesForTesting();
1629 1648
1630 ASSERT_TRUE(tiling->TileAt(0, 0)); 1649 ASSERT_TRUE(tiling->TileAt(0, 0));
1631 ASSERT_TRUE(tiling->TileAt(0, 1)); 1650 ASSERT_TRUE(tiling->TileAt(0, 1));
1632 ASSERT_TRUE(tiling->TileAt(1, 0)); 1651 ASSERT_TRUE(tiling->TileAt(1, 0));
1633 ASSERT_TRUE(tiling->TileAt(1, 1)); 1652 ASSERT_TRUE(tiling->TileAt(1, 1));
1634 1653
1635 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1654 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1636 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1655 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1637 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1656 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1638 1657
1639 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1658 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1640 EXPECT_GT(priority.distance_to_visible, 0.f); 1659 EXPECT_GT(priority.distance_to_visible, 0.f);
1641 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1660 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1642 1661
1643 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1662 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1644 EXPECT_GT(priority.distance_to_visible, 0.f); 1663 EXPECT_GT(priority.distance_to_visible, 0.f);
1645 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1664 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1646 1665
1647 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1666 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1648 EXPECT_GT(priority.distance_to_visible, 0.f); 1667 EXPECT_GT(priority.distance_to_visible, 0.f);
1649 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1668 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1650 } 1669 }
1651 1670
1652 TEST(UpdateTilePrioritiesTest, PartiallyOffscreenRotatedLayer) { 1671 TEST(ComputeTilePriorityRectsTest, PartiallyOffscreenRotatedLayer) {
1653 // Each tile of a layer may be affected differently by a transform; Check 1672 // Each tile of a layer may be affected differently by a transform; Check
1654 // that UpdateTilePriorities correctly accounts for the transform between 1673 // that ComputeTilePriorityRects correctly accounts for the transform between
1655 // layer space and screen space. 1674 // layer space and screen space.
1656 1675
1657 FakePictureLayerTilingClient client; 1676 FakePictureLayerTilingClient client;
1658 scoped_ptr<TestablePictureLayerTiling> tiling; 1677 scoped_ptr<TestablePictureLayerTiling> tiling;
1659 1678
1660 gfx::Size device_viewport(800, 600); 1679 gfx::Size device_viewport(800, 600);
1661 gfx::Size last_layer_bounds(200, 200); 1680 gfx::Size last_layer_bounds(200, 200);
1662 gfx::Size current_layer_bounds(200, 200); 1681 gfx::Size current_layer_bounds(200, 200);
1663 float current_layer_contents_scale = 1.f; 1682 float current_layer_contents_scale = 1.f;
1664 gfx::Transform last_screen_transform; 1683 gfx::Transform last_screen_transform;
1665 gfx::Transform current_screen_transform; 1684 gfx::Transform current_screen_transform;
1666 double current_frame_time_in_seconds = 1.0; 1685 double current_frame_time_in_seconds = 1.0;
1667 1686
1668 // A diagonally rotated layer that is partially off the bottom of the screen. 1687 // A diagonally rotated layer that is partially off the bottom of the screen.
1669 // In this configuration, only the top-left tile would be visible. 1688 // In this configuration, only the top-left tile would be visible.
1670 current_screen_transform.Translate(600, 750); 1689 current_screen_transform.Translate(600, 750);
1671 current_screen_transform.RotateAboutZAxis(45); 1690 current_screen_transform.RotateAboutZAxis(45);
1672 last_screen_transform = current_screen_transform; 1691 last_screen_transform = current_screen_transform;
1673 1692
1674 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1693 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1675 current_screen_transform, device_viewport); 1694 current_screen_transform, device_viewport);
1676 1695
1677 client.SetTileSize(gfx::Size(100, 100)); 1696 client.SetTileSize(gfx::Size(100, 100));
1678 client.set_tree(ACTIVE_TREE); 1697 client.set_tree(ACTIVE_TREE);
1679 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1698 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1680 current_layer_bounds, 1699 current_layer_bounds,
1681 &client); 1700 &client);
1682 1701
1683 tiling->UpdateTilePriorities(ACTIVE_TREE, 1702 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1684 viewport_in_layer_space, 1703 viewport_in_layer_space,
1685 current_layer_contents_scale, 1704 current_layer_contents_scale,
1686 current_frame_time_in_seconds, 1705 current_frame_time_in_seconds,
1687 Occlusion()); 1706 Occlusion());
1707 tiling->UpdateAllTilePrioritiesForTesting();
1688 1708
1689 ASSERT_TRUE(tiling->TileAt(0, 0)); 1709 ASSERT_TRUE(tiling->TileAt(0, 0));
1690 ASSERT_TRUE(tiling->TileAt(0, 1)); 1710 ASSERT_TRUE(tiling->TileAt(0, 1));
1691 ASSERT_TRUE(tiling->TileAt(1, 0)); 1711 ASSERT_TRUE(tiling->TileAt(1, 0));
1692 ASSERT_TRUE(tiling->TileAt(1, 1)); 1712 ASSERT_TRUE(tiling->TileAt(1, 1));
1693 1713
1694 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1714 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1695 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1715 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1696 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 1716 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
1697 1717
(...skipping 12 matching lines...) Expand all
1710 // Furthermore, in this scenario the bottom-right tile should have the larger 1730 // Furthermore, in this scenario the bottom-right tile should have the larger
1711 // distance to visible. 1731 // distance to visible.
1712 TilePriority top_left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1732 TilePriority top_left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1713 TilePriority top_right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1733 TilePriority top_right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1714 TilePriority bottom_right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1734 TilePriority bottom_right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1715 EXPECT_GT(top_right.distance_to_visible, top_left.distance_to_visible); 1735 EXPECT_GT(top_right.distance_to_visible, top_left.distance_to_visible);
1716 1736
1717 EXPECT_EQ(bottom_right.distance_to_visible, top_right.distance_to_visible); 1737 EXPECT_EQ(bottom_right.distance_to_visible, top_right.distance_to_visible);
1718 } 1738 }
1719 1739
1720 TEST(UpdateTilePrioritiesTest, PerspectiveLayer) { 1740 TEST(ComputeTilePriorityRectsTest, PerspectiveLayer) {
1721 // Perspective transforms need to take a different code path. 1741 // Perspective transforms need to take a different code path.
1722 // This test checks tile priorities of a perspective layer. 1742 // This test checks tile priorities of a perspective layer.
1723 1743
1724 FakePictureLayerTilingClient client; 1744 FakePictureLayerTilingClient client;
1725 scoped_ptr<TestablePictureLayerTiling> tiling; 1745 scoped_ptr<TestablePictureLayerTiling> tiling;
1726 1746
1727 gfx::Size device_viewport(800, 600); 1747 gfx::Size device_viewport(800, 600);
1728 gfx::Rect visible_layer_rect(0, 0, 0, 0); // offscreen. 1748 gfx::Rect visible_layer_rect(0, 0, 0, 0); // offscreen.
1729 gfx::Size last_layer_bounds(200, 200); 1749 gfx::Size last_layer_bounds(200, 200);
1730 gfx::Size current_layer_bounds(200, 200); 1750 gfx::Size current_layer_bounds(200, 200);
(...skipping 25 matching lines...) Expand all
1756 1776
1757 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1777 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1758 current_screen_transform, device_viewport); 1778 current_screen_transform, device_viewport);
1759 1779
1760 client.SetTileSize(gfx::Size(100, 100)); 1780 client.SetTileSize(gfx::Size(100, 100));
1761 client.set_tree(ACTIVE_TREE); 1781 client.set_tree(ACTIVE_TREE);
1762 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1782 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1763 current_layer_bounds, 1783 current_layer_bounds,
1764 &client); 1784 &client);
1765 1785
1766 tiling->UpdateTilePriorities(ACTIVE_TREE, 1786 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1767 viewport_in_layer_space, 1787 viewport_in_layer_space,
1768 current_layer_contents_scale, 1788 current_layer_contents_scale,
1769 current_frame_time_in_seconds, 1789 current_frame_time_in_seconds,
1770 Occlusion()); 1790 Occlusion());
1791 tiling->UpdateAllTilePrioritiesForTesting();
1771 1792
1772 ASSERT_TRUE(tiling->TileAt(0, 0)); 1793 ASSERT_TRUE(tiling->TileAt(0, 0));
1773 ASSERT_TRUE(tiling->TileAt(0, 1)); 1794 ASSERT_TRUE(tiling->TileAt(0, 1));
1774 ASSERT_TRUE(tiling->TileAt(1, 0)); 1795 ASSERT_TRUE(tiling->TileAt(1, 0));
1775 ASSERT_TRUE(tiling->TileAt(1, 1)); 1796 ASSERT_TRUE(tiling->TileAt(1, 1));
1776 1797
1777 // All tiles will have a positive distance_to_visible 1798 // All tiles will have a positive distance_to_visible
1778 // and an infinite time_to_visible. 1799 // and an infinite time_to_visible.
1779 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1800 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1780 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); 1801 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f);
(...skipping 17 matching lines...) Expand all
1798 TilePriority top_left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1819 TilePriority top_left = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1799 TilePriority top_right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1820 TilePriority top_right = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1800 TilePriority bottom_left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1821 TilePriority bottom_left = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1801 TilePriority bottom_right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1822 TilePriority bottom_right = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1802 1823
1803 EXPECT_GT(bottom_right.distance_to_visible, top_right.distance_to_visible); 1824 EXPECT_GT(bottom_right.distance_to_visible, top_right.distance_to_visible);
1804 1825
1805 EXPECT_GT(bottom_left.distance_to_visible, top_left.distance_to_visible); 1826 EXPECT_GT(bottom_left.distance_to_visible, top_left.distance_to_visible);
1806 } 1827 }
1807 1828
1808 TEST(UpdateTilePrioritiesTest, PerspectiveLayerClippedByW) { 1829 TEST(ComputeTilePriorityRectsTest, PerspectiveLayerClippedByW) {
1809 // Perspective transforms need to take a different code path. 1830 // Perspective transforms need to take a different code path.
1810 // This test checks tile priorities of a perspective layer. 1831 // This test checks tile priorities of a perspective layer.
1811 1832
1812 FakePictureLayerTilingClient client; 1833 FakePictureLayerTilingClient client;
1813 scoped_ptr<TestablePictureLayerTiling> tiling; 1834 scoped_ptr<TestablePictureLayerTiling> tiling;
1814 1835
1815 gfx::Size device_viewport(800, 600); 1836 gfx::Size device_viewport(800, 600);
1816 gfx::Size last_layer_bounds(200, 200); 1837 gfx::Size last_layer_bounds(200, 200);
1817 gfx::Size current_layer_bounds(200, 200); 1838 gfx::Size current_layer_bounds(200, 200);
1818 float current_layer_contents_scale = 1.f; 1839 float current_layer_contents_scale = 1.f;
(...skipping 30 matching lines...) Expand all
1849 1870
1850 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1871 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1851 current_screen_transform, device_viewport); 1872 current_screen_transform, device_viewport);
1852 1873
1853 client.SetTileSize(gfx::Size(100, 100)); 1874 client.SetTileSize(gfx::Size(100, 100));
1854 client.set_tree(ACTIVE_TREE); 1875 client.set_tree(ACTIVE_TREE);
1855 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1876 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1856 current_layer_bounds, 1877 current_layer_bounds,
1857 &client); 1878 &client);
1858 1879
1859 tiling->UpdateTilePriorities(ACTIVE_TREE, 1880 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1860 viewport_in_layer_space, 1881 viewport_in_layer_space,
1861 current_layer_contents_scale, 1882 current_layer_contents_scale,
1862 current_frame_time_in_seconds, 1883 current_frame_time_in_seconds,
1863 Occlusion()); 1884 Occlusion());
1885 tiling->UpdateAllTilePrioritiesForTesting();
1864 1886
1865 ASSERT_TRUE(tiling->TileAt(0, 0)); 1887 ASSERT_TRUE(tiling->TileAt(0, 0));
1866 ASSERT_TRUE(tiling->TileAt(0, 1)); 1888 ASSERT_TRUE(tiling->TileAt(0, 1));
1867 ASSERT_TRUE(tiling->TileAt(1, 0)); 1889 ASSERT_TRUE(tiling->TileAt(1, 0));
1868 ASSERT_TRUE(tiling->TileAt(1, 1)); 1890 ASSERT_TRUE(tiling->TileAt(1, 1));
1869 1891
1870 // Left-side tiles will be clipped by the transform, so we have to assume 1892 // Left-side tiles will be clipped by the transform, so we have to assume
1871 // they are visible just in case. 1893 // they are visible just in case.
1872 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1894 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1873 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 1895 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
1874 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin); 1896 EXPECT_FLOAT_EQ(TilePriority::NOW, priority.priority_bin);
1875 1897
1876 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1898 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1877 EXPECT_GT(priority.distance_to_visible, 0.f); 1899 EXPECT_GT(priority.distance_to_visible, 0.f);
1878 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1900 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1879 1901
1880 // Right-side tiles will have a positive distance_to_visible 1902 // Right-side tiles will have a positive distance_to_visible
1881 // and an infinite time_to_visible. 1903 // and an infinite time_to_visible.
1882 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1904 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1883 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f); 1905 EXPECT_FLOAT_EQ(priority.distance_to_visible, 0.f);
1884 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 1906 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
1885 1907
1886 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1908 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1887 EXPECT_GT(priority.distance_to_visible, 0.f); 1909 EXPECT_GT(priority.distance_to_visible, 0.f);
1888 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1910 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1889 } 1911 }
1890 1912
1891 TEST(UpdateTilePrioritiesTest, BasicMotion) { 1913 TEST(ComputeTilePriorityRectsTest, BasicMotion) {
1892 // Test that time_to_visible is computed correctly when 1914 // Test that time_to_visible is computed correctly when
1893 // there is some motion. 1915 // there is some motion.
1894 1916
1895 FakePictureLayerTilingClient client; 1917 FakePictureLayerTilingClient client;
1896 scoped_ptr<TestablePictureLayerTiling> tiling; 1918 scoped_ptr<TestablePictureLayerTiling> tiling;
1897 1919
1898 gfx::Size device_viewport(800, 600); 1920 gfx::Size device_viewport(800, 600);
1899 gfx::Rect visible_layer_rect(0, 0, 0, 0); 1921 gfx::Rect visible_layer_rect(0, 0, 0, 0);
1900 gfx::Size last_layer_bounds(200, 200); 1922 gfx::Size last_layer_bounds(200, 200);
1901 gfx::Size current_layer_bounds(200, 200); 1923 gfx::Size current_layer_bounds(200, 200);
(...skipping 11 matching lines...) Expand all
1913 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 1935 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1914 current_screen_transform, device_viewport); 1936 current_screen_transform, device_viewport);
1915 1937
1916 client.SetTileSize(gfx::Size(100, 100)); 1938 client.SetTileSize(gfx::Size(100, 100));
1917 client.set_tree(ACTIVE_TREE); 1939 client.set_tree(ACTIVE_TREE);
1918 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 1940 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1919 current_layer_bounds, 1941 current_layer_bounds,
1920 &client); 1942 &client);
1921 1943
1922 // previous ("last") frame 1944 // previous ("last") frame
1923 tiling->UpdateTilePriorities(ACTIVE_TREE, 1945 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1924 viewport_in_layer_space, 1946 viewport_in_layer_space,
1925 last_layer_contents_scale, 1947 last_layer_contents_scale,
1926 last_frame_time_in_seconds, 1948 last_frame_time_in_seconds,
1927 Occlusion()); 1949 Occlusion());
1928 1950
1929 // current frame 1951 // current frame
1930 tiling->UpdateTilePriorities(ACTIVE_TREE, 1952 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
1931 viewport_in_layer_space, 1953 viewport_in_layer_space,
1932 current_layer_contents_scale, 1954 current_layer_contents_scale,
1933 current_frame_time_in_seconds, 1955 current_frame_time_in_seconds,
1934 Occlusion()); 1956 Occlusion());
1957 tiling->UpdateAllTilePrioritiesForTesting();
1935 1958
1936 ASSERT_TRUE(tiling->TileAt(0, 0)); 1959 ASSERT_TRUE(tiling->TileAt(0, 0));
1937 ASSERT_TRUE(tiling->TileAt(0, 1)); 1960 ASSERT_TRUE(tiling->TileAt(0, 1));
1938 ASSERT_TRUE(tiling->TileAt(1, 0)); 1961 ASSERT_TRUE(tiling->TileAt(1, 0));
1939 ASSERT_TRUE(tiling->TileAt(1, 1)); 1962 ASSERT_TRUE(tiling->TileAt(1, 1));
1940 1963
1941 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 1964 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
1942 EXPECT_GT(priority.distance_to_visible, 0.f); 1965 EXPECT_GT(priority.distance_to_visible, 0.f);
1943 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1966 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1944 1967
1945 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 1968 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
1946 EXPECT_GT(priority.distance_to_visible, 0.f); 1969 EXPECT_GT(priority.distance_to_visible, 0.f);
1947 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1970 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1948 1971
1949 // time_to_visible for the right hand side layers needs an extra 0.099 1972 // time_to_visible for the right hand side layers needs an extra 0.099
1950 // seconds because this tile is 99 pixels further away. 1973 // seconds because this tile is 99 pixels further away.
1951 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 1974 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
1952 EXPECT_GT(priority.distance_to_visible, 0.f); 1975 EXPECT_GT(priority.distance_to_visible, 0.f);
1953 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1976 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1954 1977
1955 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE); 1978 priority = tiling->TileAt(1, 1)->priority(ACTIVE_TREE);
1956 EXPECT_GT(priority.distance_to_visible, 0.f); 1979 EXPECT_GT(priority.distance_to_visible, 0.f);
1957 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 1980 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
1958 } 1981 }
1959 1982
1960 TEST(UpdateTilePrioritiesTest, RotationMotion) { 1983 TEST(ComputeTilePriorityRectsTest, RotationMotion) {
1961 // Each tile of a layer may be affected differently by a transform; Check 1984 // Each tile of a layer may be affected differently by a transform; Check
1962 // that UpdateTilePriorities correctly accounts for the transform between 1985 // that ComputeTilePriorityRects correctly accounts for the transform between
1963 // layer space and screen space. 1986 // layer space and screen space.
1964 1987
1965 FakePictureLayerTilingClient client; 1988 FakePictureLayerTilingClient client;
1966 scoped_ptr<TestablePictureLayerTiling> tiling; 1989 scoped_ptr<TestablePictureLayerTiling> tiling;
1967 1990
1968 gfx::Size device_viewport(800, 600); 1991 gfx::Size device_viewport(800, 600);
1969 gfx::Rect visible_layer_rect(0, 0, 0, 0); // offscren. 1992 gfx::Rect visible_layer_rect(0, 0, 0, 0); // offscren.
1970 gfx::Size last_layer_bounds(200, 200); 1993 gfx::Size last_layer_bounds(200, 200);
1971 gfx::Size current_layer_bounds(200, 200); 1994 gfx::Size current_layer_bounds(200, 200);
1972 float last_layer_contents_scale = 1.f; 1995 float last_layer_contents_scale = 1.f;
(...skipping 18 matching lines...) Expand all
1991 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace( 2014 gfx::Rect viewport_in_layer_space = ViewportInLayerSpace(
1992 current_screen_transform, device_viewport); 2015 current_screen_transform, device_viewport);
1993 2016
1994 client.SetTileSize(gfx::Size(100, 100)); 2017 client.SetTileSize(gfx::Size(100, 100));
1995 client.set_tree(ACTIVE_TREE); 2018 client.set_tree(ACTIVE_TREE);
1996 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 2019 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
1997 current_layer_bounds, 2020 current_layer_bounds,
1998 &client); 2021 &client);
1999 2022
2000 // previous ("last") frame 2023 // previous ("last") frame
2001 tiling->UpdateTilePriorities(ACTIVE_TREE, 2024 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
2002 viewport_in_layer_space, 2025 viewport_in_layer_space,
2003 last_layer_contents_scale, 2026 last_layer_contents_scale,
2004 last_frame_time_in_seconds, 2027 last_frame_time_in_seconds,
2005 Occlusion()); 2028 Occlusion());
2006 2029
2007 // current frame 2030 // current frame
2008 tiling->UpdateTilePriorities(ACTIVE_TREE, 2031 tiling->ComputeTilePriorityRects(ACTIVE_TREE,
2009 viewport_in_layer_space, 2032 viewport_in_layer_space,
2010 current_layer_contents_scale, 2033 current_layer_contents_scale,
2011 current_frame_time_in_seconds, 2034 current_frame_time_in_seconds,
2012 Occlusion()); 2035 Occlusion());
2036 tiling->UpdateAllTilePrioritiesForTesting();
2013 2037
2014 ASSERT_TRUE(tiling->TileAt(0, 0)); 2038 ASSERT_TRUE(tiling->TileAt(0, 0));
2015 ASSERT_TRUE(tiling->TileAt(0, 1)); 2039 ASSERT_TRUE(tiling->TileAt(0, 1));
2016 ASSERT_TRUE(tiling->TileAt(1, 0)); 2040 ASSERT_TRUE(tiling->TileAt(1, 0));
2017 ASSERT_TRUE(tiling->TileAt(1, 1)); 2041 ASSERT_TRUE(tiling->TileAt(1, 1));
2018 2042
2019 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE); 2043 TilePriority priority = tiling->TileAt(0, 0)->priority(ACTIVE_TREE);
2020 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 2044 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
2021 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 2045 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
2022 2046
2023 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE); 2047 priority = tiling->TileAt(0, 1)->priority(ACTIVE_TREE);
2024 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 2048 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
2025 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 2049 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
2026 2050
2027 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE); 2051 priority = tiling->TileAt(1, 0)->priority(ACTIVE_TREE);
2028 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible); 2052 EXPECT_FLOAT_EQ(0.f, priority.distance_to_visible);
2029 EXPECT_EQ(TilePriority::NOW, priority.priority_bin); 2053 EXPECT_EQ(TilePriority::NOW, priority.priority_bin);
2030 } 2054 }
2031 2055
2032 TEST(PictureLayerTilingTest, ResetClearsPriorities) {
2033 FakePictureLayerTilingClient client;
2034 scoped_ptr<TestablePictureLayerTiling> tiling;
2035
2036 client.SetTileSize(gfx::Size(100, 100));
2037 client.set_tree(ACTIVE_TREE);
2038 tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
2039 gfx::Size(100, 100),
2040 &client);
2041 tiling->UpdateTilePriorities(
2042 ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion());
2043
2044 std::vector<scoped_refptr<Tile> > tiles = tiling->AllRefTilesForTesting();
2045 ASSERT_GT(tiles.size(), 0u);
2046 for (std::vector<scoped_refptr<Tile> >::const_iterator it = tiles.begin();
2047 it != tiles.end();
2048 ++it) {
2049 EXPECT_NE(TilePriority(), (*it)->priority(ACTIVE_TREE));
2050 }
2051
2052 tiling->Reset();
2053 for (std::vector<scoped_refptr<Tile> >::const_iterator it = tiles.begin();
2054 it != tiles.end();
2055 ++it) {
2056 EXPECT_EQ(TilePriority(), (*it)->priority(ACTIVE_TREE));
2057 }
2058 tiles.clear();
2059 }
2060
2061 TEST(PictureLayerTilingTest, RecycledTilesCleared) { 2056 TEST(PictureLayerTilingTest, RecycledTilesCleared) {
2062 // This test performs the following: 2057 // This test performs the following:
2063 // Setup: 2058 // Setup:
2064 // - Two tilings, one active one recycled with all tiles shared. 2059 // - Two tilings, one active one recycled with all tiles shared.
2065 // Procedure: 2060 // Procedure:
2066 // - Viewport moves somewhere far away and active tiling clears tiles. 2061 // - Viewport moves somewhere far away and active tiling clears tiles.
2067 // - Viewport moves back and a new active tiling tile is created. 2062 // - Viewport moves back and a new active tiling tile is created.
2068 // Result: 2063 // Result:
2069 // - Recycle tiling does _not_ have the tile in the same location (thus it 2064 // - Recycle tiling does _not_ have the tile in the same location (thus it
2070 // will be shared next time a pending tiling is created). 2065 // will be shared next time a pending tiling is created).
2071 2066
2072 FakePictureLayerTilingClient active_client; 2067 FakePictureLayerTilingClient active_client;
2073 scoped_ptr<TestablePictureLayerTiling> active_tiling; 2068 scoped_ptr<TestablePictureLayerTiling> active_tiling;
2074 2069
2075 active_client.SetTileSize(gfx::Size(100, 100)); 2070 active_client.SetTileSize(gfx::Size(100, 100));
2076 active_client.set_tree(ACTIVE_TREE); 2071 active_client.set_tree(ACTIVE_TREE);
2077 active_client.set_max_tiles_for_interest_area(10); 2072 active_client.set_max_tiles_for_interest_area(10);
2078 active_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 2073 active_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
2079 gfx::Size(10000, 10000), 2074 gfx::Size(10000, 10000),
2080 &active_client); 2075 &active_client);
2081 // Create all tiles on this tiling. 2076 // Create all tiles on this tiling.
2082 active_tiling->UpdateTilePriorities( 2077 active_tiling->ComputeTilePriorityRects(
2083 ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); 2078 ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion());
2084 2079
2085 FakePictureLayerTilingClient recycle_client; 2080 FakePictureLayerTilingClient recycle_client;
2086 recycle_client.SetTileSize(gfx::Size(100, 100)); 2081 recycle_client.SetTileSize(gfx::Size(100, 100));
2087 recycle_client.set_tree(PENDING_TREE); 2082 recycle_client.set_tree(PENDING_TREE);
2088 recycle_client.set_twin_tiling(active_tiling.get()); 2083 recycle_client.set_twin_tiling(active_tiling.get());
2089 recycle_client.set_max_tiles_for_interest_area(10); 2084 recycle_client.set_max_tiles_for_interest_area(10);
2090 2085
2091 scoped_ptr<TestablePictureLayerTiling> recycle_tiling; 2086 scoped_ptr<TestablePictureLayerTiling> recycle_tiling;
2092 recycle_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 2087 recycle_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
2093 gfx::Size(10000, 10000), 2088 gfx::Size(10000, 10000),
2094 &recycle_client); 2089 &recycle_client);
2095 2090
2096 // Create all tiles on the second tiling. All tiles should be shared. 2091 // Create all tiles on the second tiling. All tiles should be shared.
2097 recycle_tiling->UpdateTilePriorities( 2092 recycle_tiling->ComputeTilePriorityRects(
2098 PENDING_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); 2093 PENDING_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion());
2099 2094
2100 // Set the second tiling as recycled. 2095 // Set the second tiling as recycled.
2101 active_client.set_twin_tiling(NULL); 2096 active_client.set_twin_tiling(NULL);
2102 active_client.set_recycled_twin_tiling(recycle_tiling.get()); 2097 active_client.set_recycled_twin_tiling(recycle_tiling.get());
2103 recycle_client.set_twin_tiling(NULL); 2098 recycle_client.set_twin_tiling(NULL);
2104 2099
2105 // Verify that tiles exist and are shared. 2100 // Verify that tiles exist and are shared.
2106 EXPECT_TRUE(active_tiling->TileAt(0, 0)); 2101 EXPECT_TRUE(active_tiling->TileAt(0, 0));
2107 EXPECT_TRUE(recycle_tiling->TileAt(0, 0)); 2102 EXPECT_TRUE(recycle_tiling->TileAt(0, 0));
2108 EXPECT_EQ(active_tiling->TileAt(0, 0), recycle_tiling->TileAt(0, 0)); 2103 EXPECT_EQ(active_tiling->TileAt(0, 0), recycle_tiling->TileAt(0, 0));
2109 2104
2110 // Move the viewport far away from the (0, 0) tile. 2105 // Move the viewport far away from the (0, 0) tile.
2111 active_tiling->UpdateTilePriorities( 2106 active_tiling->ComputeTilePriorityRects(
2112 ACTIVE_TREE, gfx::Rect(9000, 9000, 100, 100), 1.0f, 2.0, Occlusion()); 2107 ACTIVE_TREE, gfx::Rect(9000, 9000, 100, 100), 1.0f, 2.0, Occlusion());
2113 // Ensure the tile was deleted on both tilings. 2108 // Ensure the tile was deleted on both tilings.
2114 EXPECT_FALSE(active_tiling->TileAt(0, 0)); 2109 EXPECT_FALSE(active_tiling->TileAt(0, 0));
2115 EXPECT_FALSE(recycle_tiling->TileAt(0, 0)); 2110 EXPECT_FALSE(recycle_tiling->TileAt(0, 0));
2116 2111
2117 // Move the viewport back to (0, 0) tile. 2112 // Move the viewport back to (0, 0) tile.
2118 active_tiling->UpdateTilePriorities( 2113 active_tiling->ComputeTilePriorityRects(
2119 ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 3.0, Occlusion()); 2114 ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 3.0, Occlusion());
2120 2115
2121 // Ensure that we now have a tile here, but the recycle tiling does not. 2116 // Ensure that we now have a tile here, but the recycle tiling does not.
2122 EXPECT_TRUE(active_tiling->TileAt(0, 0)); 2117 EXPECT_TRUE(active_tiling->TileAt(0, 0));
2123 EXPECT_FALSE(recycle_tiling->TileAt(0, 0)); 2118 EXPECT_FALSE(recycle_tiling->TileAt(0, 0));
2124 } 2119 }
2125 2120
2126 TEST(PictureLayerTilingTest, RecycledTilesClearedOnReset) { 2121 TEST(PictureLayerTilingTest, RecycledTilesClearedOnReset) {
2127 FakePictureLayerTilingClient active_client; 2122 FakePictureLayerTilingClient active_client;
2128 scoped_ptr<TestablePictureLayerTiling> active_tiling; 2123 scoped_ptr<TestablePictureLayerTiling> active_tiling;
2129 2124
2130 active_client.SetTileSize(gfx::Size(100, 100)); 2125 active_client.SetTileSize(gfx::Size(100, 100));
2131 active_client.set_tree(ACTIVE_TREE); 2126 active_client.set_tree(ACTIVE_TREE);
2132 active_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 2127 active_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
2133 gfx::Size(100, 100), 2128 gfx::Size(100, 100),
2134 &active_client); 2129 &active_client);
2135 // Create all tiles on this tiling. 2130 // Create all tiles on this tiling.
2136 active_tiling->UpdateTilePriorities( 2131 active_tiling->ComputeTilePriorityRects(
2137 ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); 2132 ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion());
2138 2133
2139 FakePictureLayerTilingClient recycle_client; 2134 FakePictureLayerTilingClient recycle_client;
2140 recycle_client.SetTileSize(gfx::Size(100, 100)); 2135 recycle_client.SetTileSize(gfx::Size(100, 100));
2141 recycle_client.set_tree(PENDING_TREE); 2136 recycle_client.set_tree(PENDING_TREE);
2142 recycle_client.set_twin_tiling(active_tiling.get()); 2137 recycle_client.set_twin_tiling(active_tiling.get());
2143 recycle_client.set_max_tiles_for_interest_area(10); 2138 recycle_client.set_max_tiles_for_interest_area(10);
2144 2139
2145 scoped_ptr<TestablePictureLayerTiling> recycle_tiling; 2140 scoped_ptr<TestablePictureLayerTiling> recycle_tiling;
2146 recycle_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale 2141 recycle_tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale
2147 gfx::Size(100, 100), 2142 gfx::Size(100, 100),
2148 &recycle_client); 2143 &recycle_client);
2149 2144
2150 // Create all tiles on the recycle tiling. All tiles should be shared. 2145 // Create all tiles on the recycle tiling. All tiles should be shared.
2151 recycle_tiling->UpdateTilePriorities( 2146 recycle_tiling->ComputeTilePriorityRects(
2152 PENDING_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); 2147 PENDING_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion());
2153 2148
2154 // Set the second tiling as recycled. 2149 // Set the second tiling as recycled.
2155 active_client.set_twin_tiling(NULL); 2150 active_client.set_twin_tiling(NULL);
2156 active_client.set_recycled_twin_tiling(recycle_tiling.get()); 2151 active_client.set_recycled_twin_tiling(recycle_tiling.get());
2157 recycle_client.set_twin_tiling(NULL); 2152 recycle_client.set_twin_tiling(NULL);
2158 2153
2159 // Verify that tiles exist and are shared. 2154 // Verify that tiles exist and are shared.
2160 EXPECT_TRUE(active_tiling->TileAt(0, 0)); 2155 EXPECT_TRUE(active_tiling->TileAt(0, 0));
2161 EXPECT_TRUE(recycle_tiling->TileAt(0, 0)); 2156 EXPECT_TRUE(recycle_tiling->TileAt(0, 0));
2162 EXPECT_EQ(active_tiling->TileAt(0, 0), recycle_tiling->TileAt(0, 0)); 2157 EXPECT_EQ(active_tiling->TileAt(0, 0), recycle_tiling->TileAt(0, 0));
2163 2158
2164 // Reset the active tiling. The recycle tiles should be released too. 2159 // Reset the active tiling. The recycle tiles should be released too.
2165 active_tiling->Reset(); 2160 active_tiling->Reset();
2166 EXPECT_FALSE(active_tiling->TileAt(0, 0)); 2161 EXPECT_FALSE(active_tiling->TileAt(0, 0));
2167 EXPECT_FALSE(recycle_tiling->TileAt(0, 0)); 2162 EXPECT_FALSE(recycle_tiling->TileAt(0, 0));
2168 } 2163 }
2169 2164
2170 } // namespace 2165 } // namespace
2171 } // namespace cc 2166 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/picture_layer_tiling_set.cc ('k') | cc/resources/prioritized_tile_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698