Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6df179cd authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "try to stop using exotic clipps""

parents 47a60135 66b9d448
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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<SkRegion::Op>(SkClipOp::kDifference), "");
static_assert(SkRegion::kIntersect_Op == static_cast<SkRegion::Op>(SkClipOp::kIntersect), "");
static_assert(SkRegion::kUnion_Op == static_cast<SkRegion::Op>(SkClipOp::kUnion), "");
static_assert(SkRegion::kXOR_Op == static_cast<SkRegion::Op>(SkClipOp::kXOR), "");
static_assert(SkRegion::kReverseDifference_Op == static_cast<SkRegion::Op>(SkClipOp::kReverseDifference), "");
static_assert(SkRegion::kReplace_Op == static_cast<SkRegion::Op>(SkClipOp::kReplace), "");

static SkClipOp opHandleToClipOp(jint opHandle) {
    // The opHandle is defined in Canvas.java to be Region::Op
+2 −2
Original line number Diff line number Diff line
@@ -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<sp<RenderNode>>& 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);
+1 −1
Original line number Diff line number Diff line
@@ -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));
}

+5 −13
Original line number Diff line number Diff line
@@ -453,28 +453,20 @@ RENDERTHREAD_TEST(FrameBuilder, clippedMerging) {
        sk_sp<Bitmap> 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<RecordingCanvas>(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);
    });

+4 −1
Original line number Diff line number Diff line
@@ -459,6 +459,9 @@ TEST(RecordingCanvas, saveLayer_addClipFlag) {

TEST(RecordingCanvas, saveLayer_viewportCrop) {
    auto dl = TestUtils::createDisplayList<RecordingCanvas>(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<RecordingCanvas>(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();
    });
Loading