| Index: tests/PictureTest.cpp
|
| diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
|
| index c71e66309aa71cde7b567276950fdf306c582fba..0603eb328f7597d3a8ac1c63fa1b7f1446677b73 100644
|
| --- a/tests/PictureTest.cpp
|
| +++ b/tests/PictureTest.cpp
|
| @@ -135,6 +135,25 @@ static void rand_op(SkCanvas* canvas, SkRandom& rand) {
|
|
|
| #if SK_SUPPORT_GPU
|
|
|
| +static SkPath make_convex_path() {
|
| + SkPath path;
|
| + path.lineTo(100, 0);
|
| + path.lineTo(50, 100);
|
| + path.close();
|
| +
|
| + return path;
|
| +}
|
| +
|
| +static SkPath make_concave_path() {
|
| + SkPath path;
|
| + path.lineTo(50, 50);
|
| + path.lineTo(100, 0);
|
| + path.lineTo(50, 100);
|
| + path.close();
|
| +
|
| + return path;
|
| +}
|
| +
|
| static void test_gpu_veto(skiatest::Reporter* reporter) {
|
| SkPictureRecorder recorder;
|
|
|
| @@ -261,6 +280,34 @@ static void test_gpu_veto(skiatest::Reporter* reporter) {
|
| // ... but only when applied to drawPoint() calls
|
| REPORTER_ASSERT(reporter, !SkPictureGpuAnalyzer(picture).suitableForGpuRasterization());
|
|
|
| + canvas = recorder.beginRecording(100, 100);
|
| + {
|
| + const SkPath convexClip = make_convex_path();
|
| + const SkPath concaveClip = make_concave_path();
|
| +
|
| + for (int i = 0; i < 50; ++i) {
|
| + canvas->clipPath(convexClip);
|
| + canvas->clipPath(concaveClip);
|
| + canvas->clipPath(convexClip, SkRegion::kIntersect_Op, true);
|
| + canvas->drawRect(SkRect::MakeWH(100, 100), SkPaint());
|
| + }
|
| + }
|
| + picture = recorder.finishRecordingAsPicture();
|
| + // Convex clips and non-AA concave clips are fine on the GPU.
|
| + REPORTER_ASSERT(reporter, SkPictureGpuAnalyzer(picture).suitableForGpuRasterization());
|
| +
|
| + canvas = recorder.beginRecording(100, 100);
|
| + {
|
| + const SkPath concaveClip = make_concave_path();
|
| + for (int i = 0; i < 50; ++i) {
|
| + canvas->clipPath(concaveClip, SkRegion::kIntersect_Op, true);
|
| + canvas->drawRect(SkRect::MakeWH(100, 100), SkPaint());
|
| + }
|
| + }
|
| + picture = recorder.finishRecordingAsPicture();
|
| + // ... but AA concave clips are not.
|
| + REPORTER_ASSERT(reporter, !SkPictureGpuAnalyzer(picture).suitableForGpuRasterization());
|
| +
|
| // Nest the previous picture inside a new one.
|
| canvas = recorder.beginRecording(100, 100);
|
| {
|
| @@ -1380,6 +1427,22 @@ DEF_TEST(PictureGpuAnalyzer, r) {
|
|
|
| analyzer.analyze(nestedVetoPicture.get());
|
| REPORTER_ASSERT(r, !analyzer.suitableForGpuRasterization());
|
| +
|
| + analyzer.reset();
|
| +
|
| + const SkPath convexClip = make_convex_path();
|
| + const SkPath concaveClip = make_concave_path();
|
| + for (int i = 0; i < 50; ++i) {
|
| + analyzer.analyzeClipPath(convexClip, SkRegion::kIntersect_Op, false);
|
| + analyzer.analyzeClipPath(convexClip, SkRegion::kIntersect_Op, true);
|
| + analyzer.analyzeClipPath(concaveClip, SkRegion::kIntersect_Op, false);
|
| + }
|
| + REPORTER_ASSERT(r, analyzer.suitableForGpuRasterization());
|
| +
|
| + for (int i = 0; i < 50; ++i) {
|
| + analyzer.analyzeClipPath(concaveClip, SkRegion::kIntersect_Op, true);
|
| + }
|
| + REPORTER_ASSERT(r, !analyzer.suitableForGpuRasterization());
|
| }
|
|
|
| #endif // SK_SUPPORT_GPU
|
|
|