diff options
author | Chris Craik <ccraik@google.com> | 2016-03-29 15:01:41 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2016-03-29 16:50:32 -0700 |
commit | 6246d27813f25b85f6e4b5cb1121fe8484bcce2d (patch) | |
tree | 404d22648cb87d218312937f3ad8cf8fb68da7be /libs/hwui/renderthread/CanvasContext.cpp | |
parent | af64f6341bdbca93aff3d68264af48e74faa9e58 (diff) |
Support buildLayer in new pipeline
bug:26561995
bug:27620686
Change-Id: I6c39f9a077e7e6002d3c01b8888238fd17b0f02a
Diffstat (limited to 'libs/hwui/renderthread/CanvasContext.cpp')
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index eee527881a6a..6933b2f1e23c 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -86,10 +86,12 @@ void CanvasContext::destroy() { freePrefetechedLayers(); destroyHardwareResources(); mAnimationContext->destroy(); +#if !HWUI_NEW_OPS if (mCanvas) { delete mCanvas; mCanvas = nullptr; } +#endif } void CanvasContext::setSurface(Surface* surface) { @@ -587,9 +589,11 @@ void CanvasContext::freePrefetechedLayers() { void CanvasContext::buildLayer(RenderNode* node) { ATRACE_CALL(); - if (!mEglManager.hasEglContext() || !mCanvas) { - return; - } + if (!mEglManager.hasEglContext()) return; +#if !HWUI_NEW_OPS + if (!mCanvas) return; +#endif + // buildLayer() will leave the tree in an unknown state, so we must stop drawing stopDrawing(); @@ -609,7 +613,15 @@ void CanvasContext::buildLayer(RenderNode* node) { node->setPropertyFieldsDirty(RenderNode::GENERIC); #if HWUI_NEW_OPS - // TODO: support buildLayer + static const std::vector< sp<RenderNode> > emptyNodeList; + auto& caches = Caches::getInstance(); + FrameBuilder frameBuilder(mLayerUpdateQueue, SkRect::MakeWH(1, 1), 1, 1, + emptyNodeList, mLightGeometry, mContentDrawBounds, caches); + mLayerUpdateQueue.clear(); + BakedOpRenderer renderer(caches, mRenderThread.renderState(), + mOpaque, mLightInfo); + LOG_ALWAYS_FATAL_IF(renderer.didDraw(), "shouldn't draw in buildlayer case"); + frameBuilder.replayBakedOps<BakedOpDispatcher>(renderer); #else mCanvas->markLayersAsBuildLayers(); mCanvas->flushLayerUpdates(); |