OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/tiles/mipmap_util.h" | 5 #include "cc/tiles/mipmap_util.h" |
6 | 6 |
7 #include "cc/test/geometry_test_utils.h" | 7 #include "cc/test/geometry_test_utils.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 namespace cc { | 10 namespace cc { |
11 namespace { | 11 namespace { |
12 | 12 |
13 // Ensures that a basic scale works. | 13 // Ensures that a basic scale works. |
14 TEST(MipMapUtilTest, Basic) { | 14 TEST(MipMapUtilTest, Basic) { |
15 const gfx::Size src_size(64, 64); | 15 const gfx::Size src_size(64, 64); |
16 const gfx::Size target_size(16, 16); | 16 const gfx::Size target_size(16, 16); |
17 const int target_level = 2; | 17 const int target_level = 2; |
18 const SkSize expected_scale = SkSize::Make(0.25f, 0.25f); | 18 const SkSize expected_scale = SkSize::Make(0.25f, 0.25f); |
19 | 19 |
20 EXPECT_EQ(target_level, MipMapUtil::GetLevelForSize(src_size, target_size)); | 20 EXPECT_EQ(target_level, MipMapUtil::GetLevelForSize(src_size, target_size)); |
21 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForLevel( | 21 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForLevel( |
22 src_size, target_level)); | 22 src_size, target_level)); |
| 23 EXPECT_SIZE_EQ(target_size, |
| 24 MipMapUtil::GetSizeForLevel(src_size, target_level)); |
23 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForSize( | 25 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForSize( |
24 src_size, target_size)); | 26 src_size, target_size)); |
25 } | 27 } |
26 | 28 |
27 // Ensures that a no-op scale works. | 29 // Ensures that a no-op scale works. |
28 TEST(MipMapUtilTest, NoScale) { | 30 TEST(MipMapUtilTest, NoScale) { |
29 const gfx::Size src_size(64, 64); | 31 const gfx::Size src_size(64, 64); |
30 const gfx::Size target_size(64, 64); | 32 const gfx::Size target_size(64, 64); |
31 const int target_level = 0; | 33 const int target_level = 0; |
32 const SkSize expected_scale = SkSize::Make(1, 1); | 34 const SkSize expected_scale = SkSize::Make(1, 1); |
33 | 35 |
34 EXPECT_EQ(target_level, MipMapUtil::GetLevelForSize(src_size, target_size)); | 36 EXPECT_EQ(target_level, MipMapUtil::GetLevelForSize(src_size, target_size)); |
35 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForLevel( | 37 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForLevel( |
36 src_size, target_level)); | 38 src_size, target_level)); |
| 39 EXPECT_SIZE_EQ(target_size, |
| 40 MipMapUtil::GetSizeForLevel(src_size, target_level)); |
37 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForSize( | 41 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForSize( |
38 src_size, target_size)); | 42 src_size, target_size)); |
39 } | 43 } |
40 | 44 |
41 // Ensures that we return the base mip level if the caller requests an upscale. | 45 // Ensures that we return the base mip level if the caller requests an upscale. |
42 TEST(MipMapUtilTest, Upscale) { | 46 TEST(MipMapUtilTest, Upscale) { |
43 const gfx::Size src_size(64, 64); | 47 const gfx::Size src_size(64, 64); |
44 const gfx::Size target_size(128, 128); | 48 const gfx::Size target_size(128, 128); |
45 const SkSize result_size = SkSize::Make(1, 1); | 49 const SkSize result_size = SkSize::Make(1, 1); |
46 const int result_level = 0; | 50 const int result_level = 0; |
47 | 51 |
48 EXPECT_EQ(result_level, MipMapUtil::GetLevelForSize(src_size, target_size)); | 52 EXPECT_EQ(result_level, MipMapUtil::GetLevelForSize(src_size, target_size)); |
49 EXPECT_FLOAT_SIZE_EQ(result_size, MipMapUtil::GetScaleAdjustmentForSize( | 53 EXPECT_FLOAT_SIZE_EQ(result_size, MipMapUtil::GetScaleAdjustmentForSize( |
50 src_size, target_size)); | 54 src_size, target_size)); |
| 55 EXPECT_SIZE_EQ(src_size, MipMapUtil::GetSizeForLevel(src_size, result_level)); |
51 } | 56 } |
52 | 57 |
53 // Ensures that the maximum mip level GetLevelForSize will ever return is 30. | 58 // Ensures that the maximum mip level GetLevelForSize will ever return is 30. |
54 TEST(MipMapUtilTest, MaxMipLevel) { | 59 TEST(MipMapUtilTest, MaxMipLevel) { |
55 int max_mip_level = | 60 int max_mip_level = |
56 MipMapUtil::GetLevelForSize(gfx::Size(std::numeric_limits<int>::max(), | 61 MipMapUtil::GetLevelForSize(gfx::Size(std::numeric_limits<int>::max(), |
57 std::numeric_limits<int>::max()), | 62 std::numeric_limits<int>::max()), |
58 gfx::Size(1, 1)); | 63 gfx::Size(1, 1)); |
59 EXPECT_EQ(max_mip_level, 30); | 64 EXPECT_EQ(max_mip_level, 30); |
60 } | 65 } |
61 | 66 |
62 // Ensures that we handle mips of a non-square image correctly (the smaller side | 67 // Ensures that we handle mips of a non-square image correctly (the smaller side |
63 // should never be smaller than 1). | 68 // should never be smaller than 1). |
64 TEST(MipMapUtilTest, NonSquare) { | 69 TEST(MipMapUtilTest, NonSquare) { |
65 const gfx::Size src_size(1024, 1); | 70 const gfx::Size src_size(1024, 1); |
66 const gfx::Size target_size(64, 1); | 71 const gfx::Size target_size(64, 1); |
67 const int target_level = 4; | 72 const int target_level = 4; |
68 const SkSize expected_scale = SkSize::Make( | 73 const SkSize expected_scale = SkSize::Make( |
69 static_cast<float>(target_size.width()) / src_size.width(), 1); | 74 static_cast<float>(target_size.width()) / src_size.width(), 1); |
70 | 75 |
71 EXPECT_EQ(target_level, MipMapUtil::GetLevelForSize(src_size, target_size)); | 76 EXPECT_EQ(target_level, MipMapUtil::GetLevelForSize(src_size, target_size)); |
72 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForLevel( | 77 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForLevel( |
73 src_size, target_level)); | 78 src_size, target_level)); |
| 79 EXPECT_SIZE_EQ(target_size, |
| 80 MipMapUtil::GetSizeForLevel(src_size, target_level)); |
74 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForSize( | 81 EXPECT_FLOAT_SIZE_EQ(expected_scale, MipMapUtil::GetScaleAdjustmentForSize( |
75 src_size, target_size)); | 82 src_size, target_size)); |
76 } | 83 } |
77 | 84 |
78 // Ensures that we handle rounding images correctly. | 85 // Ensures that we handle rounding images correctly. |
79 TEST(MipMapUtilTest, Rounding) { | 86 TEST(MipMapUtilTest, Rounding) { |
80 const gfx::Size src_size(49, 49); | 87 const gfx::Size src_size(49, 49); |
81 const gfx::Size target_size_larger(25, 25); | 88 const gfx::Size target_size_larger(25, 25); |
82 const gfx::Size target_size_smaller(24, 24); | 89 const gfx::Size target_size_smaller(24, 24); |
83 const int target_level_larger = 0; | 90 const int target_level_larger = 0; |
84 const int target_level_smaller = 1; | 91 const int target_level_smaller = 1; |
85 const SkSize expected_scale_larger = SkSize::Make(1, 1); | 92 const SkSize expected_scale_larger = SkSize::Make(1, 1); |
86 const SkSize expected_scale_smaller = SkSize::Make( | 93 const SkSize expected_scale_smaller = SkSize::Make( |
87 static_cast<float>(target_size_smaller.width()) / src_size.width(), | 94 static_cast<float>(target_size_smaller.width()) / src_size.width(), |
88 static_cast<float>(target_size_smaller.height()) / src_size.height()); | 95 static_cast<float>(target_size_smaller.height()) / src_size.height()); |
89 | 96 |
90 EXPECT_EQ(target_level_larger, | 97 EXPECT_EQ(target_level_larger, |
91 MipMapUtil::GetLevelForSize(src_size, target_size_larger)); | 98 MipMapUtil::GetLevelForSize(src_size, target_size_larger)); |
92 EXPECT_EQ(target_level_smaller, | 99 EXPECT_EQ(target_level_smaller, |
93 MipMapUtil::GetLevelForSize(src_size, target_size_smaller)); | 100 MipMapUtil::GetLevelForSize(src_size, target_size_smaller)); |
94 EXPECT_FLOAT_SIZE_EQ( | 101 EXPECT_FLOAT_SIZE_EQ( |
95 expected_scale_larger, | 102 expected_scale_larger, |
96 MipMapUtil::GetScaleAdjustmentForLevel(src_size, target_level_larger)); | 103 MipMapUtil::GetScaleAdjustmentForLevel(src_size, target_level_larger)); |
97 EXPECT_FLOAT_SIZE_EQ( | 104 EXPECT_FLOAT_SIZE_EQ( |
98 expected_scale_smaller, | 105 expected_scale_smaller, |
99 MipMapUtil::GetScaleAdjustmentForLevel(src_size, target_level_smaller)); | 106 MipMapUtil::GetScaleAdjustmentForLevel(src_size, target_level_smaller)); |
| 107 EXPECT_SIZE_EQ(src_size, |
| 108 MipMapUtil::GetSizeForLevel(src_size, target_level_larger)); |
| 109 EXPECT_SIZE_EQ(target_size_smaller, |
| 110 MipMapUtil::GetSizeForLevel(src_size, target_level_smaller)); |
100 EXPECT_FLOAT_SIZE_EQ( | 111 EXPECT_FLOAT_SIZE_EQ( |
101 expected_scale_larger, | 112 expected_scale_larger, |
102 MipMapUtil::GetScaleAdjustmentForSize(src_size, target_size_larger)); | 113 MipMapUtil::GetScaleAdjustmentForSize(src_size, target_size_larger)); |
103 EXPECT_FLOAT_SIZE_EQ( | 114 EXPECT_FLOAT_SIZE_EQ( |
104 expected_scale_smaller, | 115 expected_scale_smaller, |
105 MipMapUtil::GetScaleAdjustmentForSize(src_size, target_size_smaller)); | 116 MipMapUtil::GetScaleAdjustmentForSize(src_size, target_size_smaller)); |
106 } | 117 } |
107 | 118 |
108 // Ensures that we return invalid values correctly. | 119 // Ensures that we return invalid values correctly. |
109 TEST(MipMapUtilTest, Invalid) { | 120 TEST(MipMapUtilTest, Invalid) { |
110 const gfx::Size valid_size(1024, 1024); | 121 const gfx::Size valid_size(1024, 1024); |
111 const gfx::Size invalid_size(0, 1024); | 122 const gfx::Size invalid_size(0, 1024); |
112 const SkSize invalid_result_size = SkSize::Make(-1, -1); | 123 const gfx::Size invalid_result_size(-1, -1); |
| 124 const SkSize invalid_float_result_size = SkSize::Make(-1, -1); |
113 const int invalid_result_level = -1; | 125 const int invalid_result_level = -1; |
114 | 126 |
115 EXPECT_EQ(invalid_result_level, | 127 EXPECT_EQ(invalid_result_level, |
116 MipMapUtil::GetLevelForSize(valid_size, invalid_size)); | 128 MipMapUtil::GetLevelForSize(valid_size, invalid_size)); |
117 EXPECT_EQ(invalid_result_level, | 129 EXPECT_EQ(invalid_result_level, |
118 MipMapUtil::GetLevelForSize(invalid_size, valid_size)); | 130 MipMapUtil::GetLevelForSize(invalid_size, valid_size)); |
119 EXPECT_FLOAT_SIZE_EQ( | 131 EXPECT_FLOAT_SIZE_EQ( |
120 invalid_result_size, | 132 invalid_float_result_size, |
121 MipMapUtil::GetScaleAdjustmentForSize(valid_size, invalid_size)); | 133 MipMapUtil::GetScaleAdjustmentForSize(valid_size, invalid_size)); |
122 EXPECT_FLOAT_SIZE_EQ( | 134 EXPECT_FLOAT_SIZE_EQ( |
123 invalid_result_size, | 135 invalid_float_result_size, |
124 MipMapUtil::GetScaleAdjustmentForSize(invalid_size, valid_size)); | 136 MipMapUtil::GetScaleAdjustmentForSize(invalid_size, valid_size)); |
125 EXPECT_FLOAT_SIZE_EQ(invalid_result_size, | 137 EXPECT_SIZE_EQ(invalid_result_size, |
| 138 MipMapUtil::GetSizeForLevel(valid_size, invalid_result_level)); |
| 139 EXPECT_SIZE_EQ(invalid_result_size, |
| 140 MipMapUtil::GetSizeForLevel(invalid_size, 0)); |
| 141 EXPECT_FLOAT_SIZE_EQ(invalid_float_result_size, |
126 MipMapUtil::GetScaleAdjustmentForLevel(invalid_size, 0)); | 142 MipMapUtil::GetScaleAdjustmentForLevel(invalid_size, 0)); |
127 EXPECT_FLOAT_SIZE_EQ( | 143 EXPECT_FLOAT_SIZE_EQ( |
128 invalid_result_size, | 144 invalid_float_result_size, |
129 MipMapUtil::GetScaleAdjustmentForLevel(valid_size, invalid_result_level)); | 145 MipMapUtil::GetScaleAdjustmentForLevel(valid_size, invalid_result_level)); |
130 } | 146 } |
131 | 147 |
132 } // namespace | 148 } // namespace |
133 } // namespace cc | 149 } // namespace cc |
OLD | NEW |