Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1073)

Unified Diff: tests/SurfaceTest.cpp

Issue 1227413002: Fix SkImage::asLegacyBitmap() rowBytes assert (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/image/SkImage_Raster.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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]);
}
}
« no previous file with comments | « src/image/SkImage_Raster.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698