From 10ed692118552a01ff97b095295852b631e51bee Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Thu, 15 Oct 2015 10:55:15 -0700 Subject: [PATCH] Use typedefs to differentiate between flavors of DisplayLists Change-Id: Id3b0a5aa045f2343fb046ca0889b375a7d00e03f --- libs/hwui/DisplayList.cpp | 7 +------ libs/hwui/DisplayList.h | 29 +++++++++++------------------ libs/hwui/DisplayListCanvas.cpp | 8 ++++++-- libs/hwui/RenderNode.cpp | 28 ++++++++++++++++++++-------- 4 files changed, 38 insertions(+), 34 deletions(-) diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp index 2337299da145e..793d8c0ae75c4 100644 --- a/libs/hwui/DisplayList.cpp +++ b/libs/hwui/DisplayList.cpp @@ -67,13 +67,8 @@ void DisplayListData::cleanupResources() { regions.clear(); } -#if HWUI_NEW_OPS -size_t DisplayListData::addChild(RenderNodeOp* op) { +size_t DisplayListData::addChild(NodeOpType* op) { mReferenceHolders.push_back(op->renderNode); -#else -size_t DisplayListData::addChild(DrawRenderNodeOp* op) { - mReferenceHolders.push_back(op->renderNode); -#endif size_t index = mChildren.size(); mChildren.push_back(op); return index; diff --git a/libs/hwui/DisplayList.h b/libs/hwui/DisplayList.h index 8ba9ac3574148..80ff96a32fc18 100644 --- a/libs/hwui/DisplayList.h +++ b/libs/hwui/DisplayList.h @@ -58,8 +58,14 @@ class Layer; #if HWUI_NEW_OPS struct RecordedOp; struct RenderNodeOp; + +typedef RecordedOp BaseOpType; +typedef RenderNodeOp NodeOpType; #else class DrawRenderNodeOp; + +typedef DisplayListOp BaseOpType; +typedef DrawRenderNodeOp NodeOpType; #endif /** @@ -143,19 +149,12 @@ public: const std::vector& getChunks() const { return chunks; } -#if HWUI_NEW_OPS - const std::vector& getOps() const { + const std::vector& getOps() const { return ops; } -#endif -#if HWUI_NEW_OPS - size_t addChild(RenderNodeOp* childOp); - const std::vector& children() { return mChildren; } -#else - size_t addChild(DrawRenderNodeOp* childOp); - const std::vector& children() { return mChildren; } -#endif + size_t addChild(NodeOpType* childOp); + const std::vector& children() { return mChildren; } void ref(VirtualLightRefBase* prop) { mReferenceHolders.push_back(prop); @@ -169,18 +168,12 @@ public: } private: -#if HWUI_NEW_OPS - std::vector ops; -#endif + std::vector ops; std::vector< sp > mReferenceHolders; -#if HWUI_NEW_OPS - std::vector mChildren; -#else // list of children display lists for quick, non-drawing traversal - std::vector mChildren; -#endif + std::vector mChildren; std::vector chunks; diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp index 8d0ab0322b5b1..a1adb80976d35 100644 --- a/libs/hwui/DisplayListCanvas.cpp +++ b/libs/hwui/DisplayListCanvas.cpp @@ -514,8 +514,12 @@ void DisplayListCanvas::flushTranslate() { } size_t DisplayListCanvas::addOpAndUpdateChunk(DisplayListOp* op) { - int insertIndex = mDisplayListData->displayListOps.size(); - mDisplayListData->displayListOps.push_back(op); + int insertIndex = mDisplayListData->ops.size(); +#if HWUI_NEW_OPS + LOG_ALWAYS_FATAL("unsupported"); +#else + mDisplayListData->ops.push_back(op); +#endif if (mDeferredBarrierType != kBarrier_None) { // op is first in new chunk mDisplayListData->chunks.emplace_back(); diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index d122a55ef7027..28586fa602a7b 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -49,8 +49,8 @@ void RenderNode::debugDumpLayers(const char* prefix) { mLayer->wasBuildLayered ? "true" : "false"); } if (mDisplayListData) { - for (size_t i = 0; i < mDisplayListData->children().size(); i++) { - mDisplayListData->children()[i]->renderNode->debugDumpLayers(prefix); + for (auto&& child : mDisplayListData->children()) { + child->renderNode->debugDumpLayers(prefix); } } } @@ -97,12 +97,16 @@ void RenderNode::output(uint32_t level) { SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); properties().debugOutputProperties(level); - int flags = DisplayListOp::kOpLogFlag_Recurse; + if (mDisplayListData) { +#if HWUI_NEW_OPS + LOG_ALWAYS_FATAL("op dumping unsupported"); +#else // TODO: consider printing the chunk boundaries here - for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) { - mDisplayListData->displayListOps[i]->output(level, flags); + for (auto&& op : mDisplayListData->getOps()) { + op->output(level, DisplayListOp::kOpLogFlag_Recurse); } +#endif } ALOGD("%*sDone (%p, %s)", (level - 1) * 2, "", this, getName()); @@ -916,7 +920,12 @@ void RenderNode::issueOperationsOfProjectedChildren(OpenGLRenderer& renderer, T& // Transform renderer to match background we're projecting onto // (by offsetting canvas by translationX/Y of background rendernode, since only those are set) const DisplayListOp* op = - (mDisplayListData->displayListOps[mDisplayListData->projectionReceiveIndex]); +#if HWUI_NEW_OPS + nullptr; + LOG_ALWAYS_FATAL("unsupported"); +#else + (mDisplayListData->getOps()[mDisplayListData->projectionReceiveIndex]); +#endif const DrawRenderNodeOp* backgroundOp = reinterpret_cast(op); const RenderProperties& backgroundProps = backgroundOp->renderNode->properties(); renderer.translate(backgroundProps.getTranslationX(), backgroundProps.getTranslationY()); @@ -997,6 +1006,9 @@ void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { setViewProperties(renderer, handler); } +#if HWUI_NEW_OPS + LOG_ALWAYS_FATAL("legacy op traversal not supported"); +#else bool quickRejected = properties().getClipToBounds() && renderer.quickRejectConservative(0, 0, properties().getWidth(), properties().getHeight()); if (!quickRejected) { @@ -1018,9 +1030,8 @@ void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { issueOperationsOf3dChildren(ChildrenSelectMode::NegativeZChildren, initialTransform, zTranslatedNodes, renderer, handler); - for (size_t opIndex = chunk.beginOpIndex; opIndex < chunk.endOpIndex; opIndex++) { - DisplayListOp *op = mDisplayListData->displayListOps[opIndex]; + DisplayListOp *op = mDisplayListData->getOps()[opIndex]; #if DEBUG_DISPLAY_LIST op->output(handler.level() + 1); #endif @@ -1037,6 +1048,7 @@ void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { } } } +#endif DISPLAY_LIST_LOGD("%*sRestoreToCount %d", (handler.level() + 1) * 2, "", restoreTo); handler(new (alloc) RestoreToCountOp(restoreTo),