| 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 "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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |