Index: tests/PictureTest.cpp |
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp |
index f10948231123a4b8eae6c8b449fb73c7fd6c52ff..eb0c6a8f0e6fe408acca8da3c40f222603aea662 100644 |
--- a/tests/PictureTest.cpp |
+++ b/tests/PictureTest.cpp |
@@ -1447,3 +1447,63 @@ DEF_TEST(PictureGpuAnalyzer, r) { |
} |
#endif // SK_SUPPORT_GPU |
+ |
+/////////////////////////////////////////////////////////////////////////////////////////////////// |
+ |
+static void empty_ops(SkCanvas* canvas) { |
+} |
+static void clip_ops(SkCanvas* canvas) { |
+ canvas->save(); |
+ canvas->clipRect(SkRect::MakeWH(20, 20)); |
+ canvas->restore(); |
+} |
+static void matrix_ops(SkCanvas* canvas) { |
+ canvas->save(); |
+ canvas->scale(2, 3); |
+ canvas->restore(); |
+} |
+static void matrixclip_ops(SkCanvas* canvas) { |
+ canvas->save(); |
+ canvas->scale(2, 3); |
+ canvas->clipRect(SkRect::MakeWH(20, 20)); |
+ canvas->restore(); |
+} |
+typedef void (*CanvasProc)(SkCanvas*); |
+ |
+// Test the kReturnNullForEmpty_FinishFlag option when recording |
+// |
+DEF_TEST(Picture_RecordEmpty, r) { |
+ const SkRect cull = SkRect::MakeWH(100, 100); |
+ |
+ CanvasProc procs[] { empty_ops, clip_ops, matrix_ops, matrixclip_ops }; |
+ |
+ for (auto proc : procs) { |
+ { |
+ SkPictureRecorder rec; |
+ proc(rec.beginRecording(cull)); |
+ sk_sp<SkPicture> pic = rec.finishRecordingAsPicture(0); |
+ REPORTER_ASSERT(r, pic.get()); |
+ REPORTER_ASSERT(r, pic->approximateOpCount() == 0); |
+ } |
+ { |
+ SkPictureRecorder rec; |
+ proc(rec.beginRecording(cull)); |
+ sk_sp<SkPicture> pic = rec.finishRecordingAsPicture( |
+ SkPictureRecorder::kReturnNullForEmpty_FinishFlag); |
+ REPORTER_ASSERT(r, !pic.get()); |
+ } |
+ { |
+ SkPictureRecorder rec; |
+ proc(rec.beginRecording(cull)); |
+ sk_sp<SkDrawable> dr = rec.finishRecordingAsDrawable(0); |
+ REPORTER_ASSERT(r, dr.get()); |
+ } |
+ { |
+ SkPictureRecorder rec; |
+ proc(rec.beginRecording(cull)); |
+ sk_sp<SkDrawable> dr = rec.finishRecordingAsDrawable( |
+ SkPictureRecorder::kReturnNullForEmpty_FinishFlag); |
+ REPORTER_ASSERT(r, !dr.get()); |
+ } |
+ } |
+} |