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