diff options
Diffstat (limited to 'tests/PictureTest.cpp')
-rw-r--r-- | tests/PictureTest.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp index f109482311..eb0c6a8f0e 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()); + } + } +} |