From 66b9d4486abb9e6d1edc624cd9ff522b12acece0 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Fri, 16 Dec 2016 17:49:48 +0000 Subject: [PATCH] Revert "try to stop using exotic clipps" This reverts commit 834653bcf80a3879c4d80004469053f205d45b69. Change-Id: Ie8cb787490832a0be154ec1263313982157faa81 --- core/jni/android_graphics_Canvas.cpp | 4 ++++ libs/hwui/pipeline/skia/SkiaPipeline.cpp | 4 ++-- libs/hwui/tests/unit/CanvasStateTests.cpp | 2 +- libs/hwui/tests/unit/FrameBuilderTests.cpp | 18 +++++------------- libs/hwui/tests/unit/RecordingCanvasTests.cpp | 5 ++++- libs/hwui/tests/unit/SkiaPipelineTests.cpp | 2 +- libs/hwui/utils/TestWindowContext.cpp | 6 +----- 7 files changed, 18 insertions(+), 23 deletions(-) diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp index b674a462d039d..be9449b6eb5cf 100644 --- a/core/jni/android_graphics_Canvas.cpp +++ b/core/jni/android_graphics_Canvas.cpp @@ -187,6 +187,10 @@ static jboolean quickRejectPath(JNIEnv* env, jobject, jlong canvasHandle, jlong // from one to the other (though SkClipOp is destined to become a strict subset) static_assert(SkRegion::kDifference_Op == static_cast(SkClipOp::kDifference), ""); static_assert(SkRegion::kIntersect_Op == static_cast(SkClipOp::kIntersect), ""); +static_assert(SkRegion::kUnion_Op == static_cast(SkClipOp::kUnion), ""); +static_assert(SkRegion::kXOR_Op == static_cast(SkClipOp::kXOR), ""); +static_assert(SkRegion::kReverseDifference_Op == static_cast(SkClipOp::kReverseDifference), ""); +static_assert(SkRegion::kReplace_Op == static_cast(SkClipOp::kReplace), ""); static SkClipOp opHandleToClipOp(jint opHandle) { // The opHandle is defined in Canvas.java to be Region::Op diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index 4bd87d76a61ae..376346f05e1bd 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -100,7 +100,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque) int saveCount = layerCanvas->save(); SkASSERT(saveCount == 1); - layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace_private_internal_do_not_use); + layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace); auto savedLightCenter = mLightCenter; // map current light center into RenderNode's coordinate space @@ -234,7 +234,7 @@ void SkiaPipeline::renderFrameImpl(const LayerUpdateQueue& layers, const SkRect& const std::vector>& nodes, bool opaque, const Rect &contentDrawBounds, SkCanvas* canvas) { - canvas->clipRect(clip, SkClipOp::kReplace_private_internal_do_not_use); + canvas->clipRect(clip, SkClipOp::kReplace); if (!opaque) { canvas->clear(SK_ColorTRANSPARENT); diff --git a/libs/hwui/tests/unit/CanvasStateTests.cpp b/libs/hwui/tests/unit/CanvasStateTests.cpp index 14692303b9092..43974f650084f 100644 --- a/libs/hwui/tests/unit/CanvasStateTests.cpp +++ b/libs/hwui/tests/unit/CanvasStateTests.cpp @@ -74,7 +74,7 @@ TEST(CanvasState, simpleClipping) { state.clipRect(10, 10, 200, 200, SkClipOp::kIntersect); ASSERT_EQ(state.getRenderTargetClipBounds(), Rect(10, 10, 100, 100)); - state.clipRect(50, 50, 150, 150, SkClipOp::kReplace_private_internal_do_not_use); + state.clipRect(50, 50, 150, 150, SkClipOp::kReplace); ASSERT_EQ(state.getRenderTargetClipBounds(), Rect(50, 50, 150, 150)); } diff --git a/libs/hwui/tests/unit/FrameBuilderTests.cpp b/libs/hwui/tests/unit/FrameBuilderTests.cpp index fc6a4b5ddb7a0..21394ae6144a0 100644 --- a/libs/hwui/tests/unit/FrameBuilderTests.cpp +++ b/libs/hwui/tests/unit/FrameBuilderTests.cpp @@ -453,28 +453,20 @@ RENDERTHREAD_TEST(FrameBuilder, clippedMerging) { sk_sp bitmap(TestUtils::createBitmap(20, 20)); // left side clipped (to inset left half) - canvas.save(SaveFlags::MatrixClip); - canvas.clipRect(10, 0, 50, 100, SkClipOp::kIntersect); + canvas.clipRect(10, 0, 50, 100, SkClipOp::kReplace); canvas.drawBitmap(*bitmap, 0, 40, nullptr); - canvas.restore(); // top side clipped (to inset top half) - canvas.save(SaveFlags::MatrixClip); - canvas.clipRect(0, 10, 100, 50, SkClipOp::kIntersect); + canvas.clipRect(0, 10, 100, 50, SkClipOp::kReplace); canvas.drawBitmap(*bitmap, 40, 0, nullptr); - canvas.restore(); // right side clipped (to inset right half) - canvas.save(SaveFlags::MatrixClip); - canvas.clipRect(50, 0, 90, 100, SkClipOp::kIntersect); + canvas.clipRect(50, 0, 90, 100, SkClipOp::kReplace); canvas.drawBitmap(*bitmap, 80, 40, nullptr); - canvas.restore(); // bottom not clipped, just abutting (inset bottom half) - canvas.save(SaveFlags::MatrixClip); - canvas.clipRect(0, 50, 100, 90, SkClipOp::kIntersect); + canvas.clipRect(0, 50, 100, 90, SkClipOp::kReplace); canvas.drawBitmap(*bitmap, 40, 70, nullptr); - canvas.restore(); }); FrameBuilder frameBuilder(SkRect::MakeWH(100, 100), 100, 100, @@ -2260,7 +2252,7 @@ RENDERTHREAD_TEST(FrameBuilder, clip_replace) { }; auto node = TestUtils::createNode(20, 20, 30, 30, [](RenderProperties& props, RecordingCanvas& canvas) { - canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace_private_internal_do_not_use); + canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace); canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver); }); diff --git a/libs/hwui/tests/unit/RecordingCanvasTests.cpp b/libs/hwui/tests/unit/RecordingCanvasTests.cpp index bc5a8075d0bd9..4a7338314c555 100644 --- a/libs/hwui/tests/unit/RecordingCanvasTests.cpp +++ b/libs/hwui/tests/unit/RecordingCanvasTests.cpp @@ -459,6 +459,9 @@ TEST(RecordingCanvas, saveLayer_addClipFlag) { TEST(RecordingCanvas, saveLayer_viewportCrop) { auto dl = TestUtils::createDisplayList(200, 200, [](RecordingCanvas& canvas) { + // shouldn't matter, since saveLayer will clip to its bounds + canvas.clipRect(-1000, -1000, 1000, 1000, SkClipOp::kReplace); + canvas.saveLayerAlpha(100, 100, 300, 300, 128, SaveFlags::ClipToLayer); canvas.drawRect(0, 0, 400, 400, SkPaint()); canvas.restore(); @@ -635,7 +638,7 @@ TEST(RecordingCanvas, firstClipWillReplace) { TEST(RecordingCanvas, replaceClipIntersectWithRoot) { auto dl = TestUtils::createDisplayList(100, 100, [](RecordingCanvas& canvas) { canvas.save(SaveFlags::MatrixClip); - canvas.clipRect(-10, -10, 110, 110, SkClipOp::kReplace_private_internal_do_not_use); + canvas.clipRect(-10, -10, 110, 110, SkClipOp::kReplace); canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver); canvas.restore(); }); diff --git a/libs/hwui/tests/unit/SkiaPipelineTests.cpp b/libs/hwui/tests/unit/SkiaPipelineTests.cpp index 22c0866cf4744..9e20498ce48e6 100644 --- a/libs/hwui/tests/unit/SkiaPipelineTests.cpp +++ b/libs/hwui/tests/unit/SkiaPipelineTests.cpp @@ -339,7 +339,7 @@ RENDERTHREAD_TEST(SkiaPipeline, clip_replace) { std::vector> nodes; nodes.push_back(TestUtils::createSkiaNode(20, 20, 30, 30, [](RenderProperties& props, SkiaRecordingCanvas& canvas) { - canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace_private_internal_do_not_use); + canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace); canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver); })); diff --git a/libs/hwui/utils/TestWindowContext.cpp b/libs/hwui/utils/TestWindowContext.cpp index 91efa30aeee2d..8b80d690b39fc 100644 --- a/libs/hwui/utils/TestWindowContext.cpp +++ b/libs/hwui/utils/TestWindowContext.cpp @@ -89,15 +89,11 @@ public: mProxy->setup(800.0f, 255 * 0.075f, 255 * 0.15f); mProxy->setLightCenter(lightVector); mCanvas.reset(new android::uirenderer::RecordingCanvas(mSize.width(), mSize.height())); - - mCanvas->save(SaveFlags::MatrixClip); // balanced in prepareToDraw() } SkCanvas* prepareToDraw() { //mCanvas->reset(mSize.width(), mSize.height()); - mCanvas->restore(); // balancing inital save in constructor - mCanvas->save(SaveFlags::MatrixClip); - mCanvas->clipRect(0, 0, mSize.width(), mSize.height(), SkClipOp::kIntersect); + mCanvas->clipRect(0, 0, mSize.width(), mSize.height(), SkClipOp::kReplace); return mCanvas->asSkCanvas(); }