Add a SkPixelSerializer SkImage encode variant

R=reed@google.com
BUG=skia:4285

Review URL: https://codereview.chromium.org/1310633006
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index bbf6682..d271966 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -10,6 +10,7 @@
 #include "SkDevice.h"
 #include "SkImageEncoder.h"
 #include "SkImage_Base.h"
+#include "SkPixelSerializer.h"
 #include "SkRRect.h"
 #include "SkSurface.h"
 #include "SkUtils.h"
@@ -104,6 +105,36 @@
 }
 #endif
 
+namespace {
+
+const char* kSerializedData = "serialized";
+
+class MockSerializer : public SkPixelSerializer {
+protected:
+    bool onUseEncodedData(const void*, size_t) override {
+        return false;
+    }
+
+    SkData* onEncodePixels(const SkImageInfo&, const void*, size_t) override {
+        return SkData::NewWithCString(kSerializedData);
+    }
+};
+
+} // anonymous namespace
+
+// Test that SkImage encoding observes custom pixel serializers.
+DEF_TEST(Image_Encode_Serializer, reporter) {
+    MockSerializer serializer;
+    const SkIRect ir = SkIRect::MakeXYWH(5, 5, 10, 10);
+    SkAutoTUnref<SkImage> image(make_image(nullptr, 20, 20, ir));
+    SkAutoTUnref<SkData> encoded(image->encode(&serializer));
+    SkAutoTUnref<SkData> reference(SkData::NewWithCString(kSerializedData));
+
+    REPORTER_ASSERT(reporter, encoded);
+    REPORTER_ASSERT(reporter, encoded->size() > 0);
+    REPORTER_ASSERT(reporter, encoded->equals(reference));
+}
+
 DEF_TEST(Image_NewRasterCopy, reporter) {
     const SkPMColor red =   SkPackARGB32(0xFF, 0xFF, 0, 0);
     const SkPMColor green = SkPackARGB32(0xFF, 0, 0xFF, 0);