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

Unified Diff: tests/PictureTest.cpp

Issue 286033005: Ensure playing back a picture always balances saves and restores (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address code review comments Created 6 years, 7 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/core/SkPicturePlayback.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « src/core/SkPicturePlayback.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698