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

Side by Side Diff: cc/base/tiling_data_unittest.cc

Issue 505913003: cc: Remove and Create the correct tiles when resizing live tiles rect (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: livetiles: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/base/tiling_data.cc ('k') | cc/resources/picture_layer_tiling.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/base/tiling_data.h" 5 #include "cc/base/tiling_data.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "cc/test/geometry_test_utils.h" 10 #include "cc/test/geometry_test_utils.h"
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 EXPECT_EQ(gfx::Size(5, 5), data.max_texture_size()); 766 EXPECT_EQ(gfx::Size(5, 5), data.max_texture_size());
767 EXPECT_EQ(5, data.num_tiles_x()); 767 EXPECT_EQ(5, data.num_tiles_x());
768 EXPECT_EQ(10, data.num_tiles_y()); 768 EXPECT_EQ(10, data.num_tiles_y());
769 769
770 data.SetMaxTextureSize(gfx::Size(8, 5)); 770 data.SetMaxTextureSize(gfx::Size(8, 5));
771 EXPECT_EQ(gfx::Size(8, 5), data.max_texture_size()); 771 EXPECT_EQ(gfx::Size(8, 5), data.max_texture_size());
772 EXPECT_EQ(3, data.num_tiles_x()); 772 EXPECT_EQ(3, data.num_tiles_x());
773 EXPECT_EQ(10, data.num_tiles_y()); 773 EXPECT_EQ(10, data.num_tiles_y());
774 } 774 }
775 775
776 TEST(TilingDataTest, ExpandRectIgnoringBordersToTileBoundsWithBordersEmpty) { 776 TEST(TilingDataTest, ExpandRectIgnoringBordersToTileBoundsEmpty) {
777 TilingData empty_total_size(gfx::Size(0, 0), gfx::Size(8, 8), true); 777 TilingData empty_total_size(gfx::Size(0, 0), gfx::Size(8, 8), true);
778 EXPECT_RECT_EQ( 778 EXPECT_RECT_EQ(
779 gfx::Rect(), 779 gfx::Rect(),
780 empty_total_size.ExpandRectIgnoringBordersToTileBoundsWithBorders( 780 empty_total_size.ExpandRectIgnoringBordersToTileBounds(gfx::Rect()));
781 gfx::Rect())); 781 EXPECT_RECT_EQ(gfx::Rect(),
782 EXPECT_RECT_EQ( 782 empty_total_size.ExpandRectIgnoringBordersToTileBounds(
783 gfx::Rect(), 783 gfx::Rect(100, 100, 100, 100)));
784 empty_total_size.ExpandRectIgnoringBordersToTileBoundsWithBorders( 784 EXPECT_RECT_EQ(gfx::Rect(),
785 gfx::Rect(100, 100, 100, 100))); 785 empty_total_size.ExpandRectIgnoringBordersToTileBounds(
786 EXPECT_RECT_EQ( 786 gfx::Rect(100, 100)));
787 gfx::Rect(),
788 empty_total_size.ExpandRectIgnoringBordersToTileBoundsWithBorders(
789 gfx::Rect(100, 100)));
790 787
791 TilingData empty_max_texture_size(gfx::Size(8, 8), gfx::Size(0, 0), true); 788 TilingData empty_max_texture_size(gfx::Size(8, 8), gfx::Size(0, 0), true);
792 EXPECT_RECT_EQ( 789 EXPECT_RECT_EQ(gfx::Rect(),
793 gfx::Rect(), 790 empty_max_texture_size.ExpandRectIgnoringBordersToTileBounds(
794 empty_max_texture_size.ExpandRectIgnoringBordersToTileBoundsWithBorders( 791 gfx::Rect()));
795 gfx::Rect())); 792 EXPECT_RECT_EQ(gfx::Rect(),
796 EXPECT_RECT_EQ( 793 empty_max_texture_size.ExpandRectIgnoringBordersToTileBounds(
797 gfx::Rect(), 794 gfx::Rect(100, 100, 100, 100)));
798 empty_max_texture_size.ExpandRectIgnoringBordersToTileBoundsWithBorders( 795 EXPECT_RECT_EQ(gfx::Rect(),
799 gfx::Rect(100, 100, 100, 100))); 796 empty_max_texture_size.ExpandRectIgnoringBordersToTileBounds(
800 EXPECT_RECT_EQ( 797 gfx::Rect(100, 100)));
801 gfx::Rect(),
802 empty_max_texture_size.ExpandRectIgnoringBordersToTileBoundsWithBorders(
803 gfx::Rect(100, 100)));
804 } 798 }
805 799
806 TEST(TilingDataTest, ExpandRectIgnoringBordersToTileBoundsWithBorders) { 800 TEST(TilingDataTest, ExpandRectIgnoringBordersToTileBounds) {
807 TilingData data(gfx::Size(4, 4), gfx::Size(16, 32), true); 801 TilingData data(gfx::Size(4, 4), gfx::Size(16, 32), true);
808 802
809 // Small rect at origin rounds up to tile 0, 0. 803 // Small rect at origin rounds up to tile 0, 0.
810 gfx::Rect at_origin_src(1, 1); 804 gfx::Rect at_origin_src(1, 1);
811 gfx::Rect at_origin_result(data.TileBoundsWithBorder(0, 0)); 805 gfx::Rect at_origin_result(data.TileBounds(0, 0));
812 EXPECT_NE(at_origin_src, at_origin_result); 806 EXPECT_NE(at_origin_src, at_origin_result);
813 EXPECT_RECT_EQ( 807 EXPECT_RECT_EQ(at_origin_result,
814 at_origin_result, 808 data.ExpandRectIgnoringBordersToTileBounds(at_origin_src));
815 data.ExpandRectIgnoringBordersToTileBoundsWithBorders(at_origin_src));
816 809
817 // Arbitrary internal rect. 810 // Arbitrary internal rect.
818 gfx::Rect rect_src(6, 6, 1, 3); 811 gfx::Rect rect_src(6, 6, 1, 3);
819 // Tile 2, 2 => gfx::Rect(4, 4, 4, 4) 812 // Tile 2, 2 => gfx::Rect(4, 4, 4, 4)
820 // Tile 2, 3 => gfx::Rect(4, 6, 4, 4) 813 // Tile 2, 3 => gfx::Rect(4, 6, 4, 4)
821 gfx::Rect rect_result(gfx::UnionRects(data.TileBoundsWithBorder(2, 2), 814 gfx::Rect rect_result(
822 data.TileBoundsWithBorder(2, 3))); 815 gfx::UnionRects(data.TileBounds(2, 2), data.TileBounds(2, 3)));
823 EXPECT_NE(rect_src, rect_result); 816 EXPECT_NE(rect_src, rect_result);
824 EXPECT_RECT_EQ( 817 EXPECT_RECT_EQ(rect_result,
825 rect_result, 818 data.ExpandRectIgnoringBordersToTileBounds(rect_src));
826 data.ExpandRectIgnoringBordersToTileBoundsWithBorders(rect_src));
827 819
828 // On tile bounds does not round up to next tile (ignores the border). 820 // On tile bounds does not round up to next tile (ignores the border).
829 gfx::Rect border_rect_src( 821 gfx::Rect border_rect_src(
830 gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4))); 822 gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4)));
831 gfx::Rect border_rect_result(gfx::UnionRects( 823 gfx::Rect border_rect_result(
832 data.TileBoundsWithBorder(1, 2), data.TileBoundsWithBorder(3, 4))); 824 gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4)));
833 EXPECT_RECT_EQ( 825 EXPECT_RECT_EQ(border_rect_result,
834 border_rect_result, 826 data.ExpandRectIgnoringBordersToTileBounds(border_rect_src));
835 data.ExpandRectIgnoringBordersToTileBoundsWithBorders(border_rect_src));
836 827
837 // Equal to tiling rect. 828 // Equal to tiling rect.
838 EXPECT_RECT_EQ(gfx::Rect(data.tiling_size()), 829 EXPECT_RECT_EQ(gfx::Rect(data.tiling_size()),
839 data.ExpandRectIgnoringBordersToTileBoundsWithBorders( 830 data.ExpandRectIgnoringBordersToTileBounds(
840 gfx::Rect(data.tiling_size()))); 831 gfx::Rect(data.tiling_size())));
841 832
842 // Containing, but larger than tiling rect. 833 // Containing, but larger than tiling rect.
843 EXPECT_RECT_EQ(gfx::Rect(data.tiling_size()), 834 EXPECT_RECT_EQ(
844 data.ExpandRectIgnoringBordersToTileBoundsWithBorders( 835 gfx::Rect(data.tiling_size()),
845 gfx::Rect(100, 100))); 836 data.ExpandRectIgnoringBordersToTileBounds(gfx::Rect(100, 100)));
846 837
847 // Non-intersecting with tiling rect. 838 // Non-intersecting with tiling rect.
848 gfx::Rect non_intersect(200, 200, 100, 100); 839 gfx::Rect non_intersect(200, 200, 100, 100);
849 EXPECT_FALSE(non_intersect.Intersects(gfx::Rect(data.tiling_size()))); 840 EXPECT_FALSE(non_intersect.Intersects(gfx::Rect(data.tiling_size())));
850 EXPECT_RECT_EQ( 841 EXPECT_RECT_EQ(gfx::Rect(),
851 gfx::Rect(), 842 data.ExpandRectIgnoringBordersToTileBounds(non_intersect));
852 data.ExpandRectIgnoringBordersToTileBoundsWithBorders(non_intersect));
853 843
854 TilingData data2(gfx::Size(8, 8), gfx::Size(32, 64), true); 844 TilingData data2(gfx::Size(8, 8), gfx::Size(32, 64), true);
855 845
856 // Inside other tile border texels doesn't include other tiles. 846 // Inside other tile border texels doesn't include other tiles.
857 gfx::Rect inner_rect_src(data2.TileBounds(1, 1)); 847 gfx::Rect inner_rect_src(data2.TileBounds(1, 1));
858 inner_rect_src.Inset(data2.border_texels(), data.border_texels()); 848 inner_rect_src.Inset(data2.border_texels(), data.border_texels());
859 gfx::Rect inner_rect_result(data2.TileBoundsWithBorder(1, 1)); 849 gfx::Rect inner_rect_result(data2.TileBounds(1, 1));
860 gfx::Rect expanded = 850 gfx::Rect expanded =
861 data2.ExpandRectIgnoringBordersToTileBoundsWithBorders(inner_rect_src); 851 data2.ExpandRectIgnoringBordersToTileBounds(inner_rect_src);
862 EXPECT_EQ(inner_rect_result.ToString(), expanded.ToString()); 852 EXPECT_EQ(inner_rect_result.ToString(), expanded.ToString());
863 } 853 }
864 854
865 TEST(TilingDataTest, ExpandRectToTileBounds) { 855 TEST(TilingDataTest, ExpandRectToTileBounds) {
866 TilingData data(gfx::Size(4, 4), gfx::Size(16, 32), true); 856 TilingData data(gfx::Size(4, 4), gfx::Size(16, 32), true);
867 857
868 // Small rect at origin rounds up to tile 0, 0. 858 // Small rect at origin rounds up to tile 0, 0.
869 gfx::Rect at_origin_src(1, 1); 859 gfx::Rect at_origin_src(1, 1);
870 gfx::Rect at_origin_result(data.TileBounds(0, 0)); 860 gfx::Rect at_origin_result(data.TileBounds(0, 0));
871 EXPECT_NE(at_origin_src, at_origin_result); 861 EXPECT_NE(at_origin_src, at_origin_result);
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 found = true; 1069 found = true;
1080 break; 1070 break;
1081 } 1071 }
1082 } 1072 }
1083 EXPECT_TRUE(found); 1073 EXPECT_TRUE(found);
1084 } 1074 }
1085 EXPECT_EQ(0u, expected.size()); 1075 EXPECT_EQ(0u, expected.size());
1086 } 1076 }
1087 1077
1088 // Make sure this also works with a difference iterator and an empty ignore. 1078 // Make sure this also works with a difference iterator and an empty ignore.
1089 // The difference iterator always includes borders, so ignore it otherwise. 1079 // The difference iterator never includes borders, so ignore it otherwise.
1090 if (include_borders) { 1080 if (!include_borders) {
1091 std::vector<std::pair<int, int> > expected = original_expected; 1081 std::vector<std::pair<int, int> > expected = original_expected;
1092 for (TilingData::DifferenceIterator iter(&data, rect, gfx::Rect()); 1082 for (TilingData::DifferenceIterator iter(&data, rect, gfx::Rect()); iter;
1093 iter; ++iter) { 1083 ++iter) {
1094 bool found = false; 1084 bool found = false;
1095 for (size_t i = 0; i < expected.size(); ++i) { 1085 for (size_t i = 0; i < expected.size(); ++i) {
1096 if (expected[i] == iter.index()) { 1086 if (expected[i] == iter.index()) {
1097 expected[i] = expected.back(); 1087 expected[i] = expected.back();
1098 expected.pop_back(); 1088 expected.pop_back();
1099 found = true; 1089 found = true;
1100 break; 1090 break;
1101 } 1091 }
1102 } 1092 }
1103 EXPECT_TRUE(found); 1093 EXPECT_TRUE(found);
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 TestIterateAll(big_border, gfx::Rect(30, 40), 0, 0, 0, 0); 1233 TestIterateAll(big_border, gfx::Rect(30, 40), 0, 0, 0, 0);
1244 TestIterateAll(big_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0); 1234 TestIterateAll(big_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0);
1245 TestIterateAll(big_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1); 1235 TestIterateAll(big_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1);
1246 } 1236 }
1247 1237
1248 TEST(TilingDataTest, IteratorNoTiles) { 1238 TEST(TilingDataTest, IteratorNoTiles) {
1249 TilingData data(gfx::Size(100, 100), gfx::Size(), false); 1239 TilingData data(gfx::Size(100, 100), gfx::Size(), false);
1250 TestIterateAll(data, gfx::Rect(100, 100), 0, 0, -1, -1); 1240 TestIterateAll(data, gfx::Rect(100, 100), 0, 0, -1, -1);
1251 } 1241 }
1252 1242
1253 void TestDiff( 1243 void TestDiff(const TilingData& data,
1254 const TilingData& data, 1244 gfx::Rect consider,
1255 gfx::Rect consider, 1245 gfx::Rect ignore,
1256 gfx::Rect ignore, 1246 size_t num_tiles) {
1257 size_t num_tiles) {
1258
1259 std::vector<std::pair<int, int> > expected; 1247 std::vector<std::pair<int, int> > expected;
1260 for (int y = 0; y < data.num_tiles_y(); ++y) { 1248 for (int y = 0; y < data.num_tiles_y(); ++y) {
1261 for (int x = 0; x < data.num_tiles_x(); ++x) { 1249 for (int x = 0; x < data.num_tiles_x(); ++x) {
1262 gfx::Rect bounds = data.TileBoundsWithBorder(x, y); 1250 gfx::Rect bounds = data.TileBounds(x, y);
1263 if (bounds.Intersects(consider) && !bounds.Intersects(ignore)) 1251 if (bounds.Intersects(consider) && !bounds.Intersects(ignore))
1264 expected.push_back(std::make_pair(x, y)); 1252 expected.push_back(std::make_pair(x, y));
1265 } 1253 }
1266 } 1254 }
1267 1255
1268 // Sanity check the test. 1256 // Sanity check the test.
1269 EXPECT_EQ(num_tiles, expected.size()); 1257 EXPECT_EQ(num_tiles, expected.size());
1270 1258
1271 for (TilingData::DifferenceIterator iter(&data, consider, ignore); 1259 for (TilingData::DifferenceIterator iter(&data, consider, ignore); iter;
1272 iter; ++iter) { 1260 ++iter) {
1273 bool found = false; 1261 bool found = false;
1274 for (size_t i = 0; i < expected.size(); ++i) { 1262 for (size_t i = 0; i < expected.size(); ++i) {
1275 if (expected[i] == iter.index()) { 1263 if (expected[i] == iter.index()) {
1276 expected[i] = expected.back(); 1264 expected[i] = expected.back();
1277 expected.pop_back(); 1265 expected.pop_back();
1278 found = true; 1266 found = true;
1279 break; 1267 break;
1280 } 1268 }
1281 } 1269 }
1282 EXPECT_TRUE(found); 1270 EXPECT_TRUE(found);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 // Non-intersecting, but still touching two of the same tiles. 1320 // Non-intersecting, but still touching two of the same tiles.
1333 TestDiff(data, gfx::Rect(8, 0, 32, 25), gfx::Rect(0, 12, 5, 12), 10); 1321 TestDiff(data, gfx::Rect(8, 0, 32, 25), gfx::Rect(0, 12, 5, 12), 10);
1334 1322
1335 // Intersecting, but neither contains the other. 2x3 with one overlap. 1323 // Intersecting, but neither contains the other. 2x3 with one overlap.
1336 TestDiff(data, gfx::Rect(5, 2, 20, 10), gfx::Rect(25, 15, 5, 10), 5); 1324 TestDiff(data, gfx::Rect(5, 2, 20, 10), gfx::Rect(25, 15, 5, 10), 5);
1337 } 1325 }
1338 1326
1339 TEST(TilingDataTest, DifferenceIteratorManyBorderTexels) { 1327 TEST(TilingDataTest, DifferenceIteratorManyBorderTexels) {
1340 // X border index by src coord: [0-50), [10-60), [20-65) 1328 // X border index by src coord: [0-50), [10-60), [20-65)
1341 // Y border index by src coord: [0-60), [20-80), [40-100), [60-110) 1329 // Y border index by src coord: [0-60), [20-80), [40-100), [60-110)
1330 // X tile bounds by src coord: [0-30), [30-40), [40-65)
1331 // Y tile bounds by src coord: [0-40), [40-60), [60-80), [80-110)
1342 TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20); 1332 TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20);
1343 1333
1344 // Ignore one column, three rows 1334 // Knock out two rows, but not the left column.
1345 TestDiff(data, gfx::Rect(0, 30, 55, 80), gfx::Rect(5, 30, 5, 15), 9); 1335 TestDiff(data, gfx::Rect(10, 30, 55, 80), gfx::Rect(30, 59, 20, 2), 8);
1346 1336
1347 // Knock out three columns, leaving only one. 1337 // Knock out one row.
1348 TestDiff(data, gfx::Rect(10, 30, 55, 80), gfx::Rect(30, 59, 20, 1), 3); 1338 TestDiff(data, gfx::Rect(10, 30, 55, 80), gfx::Rect(29, 59, 20, 1), 9);
1349 1339
1350 // Overlap all tiles with ignore rect. 1340 // Overlap all tiles with ignore rect.
1351 TestDiff(data, gfx::Rect(65, 110), gfx::Rect(30, 59, 1, 2), 0); 1341 TestDiff(data, gfx::Rect(65, 110), gfx::Rect(29, 39, 12, 42), 0);
1342
1343 gfx::Rect tile = data.TileBounds(1, 1);
1344
1345 // Ignore one tile.
1346 TestDiff(data, gfx::Rect(20, 30, 45, 80), tile, 11);
1347
1348 // Include one tile.
1349 TestDiff(data, tile, gfx::Rect(), 1);
1352 } 1350 }
1353 1351
1354 TEST(TilingDataTest, DifferenceIteratorOneTile) { 1352 TEST(TilingDataTest, DifferenceIteratorOneTile) {
1355 TilingData no_border(gfx::Size(1000, 1000), gfx::Size(30, 40), false); 1353 TilingData no_border(gfx::Size(1000, 1000), gfx::Size(30, 40), false);
1356 TestDiff(no_border, gfx::Rect(30, 40), gfx::Rect(), 1); 1354 TestDiff(no_border, gfx::Rect(30, 40), gfx::Rect(), 1);
1357 TestDiff(no_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0); 1355 TestDiff(no_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
1358 1356
1359 TilingData one_border(gfx::Size(1000, 1000), gfx::Size(30, 40), true); 1357 TilingData one_border(gfx::Size(1000, 1000), gfx::Size(30, 40), true);
1360 TestDiff(one_border, gfx::Rect(30, 40), gfx::Rect(), 1); 1358 TestDiff(one_border, gfx::Rect(30, 40), gfx::Rect(), 1);
1361 TestDiff(one_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0); 1359 TestDiff(one_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
1933 expected.push_back(std::make_pair(2, 2)); 1931 expected.push_back(std::make_pair(2, 2));
1934 expected.push_back(std::make_pair(2, 1)); 1932 expected.push_back(std::make_pair(2, 1));
1935 expected.push_back(std::make_pair(2, 0)); 1933 expected.push_back(std::make_pair(2, 0));
1936 1934
1937 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected); 1935 TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
1938 } 1936 }
1939 1937
1940 } // namespace 1938 } // namespace
1941 1939
1942 } // namespace cc 1940 } // namespace cc
OLDNEW
« no previous file with comments | « cc/base/tiling_data.cc ('k') | cc/resources/picture_layer_tiling.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698