Index: tests/SurfaceTest.cpp |
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp |
index e8ff63cca0d3e4be30b851888b5d9e64bf7e4aa6..57ad5e0ca8340462ac2ddb9f80ca40ee97b66370 100644 |
--- a/tests/SurfaceTest.cpp |
+++ b/tests/SurfaceTest.cpp |
@@ -390,6 +390,25 @@ static void test_image_readpixels(skiatest::Reporter* reporter, SkImage* image, |
REPORTER_ASSERT(reporter, has_pixels(&pixels[1], w*h - 1, notExpected)); |
} |
+static void check_legacy_bitmap(skiatest::Reporter* reporter, const SkImage* image, |
+ const SkBitmap& bitmap, SkImage::LegacyBitmapMode mode) { |
+ REPORTER_ASSERT(reporter, image->width() == bitmap.width()); |
+ REPORTER_ASSERT(reporter, image->height() == bitmap.height()); |
+ REPORTER_ASSERT(reporter, image->isOpaque() == bitmap.isOpaque()); |
+ |
+ if (SkImage::kRO_LegacyBitmapMode == mode) { |
+ REPORTER_ASSERT(reporter, bitmap.isImmutable()); |
+ } |
+ |
+ SkAutoLockPixels alp(bitmap); |
+ REPORTER_ASSERT(reporter, bitmap.getPixels()); |
+ |
+ const SkImageInfo info = SkImageInfo::MakeN32(1, 1, bitmap.alphaType()); |
+ SkPMColor imageColor; |
+ REPORTER_ASSERT(reporter, image->readPixels(info, &imageColor, sizeof(SkPMColor), 0, 0)); |
+ REPORTER_ASSERT(reporter, imageColor == *bitmap.getAddr32(0, 0)); |
+} |
+ |
static void test_legacy_bitmap(skiatest::Reporter* reporter, const SkImage* image) { |
const SkImage::LegacyBitmapMode modes[] = { |
SkImage::kRO_LegacyBitmapMode, |
@@ -398,22 +417,18 @@ static void test_legacy_bitmap(skiatest::Reporter* reporter, const SkImage* imag |
for (size_t i = 0; i < SK_ARRAY_COUNT(modes); ++i) { |
SkBitmap bitmap; |
REPORTER_ASSERT(reporter, image->asLegacyBitmap(&bitmap, modes[i])); |
- |
- REPORTER_ASSERT(reporter, image->width() == bitmap.width()); |
- REPORTER_ASSERT(reporter, image->height() == bitmap.height()); |
- REPORTER_ASSERT(reporter, image->isOpaque() == bitmap.isOpaque()); |
- |
- bitmap.lockPixels(); |
- REPORTER_ASSERT(reporter, bitmap.getPixels()); |
- |
- const SkImageInfo info = SkImageInfo::MakeN32(1, 1, bitmap.alphaType()); |
- SkPMColor imageColor; |
- REPORTER_ASSERT(reporter, image->readPixels(info, &imageColor, sizeof(SkPMColor), 0, 0)); |
- REPORTER_ASSERT(reporter, imageColor == *bitmap.getAddr32(0, 0)); |
- |
- if (SkImage::kRO_LegacyBitmapMode == modes[i]) { |
- REPORTER_ASSERT(reporter, bitmap.isImmutable()); |
- } |
+ check_legacy_bitmap(reporter, image, bitmap, modes[i]); |
+ |
+ // Test subsetting to exercise the rowBytes logic. |
+ SkBitmap tmp; |
+ REPORTER_ASSERT(reporter, bitmap.extractSubset(&tmp, SkIRect::MakeWH(image->width() / 2, |
+ image->height() / 2))); |
+ SkAutoTUnref<SkImage> subsetImage(SkImage::NewFromBitmap(tmp)); |
+ REPORTER_ASSERT(reporter, subsetImage); |
+ |
+ SkBitmap subsetBitmap; |
+ REPORTER_ASSERT(reporter, subsetImage->asLegacyBitmap(&subsetBitmap, modes[i])); |
+ check_legacy_bitmap(reporter, subsetImage, subsetBitmap, modes[i]); |
} |
} |