aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/PictureTest.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-04-10 09:50:25 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-20 15:02:19 +0000
commit26eb16f1e3b9c2c26042e5078636b3e5ac42b9ea (patch)
treebbc0428f4606c089e50e5b51e0d3d074774bd8cc /tests/PictureTest.cpp
parent097d0939e319493765074025d2d34c4179662f7b (diff)
calculate cull rects for SkMiniPictures
This is the other half of https://skia-review.googlesource.com/c/7874/, adding the cull-shrinking feature of SkBigPictures to SkMiniPictures. Like SkBigPictures, shrink only when we're asked to build an R-tree. (We don't actually build a tree for one rect, of course.) We could do unconditionally, but SkPictureImageFilter uses the cull rect as its crop. It's unclear to me what this image filter unit test I've changed here was intending... had it had two draws we would have shrunk its cull, but because it was hitting the 1-draw SkMiniPicture path it kept the larger user-supplied cull. As the test doesn't appear to have been written with cull shrinking in mind, I've removed its SkRTreeFactory to keep that feature explicitly disabled there. BUG=skia:5974 Change-Id: I4118d2e85f2a69adef2e7a7fa9b9b8c17607a94f Reviewed-on: https://skia-review.googlesource.com/12624 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'tests/PictureTest.cpp')
-rw-r--r--tests/PictureTest.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
index 07cbccc51a..fd4bf4ef78 100644
--- a/tests/PictureTest.cpp
+++ b/tests/PictureTest.cpp
@@ -1136,3 +1136,39 @@ DEF_TEST(PictureGpuAnalyzer, r) {
}
#endif // SK_SUPPORT_GPU
+
+// If we record bounded ops into a picture with a big cull and calculate the
+// bounds of those ops, we should trim down the picture cull to the ops' bounds.
+// If we're not using an SkBBH, we shouldn't change it.
+DEF_TEST(Picture_UpdatedCull_1, r) {
+ // Testing 1 draw exercises SkMiniPicture.
+ SkRTreeFactory factory;
+ SkPictureRecorder recorder;
+
+ auto canvas = recorder.beginRecording(SkRect::MakeLargest(), &factory);
+ canvas->drawRect(SkRect::MakeWH(20,20), SkPaint{});
+ auto pic = recorder.finishRecordingAsPicture();
+ REPORTER_ASSERT(r, pic->cullRect() == SkRect::MakeWH(20,20));
+
+ canvas = recorder.beginRecording(SkRect::MakeLargest());
+ canvas->drawRect(SkRect::MakeWH(20,20), SkPaint{});
+ pic = recorder.finishRecordingAsPicture();
+ REPORTER_ASSERT(r, pic->cullRect() == SkRect::MakeLargest());
+}
+DEF_TEST(Picture_UpdatedCull_2, r) {
+ // Testing >1 draw exercises SkBigPicture.
+ SkRTreeFactory factory;
+ SkPictureRecorder recorder;
+
+ auto canvas = recorder.beginRecording(SkRect::MakeLargest(), &factory);
+ canvas->drawRect(SkRect::MakeWH(20,20), SkPaint{});
+ canvas->drawRect(SkRect::MakeWH(10,40), SkPaint{});
+ auto pic = recorder.finishRecordingAsPicture();
+ REPORTER_ASSERT(r, pic->cullRect() == SkRect::MakeWH(20,40));
+
+ canvas = recorder.beginRecording(SkRect::MakeLargest());
+ canvas->drawRect(SkRect::MakeWH(20,20), SkPaint{});
+ canvas->drawRect(SkRect::MakeWH(10,40), SkPaint{});
+ pic = recorder.finishRecordingAsPicture();
+ REPORTER_ASSERT(r, pic->cullRect() == SkRect::MakeLargest());
+}