From: subhransu mohanty Date: Mon, 17 Jun 2019 04:09:35 +0000 (+0900) Subject: rlottie/optimization: remove unnecessary pointer indirection to optimize memory alloc... X-Git-Tag: submit/tizen/20190619.051039~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c2beaa60e1bdad90256efc30c4207e81f29a016e;p=platform%2Fcore%2Fuifw%2Flottie-player.git rlottie/optimization: remove unnecessary pointer indirection to optimize memory allocation. --- diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index 99b5648..d318dc0 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -743,30 +743,23 @@ void LOTCompLayerItem::renderList(std::vector &list) LOTSolidLayerItem::LOTSolidLayerItem(LOTLayerData *layerData) : LOTLayerItem(layerData) -{ -} +{} void LOTSolidLayerItem::updateContent() { - if (!mRenderNode) { - mRenderNode = std::make_unique(); - mRenderNode->mType = VDrawable::Type::Fill; - mRenderNode->mFlag |= VDrawable::DirtyState::All; - } - if (flag() & DirtyFlagBit::Matrix) { VPath path; path.addRect( VRectF(0, 0, mLayerData->solidWidth(), mLayerData->solidHeight())); path.transform(combinedMatrix()); - mRenderNode->mFlag |= VDrawable::DirtyState::Path; - mRenderNode->mPath = path; + mRenderNode.mFlag |= VDrawable::DirtyState::Path; + mRenderNode.mPath = path; } if (flag() & DirtyFlagBit::Alpha) { LottieColor color = mLayerData->solidColor(); VBrush brush(color.toColor(combinedAlpha())); - mRenderNode->setBrush(brush); - mRenderNode->mFlag |= VDrawable::DirtyState::Brush; + mRenderNode.setBrush(brush); + mRenderNode.mFlag |= VDrawable::DirtyState::Brush; } } @@ -791,32 +784,26 @@ void LOTSolidLayerItem::renderList(std::vector &list) { if (!visible() || vIsZero(combinedAlpha())) return; - list.push_back(mRenderNode.get()); + list.push_back(&mRenderNode); } LOTImageLayerItem::LOTImageLayerItem(LOTLayerData *layerData) : LOTLayerItem(layerData) { + VBrush brush(mLayerData->mAsset->bitmap()); + mRenderNode.setBrush(brush); } void LOTImageLayerItem::updateContent() { - if (!mRenderNode) { - mRenderNode = std::make_unique(); - mRenderNode->mType = VDrawable::Type::Fill; - mRenderNode->mFlag |= VDrawable::DirtyState::All; - VBrush brush(mLayerData->mAsset->bitmap()); - mRenderNode->setBrush(brush); - } - if (flag() & DirtyFlagBit::Matrix) { VPath path; path.addRect( VRectF(0, 0, mLayerData->mAsset->mWidth, mLayerData->mAsset->mHeight)); path.transform(combinedMatrix()); - mRenderNode->mFlag |= VDrawable::DirtyState::Path; - mRenderNode->mPath = path; - mRenderNode->mBrush.setMatrix(combinedMatrix()); + mRenderNode.mFlag |= VDrawable::DirtyState::Path; + mRenderNode.mPath = path; + mRenderNode.mBrush.setMatrix(combinedMatrix()); } if (flag() & DirtyFlagBit::Alpha) { @@ -828,7 +815,7 @@ void LOTImageLayerItem::renderList(std::vector &list) { if (!visible() || vIsZero(combinedAlpha())) return; - list.push_back(mRenderNode.get()); + list.push_back(&mRenderNode); } void LOTImageLayerItem::buildLayerNode() @@ -843,9 +830,9 @@ void LOTImageLayerItem::buildLayerNode() LOTDrawable *lotDrawable = static_cast(i); lotDrawable->sync(); - lotDrawable->mCNode->mImageInfo.data = mRenderNode->mBrush.mTexture.data(); - lotDrawable->mCNode->mImageInfo.width = mRenderNode->mBrush.mTexture.width(); - lotDrawable->mCNode->mImageInfo.height = mRenderNode->mBrush.mTexture.height(); + lotDrawable->mCNode->mImageInfo.data = lotDrawable->mBrush.mTexture.data(); + lotDrawable->mCNode->mImageInfo.width = lotDrawable->mBrush.mTexture.width(); + lotDrawable->mCNode->mImageInfo.height = lotDrawable->mBrush.mTexture.height(); lotDrawable->mCNode->mImageInfo.mMatrix.m11 = combinedMatrix().m_11(); lotDrawable->mCNode->mImageInfo.mMatrix.m12 = combinedMatrix().m_12(); @@ -1279,7 +1266,6 @@ void LOTPolystarItem::updatePath(VPath& path, int frameNo) */ LOTPaintDataItem::LOTPaintDataItem(bool staticContent): LOTContentItem(ContentType::Paint), - mDrawable(std::make_unique()), mStaticContent(staticContent){} void LOTPaintDataItem::update(int frameNo, const VMatrix &/*parentMatrix*/, @@ -1309,10 +1295,10 @@ void LOTPaintDataItem::updateRenderNode() for (auto &i : mPathItems) { mPath.addPath(i->finalPath()); } - mDrawable->setPath(mPath); + mDrawable.setPath(mPath); } else { - if (mDrawable->mFlag & VDrawable::DirtyState::Path) - mDrawable->mPath = mPath; + if (mDrawable.mFlag & VDrawable::DirtyState::Path) + mDrawable.mPath = mPath; } } @@ -1323,7 +1309,7 @@ void LOTPaintDataItem::renderList(std::vector &list) LOTPaintDataItem::updateRenderNode(); mRenderNodeUpdate = false; } - list.push_back(mDrawable.get()); + list.push_back(&mDrawable); } @@ -1349,8 +1335,8 @@ void LOTFillItem::updateRenderNode() color.setAlpha(color.a * parentAlpha()); VBrush brush(color); - mDrawable->setBrush(brush); - mDrawable->setFillRule(mModel.fillRule()); + mDrawable.setBrush(brush); + mDrawable.setFillRule(mModel.fillRule()); } LOTGFillItem::LOTGFillItem(LOTGFillData *data) @@ -1369,8 +1355,8 @@ void LOTGFillItem::updateContent(int frameNo) void LOTGFillItem::updateRenderNode() { mGradient->setAlpha(mAlpha * parentAlpha()); - mDrawable->setBrush(VBrush(mGradient.get())); - mDrawable->setFillRule(mFillRule); + mDrawable.setBrush(VBrush(mGradient.get())); + mDrawable.setFillRule(mFillRule); } LOTStrokeItem::LOTStrokeItem(LOTStrokeData *data) @@ -1406,9 +1392,9 @@ void LOTStrokeItem::updateRenderNode() color.setAlpha(color.a * parentAlpha()); VBrush brush(color); - mDrawable->setBrush(brush); + mDrawable.setBrush(brush); float scale = getScale(static_cast(parent())->matrix()); - mDrawable->setStrokeInfo(mModel.capStyle(), mModel.joinStyle(), mModel.meterLimit(), + mDrawable.setStrokeInfo(mModel.capStyle(), mModel.joinStyle(), mModel.meterLimit(), mWidth * scale); if (mDashArraySize) { for (int i = 0 ; i < mDashArraySize ; i++) @@ -1417,7 +1403,7 @@ void LOTStrokeItem::updateRenderNode() /* AE draw the dash even if dash value is 0 */ if (vCompare(mDashArray[0], 0.0f)) mDashArray[0]= 0.1; - mDrawable->setDashInfo(mDashArray, mDashArraySize); + mDrawable.setDashInfo(mDashArray, mDashArraySize); } } @@ -1445,13 +1431,13 @@ void LOTGStrokeItem::updateRenderNode() { float scale = getScale(mGradient->mMatrix); mGradient->setAlpha(mAlpha * parentAlpha()); - mDrawable->setBrush(VBrush(mGradient.get())); - mDrawable->setStrokeInfo(mCap, mJoin, mMiterLimit, + mDrawable.setBrush(VBrush(mGradient.get())); + mDrawable.setStrokeInfo(mCap, mJoin, mMiterLimit, mWidth * scale); if (mDashArraySize) { for (int i = 0 ; i < mDashArraySize ; i++) mDashArray[i] *= scale; - mDrawable->setDashInfo(mDashArray, mDashArraySize); + mDrawable.setDashInfo(mDashArray, mDashArraySize); } } diff --git a/src/lottie/lottieitem.h b/src/lottie/lottieitem.h index 73eeb7c..da83dc3 100644 --- a/src/lottie/lottieitem.h +++ b/src/lottie/lottieitem.h @@ -47,6 +47,19 @@ class LOTLayerItem; class LOTMaskItem; class VDrawable; +class LOTDrawable : public VDrawable +{ +public: + void sync(); +public: + std::unique_ptr mCNode{nullptr}; + + ~LOTDrawable() { + if (mCNode && mCNode->mGradient.stopPtr) + free(mCNode->mGradient.stopPtr); + } +}; + class LOTCompItem { public: @@ -161,7 +174,7 @@ protected: void renderList(std::vector &list) final; private: std::vector mCNodeList; - std::unique_ptr mRenderNode; + LOTDrawable mRenderNode; }; class LOTContentItem; @@ -198,7 +211,7 @@ protected: void renderList(std::vector &list) final; private: std::vector mCNodeList; - std::unique_ptr mRenderNode; + LOTDrawable mRenderNode; }; class LOTMaskItem @@ -235,19 +248,6 @@ public: bool mDirty{true}; }; -class LOTDrawable : public VDrawable -{ -public: - void sync(); -public: - std::unique_ptr mCNode; - - ~LOTDrawable() { - if (mCNode && mCNode->mGradient.stopPtr) - free(mCNode->mGradient.stopPtr); - } -}; - class LOTPathDataItem; class LOTPaintDataItem; class LOTTrimItem; @@ -403,13 +403,13 @@ protected: virtual void updateContent(int frameNo) = 0; virtual void updateRenderNode(); inline float parentAlpha() const {return mParentAlpha;} -public: - float mParentAlpha{1.0f}; +protected: + std::vector mPathItems; + LOTDrawable mDrawable; VPath mPath; - DirtyFlag mFlag; + float mParentAlpha{1.0f}; int mFrameNo{-1}; - std::vector mPathItems; - std::unique_ptr mDrawable; + DirtyFlag mFlag; bool mStaticContent; bool mRenderNodeUpdate{true}; }; diff --git a/src/vector/vdrawable.h b/src/vector/vdrawable.h index 4e9bf03..861d9be 100644 --- a/src/vector/vdrawable.h +++ b/src/vector/vdrawable.h @@ -38,7 +38,6 @@ public: Stroke, }; typedef vFlag DirtyFlag; - virtual ~VDrawable() = default; void setPath(const VPath &path); void setFillRule(FillRule rule) { mFillRule = rule; } void setBrush(const VBrush &brush) { mBrush = brush; }