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