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

Commit 65c0d9d2 authored by Chris Craik's avatar Chris Craik Committed by android-build-merger
Browse files

Round unclipped saveLayers

am: 45e83338

Change-Id: I3ecb7fdd2097779cf7f596c0e6a3f7914902ca39
parents fee6e7f1 45e83338
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -946,6 +946,7 @@ void FrameBuilder::deferBeginUnclippedLayerOp(const BeginUnclippedLayerOp& op) {


    Rect dstRect(op.unmappedBounds);
    Rect dstRect(op.unmappedBounds);
    boundsTransform.mapRect(dstRect);
    boundsTransform.mapRect(dstRect);
    dstRect.roundOut();
    dstRect.doIntersect(mCanvasState.currentSnapshot()->getRenderTargetClip());
    dstRect.doIntersect(mCanvasState.currentSnapshot()->getRenderTargetClip());


    if (dstRect.isEmpty()) {
    if (dstRect.isEmpty()) {
+34 −0
Original line number Original line Diff line number Diff line
@@ -1007,6 +1007,40 @@ RENDERTHREAD_TEST(FrameBuilder, saveLayerUnclipped_simple) {
    EXPECT_EQ(4, renderer.getIndex());
    EXPECT_EQ(4, renderer.getIndex());
}
}


RENDERTHREAD_TEST(FrameBuilder, saveLayerUnclipped_round) {
    class SaveLayerUnclippedRoundTestRenderer : public TestRendererBase {
    public:
        void onCopyToLayerOp(const CopyToLayerOp& op, const BakedOpState& state) override {
            EXPECT_EQ(0, mIndex++);
            EXPECT_EQ(Rect(10, 10, 190, 190), state.computedState.clippedBounds)
                    << "Bounds rect should round out";
        }
        void onSimpleRectsOp(const SimpleRectsOp& op, const BakedOpState& state) override {}
        void onRectOp(const RectOp& op, const BakedOpState& state) override {}
        void onCopyFromLayerOp(const CopyFromLayerOp& op, const BakedOpState& state) override {
            EXPECT_EQ(1, mIndex++);
            EXPECT_EQ(Rect(10, 10, 190, 190), state.computedState.clippedBounds)
                    << "Bounds rect should round out";
        }
    };

    auto node = TestUtils::createNode(0, 0, 200, 200,
            [](RenderProperties& props, RecordingCanvas& canvas) {
        canvas.saveLayerAlpha(10.95f, 10.5f, 189.75f, 189.25f, // values should all round out
                128, (SaveFlags::Flags)(0));
        canvas.drawRect(0, 0, 200, 200, SkPaint());
        canvas.restore();
    });

    FrameBuilder frameBuilder(SkRect::MakeWH(200, 200), 200, 200,
            sLightGeometry, Caches::getInstance());
    frameBuilder.deferRenderNode(*TestUtils::getSyncedNode(node));

    SaveLayerUnclippedRoundTestRenderer renderer;
    frameBuilder.replayBakedOps<TestDispatcher>(renderer);
    EXPECT_EQ(2, renderer.getIndex());
}

RENDERTHREAD_TEST(FrameBuilder, saveLayerUnclipped_mergedClears) {
RENDERTHREAD_TEST(FrameBuilder, saveLayerUnclipped_mergedClears) {
    class SaveLayerUnclippedMergedClearsTestRenderer : public TestRendererBase {
    class SaveLayerUnclippedMergedClearsTestRenderer : public TestRendererBase {
    public:
    public: