| 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 |