Chromium Code Reviews| Index: tests/CachedDecodingPixelRefTest.cpp |
| diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp |
| index 2813b42bf8b40ce3638266a19c8d8b3d317dc09b..dc51cc393bfe56d0ff78e5ee7bd87bc71a36f566 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: |
|
scroggo
2015/11/09 20:18:09
nit: in Skia, we indent the case statement from sw
|
| + 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 (size_t i = 0; i < SK_ARRAY_COUNT(testColorTypes); ++i) { |
|
scroggo
2015/11/09 20:18:09
nit: we can now use range based for loops. This is
|
| + check_pixelref(TestImageGenerator::kFailGetPixels_TestType, reporter, nullptr, |
| + testColorTypes[i]); |
| + check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, nullptr, |
| + testColorTypes[i]); |
| - 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, |
| + testColorTypes[i]); |
| + REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed()); |
| + check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, pool, |
| + testColorTypes[i]); |
| + 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, |
| + testColorTypes[i]); |
| + check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType, reporter, globalPool, |
| + testColorTypes[i]); |
| + } |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| 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 (size_t j = 0; j < SK_ARRAY_COUNT(testColorTypes); ++j) { |
| + SkImageGenerator* gen = new TestImageGenerator(test, r, testColorTypes[j]); |
| + 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)); |
| + } |
| } |
| } |
| } |