From bb64c5e7c8798257fb031aee6255eec8e9d1e03e Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 27 Mar 2019 15:35:37 +0900 Subject: [PATCH] lottie: a small optimization. reserve mask size as possible in advance, reduce data copies. --- src/lottie/lottieitem.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index 9b259a8bd2..3f23241e0d 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -225,35 +225,36 @@ void LOTLayerItem::buildLayerNode() } if (mLayerMask) { mMasksCNode.clear(); + mMasksCNode.resize(mLayerMask->mMasks.size()); + size_t i = 0; for (const auto &mask : mLayerMask->mMasks) { - LOTMask cNode; + LOTMask *cNode = &mMasksCNode[i++]; const std::vector &elm = mask.mFinalPath.elements(); const std::vector & pts = mask.mFinalPath.points(); const float *ptPtr = reinterpret_cast(pts.data()); const char * elmPtr = reinterpret_cast(elm.data()); - cNode.mPath.ptPtr = ptPtr; - cNode.mPath.ptCount = pts.size(); - cNode.mPath.elmPtr = elmPtr; - cNode.mPath.elmCount = elm.size(); - cNode.mAlpha = mask.mCombinedAlpha * 255; + cNode->mPath.ptPtr = ptPtr; + cNode->mPath.ptCount = pts.size(); + cNode->mPath.elmPtr = elmPtr; + cNode->mPath.elmCount = elm.size(); + cNode->mAlpha = mask.mCombinedAlpha * 255; switch (mask.maskMode()) { case LOTMaskData::Mode::Add: - cNode.mMode = MaskAdd; + cNode->mMode = MaskAdd; break; case LOTMaskData::Mode::Substarct: - cNode.mMode = MaskSubstract; + cNode->mMode = MaskSubstract; break; case LOTMaskData::Mode::Intersect: - cNode.mMode = MaskIntersect; + cNode->mMode = MaskIntersect; break; case LOTMaskData::Mode::Difference: - cNode.mMode = MaskDifference; + cNode->mMode = MaskDifference; break; default: - cNode.mMode = MaskAdd; + cNode->mMode = MaskAdd; break; } - mMasksCNode.push_back(std::move(cNode)); } mLayerCNode->mMaskList.ptr = mMasksCNode.data(); mLayerCNode->mMaskList.size = mMasksCNode.size();