diff options
author | 2013-10-10 14:44:56 +0000 | |
---|---|---|
committer | 2013-10-10 14:44:56 +0000 | |
commit | 0a6151d66cc32d91eca037c91e557158cf8a2be2 (patch) | |
tree | 7fe96285f9fee5c8804bbbc60dd0395b983511a0 /tests | |
parent | b006fe7e2f6178ce076a5e2c76b4540d3d27ca98 (diff) |
Revert "Revert "change SkColorTable to be immutable""
This reverts commit b8162cb840f4cb6002ef68d5ac775c6a122c52a9.
Fixed was call-sites in benches that used the (now gone) setIsOpaque api.
R=scroggo@google.com
Review URL: https://codereview.chromium.org/26572006
git-svn-id: http://skia.googlecode.com/svn/trunk@11695 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests')
-rw-r--r-- | tests/BitmapCopyTest.cpp | 105 |
1 files changed, 50 insertions, 55 deletions
diff --git a/tests/BitmapCopyTest.cpp b/tests/BitmapCopyTest.cpp index 88ce577f68..38453c89b6 100644 --- a/tests/BitmapCopyTest.cpp +++ b/tests/BitmapCopyTest.cpp @@ -32,47 +32,30 @@ static bool canHaveAlpha(SkBitmap::Config config) { } // copyTo() should preserve isOpaque when it makes sense -static void test_isOpaque(skiatest::Reporter* reporter, const SkBitmap& src, +static void test_isOpaque(skiatest::Reporter* reporter, + const SkBitmap& srcOpaque, const SkBitmap& srcPremul, SkBitmap::Config dstConfig) { - SkBitmap bitmap(src); SkBitmap dst; - // we need the lock so that we get a valid colorTable (when available) - SkAutoLockPixels alp(bitmap); - SkColorTable* ctable = bitmap.getColorTable(); - unsigned ctableFlags = ctable ? ctable->getFlags() : 0; - - if (canHaveAlpha(bitmap.config()) && canHaveAlpha(dstConfig)) { - bitmap.setIsOpaque(false); - if (ctable) { - ctable->setFlags(ctableFlags & ~SkColorTable::kColorsAreOpaque_Flag); - } - REPORTER_ASSERT(reporter, bitmap.copyTo(&dst, dstConfig)); + if (canHaveAlpha(srcPremul.config()) && canHaveAlpha(dstConfig)) { + REPORTER_ASSERT(reporter, srcPremul.copyTo(&dst, dstConfig)); REPORTER_ASSERT(reporter, dst.config() == dstConfig); - if (bitmap.isOpaque() != dst.isOpaque()) { - report_opaqueness(reporter, bitmap, dst); + if (srcPremul.isOpaque() != dst.isOpaque()) { + report_opaqueness(reporter, srcPremul, dst); } } - bitmap.setIsOpaque(true); - if (ctable) { - ctable->setFlags(ctableFlags | SkColorTable::kColorsAreOpaque_Flag); - } - REPORTER_ASSERT(reporter, bitmap.copyTo(&dst, dstConfig)); + REPORTER_ASSERT(reporter, srcOpaque.copyTo(&dst, dstConfig)); REPORTER_ASSERT(reporter, dst.config() == dstConfig); - if (bitmap.isOpaque() != dst.isOpaque()) { - report_opaqueness(reporter, bitmap, dst); - } - - if (ctable) { - ctable->setFlags(ctableFlags); + if (srcOpaque.isOpaque() != dst.isOpaque()) { + report_opaqueness(reporter, srcOpaque, dst); } } -static void init_src(const SkBitmap& bitmap, const SkColorTable* ct) { +static void init_src(const SkBitmap& bitmap) { SkAutoLockPixels lock(bitmap); if (bitmap.getPixels()) { - if (ct) { + if (bitmap.getColorTable()) { sk_bzero(bitmap.getPixels(), bitmap.getSize()); } else { bitmap.eraseColor(SK_ColorWHITE); @@ -80,11 +63,11 @@ static void init_src(const SkBitmap& bitmap, const SkColorTable* ct) { } } -static SkColorTable* init_ctable() { +static SkColorTable* init_ctable(SkAlphaType alphaType) { static const SkColor colors[] = { SK_ColorBLACK, SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE }; - return new SkColorTable(colors, SK_ARRAY_COUNT(colors)); + return new SkColorTable(colors, SK_ARRAY_COUNT(colors), alphaType); } struct Pair { @@ -256,18 +239,30 @@ static void TestBitmapCopy(skiatest::Reporter* reporter) { for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { for (size_t j = 0; j < SK_ARRAY_COUNT(gPairs); j++) { - SkBitmap src, dst; - SkColorTable* ct = NULL; - - src.setConfig(gPairs[i].fConfig, W, H); - if (SkBitmap::kIndex8_Config == src.config()) { - ct = init_ctable(); + SkBitmap srcOpaque, srcPremul, dst; + + { + SkColorTable* ctOpaque = NULL; + SkColorTable* ctPremul = NULL; + + srcOpaque.setConfig(gPairs[i].fConfig, W, H); + srcPremul.setConfig(gPairs[i].fConfig, W, H); + if (SkBitmap::kIndex8_Config == gPairs[i].fConfig) { + ctOpaque = init_ctable(kOpaque_SkAlphaType); + ctPremul = init_ctable(kPremul_SkAlphaType); + } + srcOpaque.allocPixels(ctOpaque); + srcPremul.allocPixels(ctPremul); + SkSafeUnref(ctOpaque); + SkSafeUnref(ctPremul); + + srcOpaque.setIsOpaque(true); + srcPremul.setIsOpaque(false); } - src.allocPixels(ct); - SkSafeUnref(ct); + init_src(srcOpaque); + init_src(srcPremul); - init_src(src, ct); - bool success = src.copyTo(&dst, gPairs[j].fConfig); + bool success = srcPremul.copyTo(&dst, gPairs[j].fConfig); bool expected = gPairs[i].fValid[j] != '0'; if (success != expected) { SkString str; @@ -277,7 +272,7 @@ static void TestBitmapCopy(skiatest::Reporter* reporter) { reporter->reportFailed(str); } - bool canSucceed = src.canCopyTo(gPairs[j].fConfig); + bool canSucceed = srcPremul.canCopyTo(gPairs[j].fConfig); if (success != canSucceed) { SkString str; str.printf("SkBitmap::copyTo from %s to %s. returned %s canCopyTo %s", @@ -287,31 +282,30 @@ static void TestBitmapCopy(skiatest::Reporter* reporter) { } if (success) { - REPORTER_ASSERT(reporter, src.width() == dst.width()); - REPORTER_ASSERT(reporter, src.height() == dst.height()); + REPORTER_ASSERT(reporter, srcPremul.width() == dst.width()); + REPORTER_ASSERT(reporter, srcPremul.height() == dst.height()); REPORTER_ASSERT(reporter, dst.config() == gPairs[j].fConfig); - test_isOpaque(reporter, src, dst.config()); - if (src.config() == dst.config()) { - SkAutoLockPixels srcLock(src); + test_isOpaque(reporter, srcOpaque, srcPremul, dst.config()); + if (srcPremul.config() == dst.config()) { + SkAutoLockPixels srcLock(srcPremul); SkAutoLockPixels dstLock(dst); - REPORTER_ASSERT(reporter, src.readyToDraw()); + REPORTER_ASSERT(reporter, srcPremul.readyToDraw()); REPORTER_ASSERT(reporter, dst.readyToDraw()); - const char* srcP = (const char*)src.getAddr(0, 0); + const char* srcP = (const char*)srcPremul.getAddr(0, 0); const char* dstP = (const char*)dst.getAddr(0, 0); REPORTER_ASSERT(reporter, srcP != dstP); REPORTER_ASSERT(reporter, !memcmp(srcP, dstP, - src.getSize())); - REPORTER_ASSERT(reporter, src.getGenerationID() == dst.getGenerationID()); + srcPremul.getSize())); + REPORTER_ASSERT(reporter, srcPremul.getGenerationID() == dst.getGenerationID()); } else { - REPORTER_ASSERT(reporter, src.getGenerationID() != dst.getGenerationID()); + REPORTER_ASSERT(reporter, srcPremul.getGenerationID() != dst.getGenerationID()); } // test extractSubset { - SkBitmap bitmap(src); + SkBitmap bitmap(srcOpaque); SkBitmap subset; SkIRect r; r.set(1, 1, 2, 2); - bitmap.setIsOpaque(true); bitmap.setIsVolatile(true); if (bitmap.extractSubset(&subset, r)) { REPORTER_ASSERT(reporter, subset.width() == 1); @@ -335,7 +329,8 @@ static void TestBitmapCopy(skiatest::Reporter* reporter) { REPORTER_ASSERT(reporter, (copy.getColorTable() != NULL) == hasCT); } - bitmap.setIsOpaque(false); + + bitmap = srcPremul; bitmap.setIsVolatile(false); if (bitmap.extractSubset(&subset, r)) { REPORTER_ASSERT(reporter, @@ -441,7 +436,7 @@ static void TestBitmapCopy(skiatest::Reporter* reporter) { src.setConfig(gPairs[i].fConfig, subW, subH); } if (SkBitmap::kIndex8_Config == src.config()) { - ct = init_ctable(); + ct = init_ctable(kPremul_SkAlphaType); } src.allocPixels(ct); |