| Index: tests/CachedDecodingPixelRefTest.cpp
|
| diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp
|
| index 2813b42bf8b40ce3638266a19c8d8b3d317dc09b..51af15fd39292dba66b0d675ab5042b7510dabc4 100644
|
| --- a/tests/CachedDecodingPixelRefTest.cpp
|
| +++ b/tests/CachedDecodingPixelRefTest.cpp
|
| @@ -163,17 +163,21 @@ public:
|
| };
|
| static int Width() { return 10; }
|
| static int Height() { return 10; }
|
| - static uint32_t Color() { return 0xff123456; }
|
| - TestImageGenerator(TestType type, skiatest::Reporter* reporter)
|
| - : INHERITED(GetMyInfo()), fType(type), fReporter(reporter) {
|
| + // value choosen so that there is no loss when converting to to RGB565 and back
|
| + static SkColor Color() { return 0xff10345a; }
|
| + static SkPMColor PMColor() { return SkPreMultiplyColor(Color()); }
|
| +
|
| + TestImageGenerator(TestType type, skiatest::Reporter* reporter,
|
| + SkColorType colorType = kN32_SkColorType)
|
| + : INHERITED(GetMyInfo(colorType)), fType(type), fReporter(reporter) {
|
| SkASSERT((fType <= kLast_TestType) && (fType >= 0));
|
| }
|
| virtual ~TestImageGenerator() { }
|
|
|
| protected:
|
| - static SkImageInfo GetMyInfo() {
|
| - return SkImageInfo::MakeN32(TestImageGenerator::Width(), TestImageGenerator::Height(),
|
| - kOpaque_SkAlphaType);
|
| + static SkImageInfo GetMyInfo(SkColorType colorType) {
|
| + return SkImageInfo::Make(TestImageGenerator::Width(), TestImageGenerator::Height(),
|
| + colorType, kOpaque_SkAlphaType);
|
| }
|
|
|
| bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
|
| @@ -183,14 +187,35 @@ protected:
|
| if (fType != kSucceedGetPixels_TestType) {
|
| return false;
|
| }
|
| - if (info.colorType() != kN32_SkColorType) {
|
| + if (info.colorType() != kN32_SkColorType && info.colorType() != getInfo().colorType()) {
|
| return false;
|
| }
|
| char* bytePtr = static_cast<char*>(pixels);
|
| - for (int y = 0; y < info.height(); ++y) {
|
| - sk_memset32(reinterpret_cast<SkColor*>(bytePtr),
|
| - TestImageGenerator::Color(), info.width());
|
| - bytePtr += rowBytes;
|
| + switch (info.colorType()) {
|
| + case kN32_SkColorType:
|
| + for (int y = 0; y < info.height(); ++y) {
|
| + sk_memset32((uint32_t*)bytePtr,
|
| + TestImageGenerator::PMColor(), info.width());
|
| + bytePtr += rowBytes;
|
| + }
|
| + break;
|
| + case kIndex_8_SkColorType:
|
| + *ctableCount = 1;
|
| + ctable[0] = TestImageGenerator::PMColor();
|
| + for (int y = 0; y < info.height(); ++y) {
|
| + memset(bytePtr, 0, info.width());
|
| + bytePtr += rowBytes;
|
| + }
|
| + break;
|
| + case kRGB_565_SkColorType:
|
| + for (int y = 0; y < info.height(); ++y) {
|
| + sk_memset16((uint16_t*)bytePtr,
|
| + SkPixel32ToPixel16(TestImageGenerator::PMColor()), info.width());
|
| + bytePtr += rowBytes;
|
| + }
|
| + break;
|
| + default:
|
| + return false;
|
| }
|
| return true;
|
| }
|
| @@ -214,7 +239,7 @@ static void check_test_image_generator_bitmap(skiatest::Reporter* reporter,
|
| int errors = 0;
|
| for (int y = 0; y < bm.height(); ++y) {
|
| for (int x = 0; x < bm.width(); ++x) {
|
| - if (TestImageGenerator::Color() != *bm.getAddr32(x, y)) {
|
| + if (TestImageGenerator::Color() != bm.getColor(x, y)) {
|
| ++errors;
|
| }
|
| }
|
| @@ -224,8 +249,9 @@ static void check_test_image_generator_bitmap(skiatest::Reporter* reporter,
|
|
|
| static void check_pixelref(TestImageGenerator::TestType type,
|
| skiatest::Reporter* reporter,
|
| - SkDiscardableMemory::Factory* factory) {
|
| - SkAutoTDelete<SkImageGenerator> gen(new TestImageGenerator(type, reporter));
|
| + SkDiscardableMemory::Factory* factory,
|
| + SkColorType colorType) {
|
| + SkAutoTDelete<SkImageGenerator> gen(new TestImageGenerator(type, reporter, colorType));
|
| REPORTER_ASSERT(reporter, gen.get() != nullptr);
|
| SkBitmap lazy;
|
| bool success = SkDEPRECATED_InstallDiscardablePixelRef(gen.detach(), nullptr, &lazy, factory);
|
| @@ -245,56 +271,77 @@ static void check_pixelref(TestImageGenerator::TestType type,
|
| * SkDiscardableMemory::Factory choices.
|
| */
|
| DEF_TEST(DiscardableAndCachingPixelRef, reporter) {
|
| - check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, nullptr);
|
| - check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, nullptr);
|
| + const SkColorType testColorTypes[] = {
|
| + kN32_SkColorType,
|
| + kIndex_8_SkColorType,
|
| + kRGB_565_SkColorType
|
| + };
|
| + for (const SkColorType testColorType : testColorTypes) {
|
| + check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, nullptr,
|
| + testColorType);
|
| + check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, nullptr,
|
| + testColorType);
|
|
|
| - SkAutoTUnref<SkDiscardableMemoryPool> pool(
|
| - SkDiscardableMemoryPool::Create(1, nullptr));
|
| - REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
|
| - check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, pool);
|
| - REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
|
| - check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, pool);
|
| - REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
|
| + SkAutoTUnref<SkDiscardableMemoryPool> pool(
|
| + SkDiscardableMemoryPool::Create(1, nullptr));
|
| + REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
|
| + check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, pool,
|
| + testColorType);
|
| + REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
|
| + check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, pool,
|
| + testColorType);
|
| + REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
|
|
|
| - SkDiscardableMemoryPool* globalPool = SkGetGlobalDiscardableMemoryPool();
|
| - // Only acts differently from nullptr on a platform that has a
|
| - // default discardable memory implementation that differs from the
|
| - // global DM pool.
|
| - check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, globalPool);
|
| - check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, globalPool);
|
| + SkDiscardableMemoryPool* globalPool = SkGetGlobalDiscardableMemoryPool();
|
| + // Only acts differently from nullptr on a platform that has a
|
| + // default discardable memory implementation that differs from the
|
| + // global DM pool.
|
| + check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, globalPool,
|
| + testColorType);
|
| + check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, globalPool,
|
| + testColorType);
|
| + }
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| DEF_TEST(Image_NewFromGenerator, r) {
|
| - TestImageGenerator::TestType testTypes[] = {
|
| + const TestImageGenerator::TestType testTypes[] = {
|
| TestImageGenerator::kFailGetPixels_TestType,
|
| TestImageGenerator::kSucceedGetPixels_TestType,
|
| };
|
| + const SkColorType testColorTypes[] = {
|
| + kN32_SkColorType,
|
| + kIndex_8_SkColorType,
|
| + kRGB_565_SkColorType
|
| + };
|
| for (size_t i = 0; i < SK_ARRAY_COUNT(testTypes); ++i) {
|
| TestImageGenerator::TestType test = testTypes[i];
|
| - SkImageGenerator* gen = new TestImageGenerator(test, r);
|
| - SkAutoTUnref<SkImage> image(SkImage::NewFromGenerator(gen));
|
| - if (nullptr == image.get()) {
|
| - ERRORF(r, "SkImage::NewFromGenerator unexpecedly failed ["
|
| - SK_SIZE_T_SPECIFIER "]", i);
|
| - continue;
|
| - }
|
| - REPORTER_ASSERT(r, TestImageGenerator::Width() == image->width());
|
| - REPORTER_ASSERT(r, TestImageGenerator::Height() == image->height());
|
| - REPORTER_ASSERT(r, image->isLazyGenerated());
|
| + for (const SkColorType testColorType : testColorTypes) {
|
| + SkImageGenerator* gen = new TestImageGenerator(test, r, testColorType);
|
| + SkAutoTUnref<SkImage> image(SkImage::NewFromGenerator(gen));
|
| + if (nullptr == image.get()) {
|
| + ERRORF(r, "SkImage::NewFromGenerator unexpecedly failed ["
|
| + SK_SIZE_T_SPECIFIER "]", i);
|
| + continue;
|
| + }
|
| + REPORTER_ASSERT(r, TestImageGenerator::Width() == image->width());
|
| + REPORTER_ASSERT(r, TestImageGenerator::Height() == image->height());
|
| + REPORTER_ASSERT(r, image->isLazyGenerated());
|
|
|
| - SkBitmap bitmap;
|
| - bitmap.allocN32Pixels(TestImageGenerator::Width(), TestImageGenerator::Height());
|
| - SkCanvas canvas(bitmap);
|
| - const SkColor kDefaultColor = 0xffabcdef;
|
| - canvas.clear(kDefaultColor);
|
| - canvas.drawImage(image, 0, 0, nullptr);
|
| - if (TestImageGenerator::kSucceedGetPixels_TestType == test) {
|
| - REPORTER_ASSERT(
|
| - r, TestImageGenerator::Color() == *bitmap.getAddr32(0, 0));
|
| - } else {
|
| - REPORTER_ASSERT(r, kDefaultColor == bitmap.getColor(0,0));
|
| + SkBitmap bitmap;
|
| + bitmap.allocN32Pixels(TestImageGenerator::Width(), TestImageGenerator::Height());
|
| + SkCanvas canvas(bitmap);
|
| + const SkColor kDefaultColor = 0xffabcdef;
|
| + canvas.clear(kDefaultColor);
|
| + canvas.drawImage(image, 0, 0, nullptr);
|
| + if (TestImageGenerator::kSucceedGetPixels_TestType == test) {
|
| + REPORTER_ASSERT(
|
| + r, TestImageGenerator::Color() == bitmap.getColor(0, 0));
|
| + }
|
| + else {
|
| + REPORTER_ASSERT(r, kDefaultColor == bitmap.getColor(0, 0));
|
| + }
|
| }
|
| }
|
| }
|
|
|