Index: tests/PictureTest.cpp |
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp |
index 3d05a824a26556ad02c281b21723bcc2fdda8567..448e079958ef5a01444fc0c5a9b009c16325b27e 100644 |
--- a/tests/PictureTest.cpp |
+++ b/tests/PictureTest.cpp |
@@ -17,6 +17,7 @@ |
#include "SkImageEncoder.h" |
#include "SkImageGenerator.h" |
#include "SkLayerInfo.h" |
+#include "SkMD5.h" |
#include "SkPaint.h" |
#include "SkPicture.h" |
#include "SkPictureRecorder.h" |
@@ -871,7 +872,18 @@ static void assert_one_parse_error_cb(SkError error, void* context) { |
SkGetLastErrorString()); |
} |
-static void test_bitmap_with_encoded_data(skiatest::Reporter* reporter) { |
+static void md5(const SkBitmap& bm, SkMD5::Digest* digest) { |
+ SkAutoLockPixels autoLockPixels(bm); |
+ SkASSERT(bm.getPixels()); |
+ SkMD5 md5; |
+ size_t rowLen = bm.info().bytesPerPixel() * bm.width(); |
+ for (int y = 0; y < bm.height(); ++y) { |
+ md5.update(static_cast<uint8_t*>(bm.getAddr(0, y)), rowLen); |
+ } |
+ md5.finish(*digest); |
+} |
+ |
+DEF_TEST(Picture_EncodedData, reporter) { |
// Create a bitmap that will be encoded. |
SkBitmap original; |
make_bm(&original, 100, 100, SK_ColorBLUE, true); |
@@ -891,6 +903,7 @@ static void test_bitmap_with_encoded_data(skiatest::Reporter* reporter) { |
SkAutoDataUnref picture1(serialized_picture_from_bitmap(original)); |
SkAutoDataUnref picture2(serialized_picture_from_bitmap(bm)); |
REPORTER_ASSERT(reporter, picture1->equals(picture2)); |
+ |
// Now test that a parse error was generated when trying to create a new SkPicture without |
// providing a function to decode the bitmap. |
ErrorContext context; |
@@ -903,6 +916,24 @@ static void test_bitmap_with_encoded_data(skiatest::Reporter* reporter) { |
REPORTER_ASSERT(reporter, pictureFromStream.get() != nullptr); |
SkClearLastError(); |
SkSetErrorCallback(nullptr, nullptr); |
+ |
+ // Test that using the version of CreateFromStream that just takes a stream also decodes the |
+ // bitmap. Drawing this picture should look exactly like the original bitmap. |
+ SkMD5::Digest referenceDigest; |
+ md5(original, &referenceDigest); |
+ |
+ SkBitmap dst; |
+ dst.allocPixels(original.info()); |
+ dst.eraseColor(SK_ColorRED); |
+ SkCanvas canvas(dst); |
+ |
+ pictureStream.rewind(); |
+ pictureFromStream.reset(SkPicture::CreateFromStream(&pictureStream)); |
+ canvas.drawPicture(pictureFromStream.get()); |
+ |
+ SkMD5::Digest digest2; |
+ md5(dst, &digest2); |
+ REPORTER_ASSERT(reporter, referenceDigest == digest2); |
} |
static void test_clip_bound_opt(skiatest::Reporter* reporter) { |
@@ -1174,7 +1205,6 @@ DEF_TEST(Picture, reporter) { |
test_has_text(reporter); |
test_images_are_found_by_willPlayBackBitmaps(reporter); |
test_analysis(reporter); |
- test_bitmap_with_encoded_data(reporter); |
test_clip_bound_opt(reporter); |
test_clip_expansion(reporter); |
test_hierarchical(reporter); |