aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/PictureTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/PictureTest.cpp')
-rw-r--r--tests/PictureTest.cpp60
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());
+ }
+ }
+}