Revert of https://codereview.chromium.org/112113005/
Reason for revert: breaks unit tests
R=mtklein@google.com, bsalomon@google.com, reed@google.com, scroggo@google.com
TBR=bsalomon@google.com, mtklein@google.com, reed@google.com, scroggo@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:1742
Author: caryclark@google.com
Review URL: https://codereview.chromium.org/134453002
git-svn-id: http://skia.googlecode.com/svn/trunk@13024 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/BitmapCopyTest.cpp b/tests/BitmapCopyTest.cpp
index 93367bf..d831e5e 100644
--- a/tests/BitmapCopyTest.cpp
+++ b/tests/BitmapCopyTest.cpp
@@ -1,3 +1,4 @@
+
/*
* Copyright 2011 Google Inc.
*
@@ -199,103 +200,44 @@
setPixel(coords[i]->fX, coords[i]->fY, i, bm);
}
-static const Pair gPairs[] = {
- { SkBitmap::kNo_Config, "0000000" },
- { SkBitmap::kA8_Config, "0101010" },
- { SkBitmap::kIndex8_Config, "0111010" },
- { SkBitmap::kRGB_565_Config, "0101010" },
- { SkBitmap::kARGB_4444_Config, "0101110" },
- { SkBitmap::kARGB_8888_Config, "0101110" },
-};
-
-static const int W = 20;
-static const int H = 33;
-
-static void setup_src_bitmaps(SkBitmap* srcOpaque, SkBitmap* srcPremul,
- SkBitmap::Config config) {
- SkColorTable* ctOpaque = NULL;
- SkColorTable* ctPremul = NULL;
-
- srcOpaque->setConfig(config, W, H, 0, kOpaque_SkAlphaType);
- srcPremul->setConfig(config, W, H, 0, kPremul_SkAlphaType);
- if (SkBitmap::kIndex8_Config == config) {
- ctOpaque = init_ctable(kOpaque_SkAlphaType);
- ctPremul = init_ctable(kPremul_SkAlphaType);
- }
- srcOpaque->allocPixels(ctOpaque);
- srcPremul->allocPixels(ctPremul);
- SkSafeUnref(ctOpaque);
- SkSafeUnref(ctPremul);
- init_src(*srcOpaque);
- init_src(*srcPremul);
-}
-
-DEF_TEST(BitmapCopy_extractSubset, reporter) {
- for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) {
- SkBitmap srcOpaque, srcPremul;
- setup_src_bitmaps(&srcOpaque, &srcPremul, gPairs[i].fConfig);
-
- SkBitmap bitmap(srcOpaque);
- SkBitmap subset;
- SkIRect r;
- // Extract a subset which has the same width as the original. This
- // catches a bug where we cloned the genID incorrectly.
- r.set(0, 1, W, 3);
- bitmap.setIsVolatile(true);
- if (bitmap.extractSubset(&subset, r)) {
- REPORTER_ASSERT(reporter, subset.width() == W);
- REPORTER_ASSERT(reporter, subset.height() == 2);
- REPORTER_ASSERT(reporter, subset.alphaType() == bitmap.alphaType());
- REPORTER_ASSERT(reporter, subset.isVolatile() == true);
-
- // Test copying an extracted subset.
- for (size_t j = 0; j < SK_ARRAY_COUNT(gPairs); j++) {
- SkBitmap copy;
- bool success = subset.copyTo(©, gPairs[j].fConfig);
- if (!success) {
- // Skip checking that success matches fValid, which is redundant
- // with the code below.
- REPORTER_ASSERT(reporter, gPairs[i].fConfig != gPairs[j].fConfig);
- continue;
- }
-
- // When performing a copy of an extracted subset, the gen id should
- // change.
- REPORTER_ASSERT(reporter, copy.getGenerationID() != subset.getGenerationID());
-
- REPORTER_ASSERT(reporter, copy.width() == W);
- REPORTER_ASSERT(reporter, copy.height() == 2);
-
- if (gPairs[i].fConfig == gPairs[j].fConfig) {
- SkAutoLockPixels alp0(subset);
- SkAutoLockPixels alp1(copy);
- // they should both have, or both not-have, a colortable
- bool hasCT = subset.getColorTable() != NULL;
- REPORTER_ASSERT(reporter, (copy.getColorTable() != NULL) == hasCT);
- }
- }
- }
-
- bitmap = srcPremul;
- bitmap.setIsVolatile(false);
- if (bitmap.extractSubset(&subset, r)) {
- REPORTER_ASSERT(reporter, subset.alphaType() == bitmap.alphaType());
- REPORTER_ASSERT(reporter, subset.isVolatile() == false);
- }
- }
-}
-
DEF_TEST(BitmapCopy, reporter) {
+ static const Pair gPairs[] = {
+ { SkBitmap::kNo_Config, "0000000" },
+ { SkBitmap::kA8_Config, "0101010" },
+ { SkBitmap::kIndex8_Config, "0111010" },
+ { SkBitmap::kRGB_565_Config, "0101010" },
+ { SkBitmap::kARGB_4444_Config, "0101110" },
+ { SkBitmap::kARGB_8888_Config, "0101110" },
+ };
+
static const bool isExtracted[] = {
false, true
};
- for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) {
- SkBitmap srcOpaque, srcPremul;
- setup_src_bitmaps(&srcOpaque, &srcPremul, gPairs[i].fConfig);
+ const int W = 20;
+ const int H = 33;
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) {
for (size_t j = 0; j < SK_ARRAY_COUNT(gPairs); j++) {
- SkBitmap dst;
+ SkBitmap srcOpaque, srcPremul, dst;
+
+ {
+ SkColorTable* ctOpaque = NULL;
+ SkColorTable* ctPremul = NULL;
+
+ srcOpaque.setConfig(gPairs[i].fConfig, W, H, 0, kOpaque_SkAlphaType);
+ srcPremul.setConfig(gPairs[i].fConfig, W, H, 0, kPremul_SkAlphaType);
+ 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);
+ }
+ init_src(srcOpaque);
+ init_src(srcPremul);
bool success = srcPremul.copyTo(&dst, gPairs[j].fConfig);
bool expected = gPairs[i].fValid[j] != '0';
@@ -331,6 +273,44 @@
} else {
REPORTER_ASSERT(reporter, srcPremul.getGenerationID() != dst.getGenerationID());
}
+ // test extractSubset
+ {
+ SkBitmap bitmap(srcOpaque);
+ SkBitmap subset;
+ SkIRect r;
+ r.set(1, 1, 2, 2);
+ bitmap.setIsVolatile(true);
+ if (bitmap.extractSubset(&subset, r)) {
+ REPORTER_ASSERT(reporter, subset.width() == 1);
+ REPORTER_ASSERT(reporter, subset.height() == 1);
+ REPORTER_ASSERT(reporter,
+ subset.alphaType() == bitmap.alphaType());
+ REPORTER_ASSERT(reporter,
+ subset.isVolatile() == true);
+
+ SkBitmap copy;
+ REPORTER_ASSERT(reporter,
+ subset.copyTo(©, subset.config()));
+ REPORTER_ASSERT(reporter, copy.width() == 1);
+ REPORTER_ASSERT(reporter, copy.height() == 1);
+ REPORTER_ASSERT(reporter, copy.rowBytes() <= 4);
+
+ SkAutoLockPixels alp0(subset);
+ SkAutoLockPixels alp1(copy);
+ // they should both have, or both not-have, a colortable
+ bool hasCT = subset.getColorTable() != NULL;
+ REPORTER_ASSERT(reporter,
+ (copy.getColorTable() != NULL) == hasCT);
+ }
+ bitmap = srcPremul;
+ bitmap.setIsVolatile(false);
+ if (bitmap.extractSubset(&subset, r)) {
+ REPORTER_ASSERT(reporter,
+ subset.alphaType() == bitmap.alphaType());
+ REPORTER_ASSERT(reporter,
+ subset.isVolatile() == false);
+ }
+ }
} else {
// dst should be unchanged from its initial state
REPORTER_ASSERT(reporter, dst.config() == SkBitmap::kNo_Config);