aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/MipMapTest.cpp
diff options
context:
space:
mode:
authorGravatar cblume <cblume@chromium.org>2016-06-02 09:01:48 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-02 09:01:48 -0700
commitf95ff4a37aba42a07b0fed9ee760d1a238c6d291 (patch)
treef064ccc217e64f6cb494578bdc9c12dc6471ea55 /tests/MipMapTest.cpp
parent09563cec928da5052972b3dca7f022fca3a72d05 (diff)
Add getting the size of a given mipmap level.
When allocating memory for mipmaps, it would be very handy to know the dimensions of a given mipmap level. R=bsalomon@google.com BUG=578304 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2018283002 Review-Url: https://codereview.chromium.org/2018283002
Diffstat (limited to 'tests/MipMapTest.cpp')
-rw-r--r--tests/MipMapTest.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/MipMapTest.cpp b/tests/MipMapTest.cpp
index 467fd34998..5070d04df6 100644
--- a/tests/MipMapTest.cpp
+++ b/tests/MipMapTest.cpp
@@ -150,3 +150,50 @@ DEF_TEST(MipMap_ComputeLevelCount, reporter) {
REPORTER_ASSERT(reporter, currentTest.fExpectedLevelCount == levelCount);
}
}
+
+struct LevelSizeScenario {
+ int fBaseWidth;
+ int fBaseHeight;
+ int fLevel;
+ SkSize fExpectedMipMapLevelSize;
+};
+
+DEF_TEST(MipMap_ComputeLevelSize, reporter) {
+ const LevelSizeScenario tests[] = {
+ // Test mipmaps with negative sizes
+ {-100, 100, 1, SkSize::Make(0, 0)},
+ {100, -100, 1, SkSize::Make(0, 0)},
+ {-100, -100, 1, SkSize::Make(0, 0)},
+
+ // Test mipmaps with 0, 1, 2 as dimensions
+ // (SkMipMap::Build requires a min size of 1)
+ //
+ // 0
+ {0, 100, 1, SkSize::Make(0, 0)},
+ {100, 0, 1, SkSize::Make(0, 0)},
+ {0, 0, 1, SkSize::Make(0, 0)},
+ // 1
+
+ {1, 100, 1, SkSize::Make(1, 50)},
+ {100, 1, 1, SkSize::Make(50, 1)},
+ {1, 1, 1, SkSize::Make(0, 0)},
+ // 2
+ {2, 100, 1, SkSize::Make(1, 50)},
+ {100, 2, 2, SkSize::Make(25, 1)},
+ {2, 2, 1, SkSize::Make(1, 1)},
+
+ // Test a handful of cases
+ {63, 63, 3, SkSize::Make(7, 7)},
+ {64, 64, 3, SkSize::Make(8, 8)},
+ {127, 127, 3, SkSize::Make(15, 15)},
+ {64, 129, 4, SkSize::Make(4, 8)},
+ {255, 32, 7, SkSize::Make(1, 1)},
+ {500, 1000, 2, SkSize::Make(125, 250)},
+ };
+
+ for (auto& currentTest : tests) {
+ SkSize levelSize = SkMipMap::ComputeLevelSize(currentTest.fBaseWidth,
+ currentTest.fBaseHeight, currentTest.fLevel);
+ REPORTER_ASSERT(reporter, currentTest.fExpectedMipMapLevelSize == levelSize);
+ }
+}