Index: tests/SerializationTest.cpp |
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp |
index 7b2914a1cbeac8eed286836ce15152b577d11a96..f3dafc821c1ef900b770653cb944c1b1c49d8cd6 100644 |
--- a/tests/SerializationTest.cpp |
+++ b/tests/SerializationTest.cpp |
@@ -15,6 +15,7 @@ |
#include "Test.h" |
static const uint32_t kArraySize = 64; |
+static const int kBitmapSize = 256; |
template<typename T> |
static void TestAlignment(T* testObj, skiatest::Reporter* reporter) { |
@@ -229,6 +230,64 @@ static void TestBitmapSerialization(const SkBitmap& validBitmap, |
} |
} |
+static bool setup_bitmap_for_canvas(SkBitmap* bitmap) { |
+ SkImageInfo info = SkImageInfo::Make( |
+ kBitmapSize, kBitmapSize, kPMColor_SkColorType, kPremul_SkAlphaType); |
+ return bitmap->allocPixels(info); |
+} |
+ |
+static bool make_checkerboard_bitmap(SkBitmap& bitmap) { |
+ bool success = setup_bitmap_for_canvas(&bitmap); |
+ |
+ SkCanvas canvas(bitmap); |
+ canvas.clear(0x00000000); |
+ SkPaint darkPaint; |
+ darkPaint.setColor(0xFF804020); |
+ SkPaint lightPaint; |
+ lightPaint.setColor(0xFF244484); |
+ const int i = kBitmapSize / 8; |
+ const SkScalar f = SkIntToScalar(i); |
+ for (int y = 0; y < kBitmapSize; y += i) { |
+ for (int x = 0; x < kBitmapSize; x += i) { |
+ canvas.save(); |
+ canvas.translate(SkIntToScalar(x), SkIntToScalar(y)); |
+ canvas.drawRect(SkRect::MakeXYWH(0, 0, f, f), darkPaint); |
+ canvas.drawRect(SkRect::MakeXYWH(f, 0, f, f), lightPaint); |
+ canvas.drawRect(SkRect::MakeXYWH(0, f, f, f), lightPaint); |
+ canvas.drawRect(SkRect::MakeXYWH(f, f, f, f), darkPaint); |
+ canvas.restore(); |
+ } |
+ } |
+ |
+ return success; |
+} |
+ |
+static bool drawSomething(SkCanvas* canvas) { |
+ SkPaint paint; |
+ SkBitmap bitmap; |
+ bool success = make_checkerboard_bitmap(bitmap); |
+ |
+ canvas->save(); |
+ canvas->scale(0.5f, 0.5f); |
+ canvas->drawBitmap(bitmap, 0, 0, NULL); |
+ canvas->restore(); |
+ |
+ const char beforeStr[] = "before circle"; |
+ const char afterStr[] = "after circle"; |
+ |
+ paint.setAntiAlias(true); |
+ |
+ paint.setColor(SK_ColorRED); |
+ canvas->drawData(beforeStr, sizeof(beforeStr)); |
+ canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/3), paint); |
+ canvas->drawData(afterStr, sizeof(afterStr)); |
+ paint.setColor(SK_ColorBLACK); |
+ paint.setTextSize(SkIntToScalar(kBitmapSize/3)); |
+ canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint); |
+ |
+ return success; |
+} |
+ |
DEF_TEST(Serialization, reporter) { |
// Test matrix serialization |
{ |
@@ -292,7 +351,7 @@ DEF_TEST(Serialization, reporter) { |
// Test invalid deserializations |
{ |
- SkImageInfo info = SkImageInfo::MakeN32Premul(256, 256); |
+ SkImageInfo info = SkImageInfo::MakeN32Premul(kBitmapSize, kBitmapSize); |
SkBitmap validBitmap; |
validBitmap.setConfig(info); |
@@ -306,4 +365,25 @@ DEF_TEST(Serialization, reporter) { |
// even when the device fails to initialize, due to its size |
TestBitmapSerialization(validBitmap, invalidBitmap, true, reporter); |
} |
+ |
+ // Test simple SkPicture serialization |
+ { |
+ SkPicture* pict = new SkPicture; |
+ SkAutoUnref aur(pict); |
+ bool didDraw = drawSomething(pict->beginRecording(kBitmapSize, kBitmapSize)); |
+ REPORTER_ASSERT(reporter, didDraw); |
+ pict->endRecording(); |
+ |
+ // Serialize picture |
+ SkWriteBuffer writer(SkWriteBuffer::kValidation_Flag); |
+ pict->flatten(writer); |
+ size_t size = writer.bytesWritten(); |
+ void* data = sk_malloc_throw(size); |
+ writer.writeToMemory(data); |
+ |
+ // Deserialize picture |
+ SkValidatingReadBuffer reader(data, size); |
+ SkPicture* readPict(SkPicture::CreateFromBuffer(reader)); |
+ REPORTER_ASSERT(reporter, NULL != readPict); |
+ } |
} |