From ea7d08e3bbc45a0a573c1ac06afa4452f8d7000a Mon Sep 17 00:00:00 2001 From: "commit-bot@chromium.org" Date: Thu, 13 Feb 2014 16:00:51 +0000 Subject: Add unit test for unbalanced save and restores in pictures. R=reed@google.com Author: bsalomon@google.com Review URL: https://codereview.chromium.org/150653010 git-svn-id: http://skia.googlecode.com/svn/trunk@13430 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tests/PictureTest.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'tests/PictureTest.cpp') diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp index e540181134..89f0af43fb 100644 --- a/tests/PictureTest.cpp +++ b/tests/PictureTest.cpp @@ -680,6 +680,62 @@ static void rand_op(SkCanvas* canvas, SkRandom& rand) { } } +static void set_canvas_to_save_count_4(SkCanvas* canvas) { + canvas->restoreToCount(1); + canvas->save(); + canvas->save(); + canvas->save(); +} + +static void test_unbalanced_save_restores(skiatest::Reporter* reporter) { + SkCanvas testCanvas(100, 100); + set_canvas_to_save_count_4(&testCanvas); + + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + + SkPaint paint; + SkRect rect = SkRect::MakeLTRB(-10000000, -10000000, 10000000, 10000000); + + SkPicture extra_save_picture; + extra_save_picture.beginRecording(100, 100); + extra_save_picture.getRecordingCanvas()->save(); + extra_save_picture.getRecordingCanvas()->translate(10, 10); + extra_save_picture.getRecordingCanvas()->drawRect(rect, paint); + extra_save_picture.getRecordingCanvas()->save(); + extra_save_picture.getRecordingCanvas()->translate(10, 10); + extra_save_picture.getRecordingCanvas()->drawRect(rect, paint); + + testCanvas.drawPicture(extra_save_picture); + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + + set_canvas_to_save_count_4(&testCanvas); + + SkPicture extra_restore_picture; + extra_restore_picture.beginRecording(100, 100); + extra_restore_picture.getRecordingCanvas()->save(); + extra_restore_picture.getRecordingCanvas()->translate(10, 10); + extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint); + extra_restore_picture.getRecordingCanvas()->save(); + extra_restore_picture.getRecordingCanvas()->translate(10, 10); + extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint); + extra_restore_picture.getRecordingCanvas()->restore(); + extra_restore_picture.getRecordingCanvas()->restore(); + extra_restore_picture.getRecordingCanvas()->restore(); + extra_restore_picture.getRecordingCanvas()->restore(); + + testCanvas.drawPicture(extra_save_picture); + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + + SkPicture no_save_picture; + extra_restore_picture.beginRecording(100, 100); + extra_restore_picture.getRecordingCanvas()->translate(10, 10); + extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint); + + testCanvas.drawPicture(extra_save_picture); + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity()); +} + static void test_peephole() { SkRandom rand; @@ -1021,6 +1077,7 @@ DEF_TEST(Picture, reporter) { #else test_bad_bitmap(); #endif + test_unbalanced_save_restores(reporter); test_peephole(); test_gatherpixelrefs(reporter); test_gatherpixelrefsandrects(reporter); -- cgit v1.2.3