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

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

Merge "try to stop using exotic clipps"

parents bcdc5d74 834653bc
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -187,10 +187,6 @@ 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);
            layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace_private_internal_do_not_use);

            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);
    canvas->clipRect(clip, SkClipOp::kReplace_private_internal_do_not_use);

    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);
    state.clipRect(50, 50, 150, 150, SkClipOp::kReplace_private_internal_do_not_use);
    ASSERT_EQ(state.getRenderTargetClipBounds(), Rect(50, 50, 150, 150));
}

+13 −5
Original line number Diff line number Diff line
@@ -453,20 +453,28 @@ RENDERTHREAD_TEST(FrameBuilder, clippedMerging) {
        sk_sp<Bitmap> bitmap(TestUtils::createBitmap(20, 20));

        // left side clipped (to inset left half)
        canvas.clipRect(10, 0, 50, 100, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(10, 0, 50, 100, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 0, 40, nullptr);
        canvas.restore();

        // top side clipped (to inset top half)
        canvas.clipRect(0, 10, 100, 50, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(0, 10, 100, 50, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 40, 0, nullptr);
        canvas.restore();

        // right side clipped (to inset right half)
        canvas.clipRect(50, 0, 90, 100, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(50, 0, 90, 100, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 80, 40, nullptr);
        canvas.restore();

        // bottom not clipped, just abutting (inset bottom half)
        canvas.clipRect(0, 50, 100, 90, SkClipOp::kReplace);
        canvas.save(SaveFlags::MatrixClip);
        canvas.clipRect(0, 50, 100, 90, SkClipOp::kIntersect);
        canvas.drawBitmap(*bitmap, 40, 70, nullptr);
        canvas.restore();
    });

    FrameBuilder frameBuilder(SkRect::MakeWH(100, 100), 100, 100,
@@ -2252,7 +2260,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);
        canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace_private_internal_do_not_use);
        canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
    });

+1 −4
Original line number Diff line number Diff line
@@ -459,9 +459,6 @@ 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();
@@ -638,7 +635,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);
        canvas.clipRect(-10, -10, 110, 110, SkClipOp::kReplace_private_internal_do_not_use);
        canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
        canvas.restore();
    });
Loading