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

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

Merge "Fix draw order for non-RenderNode draw commands"

parents 96653266 88e0891f
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ namespace skiapipeline {

void SkiaRecordingCanvas::initDisplayList(uirenderer::RenderNode* renderNode, int width,
        int height) {
    mBarrierPending = false;
    mCurrentBarrier = nullptr;
    SkASSERT(mDisplayList.get() == nullptr);

@@ -76,8 +75,6 @@ void SkiaRecordingCanvas::drawCircle(uirenderer::CanvasPropertyPrimitive* x,
}

void SkiaRecordingCanvas::insertReorderBarrier(bool enableReorder) {
    mBarrierPending = enableReorder;

    if (nullptr != mCurrentBarrier) {
        // finish off the existing chunk
        SkDrawable* drawable =
@@ -86,6 +83,12 @@ void SkiaRecordingCanvas::insertReorderBarrier(bool enableReorder) {
        mCurrentBarrier = nullptr;
        drawDrawable(drawable);
    }
    if (enableReorder) {
        mCurrentBarrier = (StartReorderBarrierDrawable*)
                mDisplayList->allocateDrawable<StartReorderBarrierDrawable>(
                mDisplayList.get());
        drawDrawable(mCurrentBarrier);
    }
}

void SkiaRecordingCanvas::drawLayer(uirenderer::DeferredLayerUpdater* layerUpdater) {
@@ -97,15 +100,6 @@ void SkiaRecordingCanvas::drawLayer(uirenderer::DeferredLayerUpdater* layerUpdat
}

void SkiaRecordingCanvas::drawRenderNode(uirenderer::RenderNode* renderNode) {
    // lazily create the chunk if needed
    if (mBarrierPending) {
        mCurrentBarrier = (StartReorderBarrierDrawable*)
                mDisplayList->allocateDrawable<StartReorderBarrierDrawable>(
                mDisplayList.get());
        drawDrawable(mCurrentBarrier);
        mBarrierPending = false;
    }

    // record the child node
    mDisplayList->mChildNodes.emplace_back(renderNode, asSkCanvas(), true, mCurrentBarrier);
    auto& renderNodeDrawable = mDisplayList->mChildNodes.back();
+0 −1
Original line number Diff line number Diff line
@@ -76,7 +76,6 @@ class SkiaRecordingCanvas : public SkiaCanvas {
private:
    SkLiteRecorder mRecorder;
    std::unique_ptr<SkiaDisplayList> mDisplayList;
    bool mBarrierPending;
    StartReorderBarrierDrawable* mCurrentBarrier;

    /**
+9 −1
Original line number Diff line number Diff line
@@ -1542,6 +1542,14 @@ RENDERTHREAD_TEST(FrameBuilder, zReorder) {
        canvas.insertReorderBarrier(false);
        drawOrderedRect(&canvas, 8);
        drawOrderedNode(&canvas, 9, -10.0f); // in reorder=false at this point, so played inorder
        canvas.insertReorderBarrier(true); //reorder a node ahead of drawrect op
        drawOrderedRect(&canvas, 11);
        drawOrderedNode(&canvas, 10, -1.0f);
        canvas.insertReorderBarrier(false);
        canvas.insertReorderBarrier(true); //test with two empty reorder sections
        canvas.insertReorderBarrier(true);
        canvas.insertReorderBarrier(false);
        drawOrderedRect(&canvas, 12);
    });
    FrameBuilder frameBuilder(SkRect::MakeWH(100, 100), 100, 100,
            sLightGeometry, Caches::getInstance());
@@ -1549,7 +1557,7 @@ RENDERTHREAD_TEST(FrameBuilder, zReorder) {

    ZReorderTestRenderer renderer;
    frameBuilder.replayBakedOps<TestDispatcher>(renderer);
    EXPECT_EQ(10, renderer.getIndex());
    EXPECT_EQ(13, renderer.getIndex());
};

RENDERTHREAD_TEST(FrameBuilder, projectionReorder) {
+9 −1
Original line number Diff line number Diff line
@@ -114,13 +114,21 @@ TEST(RenderNodeDrawable, zReorder) {
        canvas.insertReorderBarrier(false);
        drawOrderedRect(&canvas, 8);
        drawOrderedNode(&canvas, 9, -10.0f); // in reorder=false at this point, so played inorder
        canvas.insertReorderBarrier(true); //reorder a node ahead of drawrect op
        drawOrderedRect(&canvas, 11);
        drawOrderedNode(&canvas, 10, -1.0f);
        canvas.insertReorderBarrier(false);
        canvas.insertReorderBarrier(true); //test with two empty reorder sections
        canvas.insertReorderBarrier(true);
        canvas.insertReorderBarrier(false);
        drawOrderedRect(&canvas, 12);
    });

    //create a canvas not backed by any device/pixels, but with dimensions to avoid quick rejection
    ZReorderCanvas canvas(100, 100);
    RenderNodeDrawable drawable(parent.get(), &canvas, false);
    canvas.drawDrawable(&drawable);
    EXPECT_EQ(10, canvas.getIndex());
    EXPECT_EQ(13, canvas.getIndex());
}

TEST(RenderNodeDrawable, composeOnLayer)