MipMapTest.cpp revision 8f6884aab8aecd7657cf3f9cdbc682f0deca29c5
1eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com/* 2eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com * Copyright 2013 Google Inc. 3eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com * 4eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com * Use of this source code is governed by a BSD-style license that can be 5eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com * found in the LICENSE file. 6eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com */ 7eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com 8eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com#include "SkBitmap.h" 98f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "SkMipMap.h" 10eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com#include "SkRandom.h" 118f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 12eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com 13e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic void make_bitmap(SkBitmap* bm, SkRandom& rand) { 14eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com // for now, Build needs a min size of 2, otherwise it will return NULL. 15eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com // should fix that to support 1 X N, where N > 1 to return non-null. 16eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com int w = 2 + rand.nextU() % 1000; 17eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com int h = 2 + rand.nextU() % 1000; 18eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com bm->setConfig(SkBitmap::kARGB_8888_Config, w, h); 19eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com bm->allocPixels(); 20eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com bm->eraseColor(SK_ColorWHITE); 21eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com} 22eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com 23e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(MipMap, reporter) { 24eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com SkBitmap bm; 25e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 26eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com 27eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com for (int i = 0; i < 500; ++i) { 28eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com make_bitmap(&bm, rand); 29eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com SkAutoTUnref<SkMipMap> mm(SkMipMap::Build(bm)); 30a79919883e275e7a5e00afc50be10cc721f6ba1dskia.committer@gmail.com 31eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, !mm->extractLevel(SK_Scalar1, NULL)); 32eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, !mm->extractLevel(SK_Scalar1 * 2, NULL)); 33a79919883e275e7a5e00afc50be10cc721f6ba1dskia.committer@gmail.com 342c38fed29df8fef80ce8268841e8506e2ceb19e7reed@google.com SkMipMap::Level prevLevel; 352c38fed29df8fef80ce8268841e8506e2ceb19e7reed@google.com sk_bzero(&prevLevel, sizeof(prevLevel)); 36eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com 37eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com SkScalar scale = SK_Scalar1; 38eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com for (int j = 0; j < 30; ++j) { 39eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com scale = scale * 2 / 3; 40eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com 41eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com SkMipMap::Level level; 42eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com if (mm->extractLevel(scale, &level)) { 43eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, level.fPixels); 44eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, level.fWidth > 0); 45eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, level.fHeight > 0); 46eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, level.fRowBytes >= level.fWidth * 4); 47a79919883e275e7a5e00afc50be10cc721f6ba1dskia.committer@gmail.com 48eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com if (prevLevel.fPixels) { 49eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, level.fWidth <= prevLevel.fWidth); 50eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com REPORTER_ASSERT(reporter, level.fHeight <= prevLevel.fHeight); 51eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com } 52eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com prevLevel = level; 53eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com } 54eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com } 55eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com } 56eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com} 57