Merge "Fix draw order for non-RenderNode draw commands"
This commit is contained in:
committed by
Android (Google) Code Review
commit
13c8b7df5b
@@ -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();
|
||||
|
||||
@@ -76,7 +76,6 @@ class SkiaRecordingCanvas : public SkiaCanvas {
|
||||
private:
|
||||
SkLiteRecorder mRecorder;
|
||||
std::unique_ptr<SkiaDisplayList> mDisplayList;
|
||||
bool mBarrierPending;
|
||||
StartReorderBarrierDrawable* mCurrentBarrier;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user