| Index: tests/PictureTest.cpp
|
| diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
|
| index 226280a9c3208161cabb4f3d914ed556896b76a0..8467d6a082776a686f7f95f23dbec62dad46e49f 100644
|
| --- a/tests/PictureTest.cpp
|
| +++ b/tests/PictureTest.cpp
|
| @@ -975,6 +975,48 @@ static void test_unbalanced_save_restores(skiatest::Reporter* reporter) {
|
| REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
|
| REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity());
|
| }
|
| +
|
| +#if defined(SK_SUPPORT_LEGACY_PICTURE_CAN_RECORD) && \
|
| + defined(SK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES)
|
| + set_canvas_to_save_count_4(&testCanvas);
|
| +
|
| + // Due to "fake" endRecording, the old SkPicture recording interface
|
| + // allowed unbalanced saves/restores to leak out. This sub-test checks
|
| + // that the situation has been remedied.
|
| + {
|
| + SkPicture p;
|
| +
|
| + SkCanvas* canvas = p.beginRecording(100, 100);
|
| + for (int i = 0; i < 4; ++i) {
|
| + canvas->save();
|
| + }
|
| + SkRect r = SkRect::MakeWH(50, 50);
|
| + SkPaint paint;
|
| + canvas->drawRect(r, paint);
|
| +
|
| + // Copying a mid-recording picture could result in unbalanced saves/restores
|
| + SkPicture p2(p);
|
| +
|
| + testCanvas.drawPicture(p2);
|
| + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
|
| + set_canvas_to_save_count_4(&testCanvas);
|
| +
|
| + // Cloning a mid-recording picture could result in unbalanced saves/restores
|
| + SkAutoTUnref<SkPicture> p3(p.clone());
|
| + testCanvas.drawPicture(*p3);
|
| + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
|
| + set_canvas_to_save_count_4(&testCanvas);
|
| +
|
| + // Serializing a mid-recording picture could result in unbalanced saves/restores
|
| + SkDynamicMemoryWStream wStream;
|
| + p.serialize(&wStream);
|
| + SkAutoDataUnref data(wStream.copyToData());
|
| + SkMemoryStream stream(data);
|
| + SkAutoTUnref<SkPicture> p4(SkPicture::CreateFromStream(&stream, NULL));
|
| + testCanvas.drawPicture(*p4);
|
| + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
|
| + }
|
| +#endif
|
| }
|
|
|
| static void test_peephole() {
|
|
|