From: subhransu mohanty Date: Thu, 10 Oct 2019 06:42:18 +0000 (+0900) Subject: vector: refcator VBrush to reduce memory footprint X-Git-Tag: submit/tizen/20191010.214907~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e01ba5574d50e66da7e90583bfee7716a9d4c522;p=platform%2Fcore%2Fuifw%2Flottie-player.git vector: refcator VBrush to reduce memory footprint --- diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index 092f9fc..7a59b2d 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -651,7 +651,8 @@ LOTImageLayerItem::LOTImageLayerItem(LOTLayerData *layerData) { if (!mLayerData->asset()) return; - VBrush brush(mLayerData->asset()->bitmap()); + mTexture.mBitmap = mLayerData->asset()->bitmap(); + VBrush brush(&mTexture); mRenderNode.setBrush(brush); } @@ -666,7 +667,7 @@ void LOTImageLayerItem::updateContent() path.transform(combinedMatrix()); mRenderNode.mFlag |= VDrawable::DirtyState::Path; mRenderNode.mPath = path; - mRenderNode.mBrush.setMatrix(combinedMatrix()); + mTexture.mMatrix = combinedMatrix(); } if (flag() & DirtyFlagBit::Alpha) { diff --git a/src/lottie/lottieitem.h b/src/lottie/lottieitem.h index 1c046c5..4662b59 100644 --- a/src/lottie/lottieitem.h +++ b/src/lottie/lottieitem.h @@ -222,6 +222,7 @@ protected: void renderList(std::vector &list) final; private: LOTDrawable mRenderNode; + VTexture mTexture; }; class LOTMaskItem diff --git a/src/lottie/lottieitem_capi.cpp b/src/lottie/lottieitem_capi.cpp index 178af4e..f093958 100644 --- a/src/lottie/lottieitem_capi.cpp +++ b/src/lottie/lottieitem_capi.cpp @@ -178,11 +178,11 @@ void LOTImageLayerItem::buildLayerNode() lotDrawable->sync(); lotDrawable->mCNode->mImageInfo.data = - lotDrawable->mBrush.mTexture.data(); + lotDrawable->mBrush.mTexture->mBitmap.data(); lotDrawable->mCNode->mImageInfo.width = - int(lotDrawable->mBrush.mTexture.width()); + int(lotDrawable->mBrush.mTexture->mBitmap.width()); lotDrawable->mCNode->mImageInfo.height = - int(lotDrawable->mBrush.mTexture.height()); + int(lotDrawable->mBrush.mTexture->mBitmap.height()); lotDrawable->mCNode->mImageInfo.mMatrix.m11 = combinedMatrix().m_11(); lotDrawable->mCNode->mImageInfo.mMatrix.m12 = combinedMatrix().m_12(); diff --git a/src/vector/vbrush.cpp b/src/vector/vbrush.cpp index 7d761fa..26c8281 100644 --- a/src/vector/vbrush.cpp +++ b/src/vector/vbrush.cpp @@ -58,17 +58,8 @@ VBrush::VBrush(const VGradient *gradient) } } -VBrush::VBrush(const VBitmap &texture) +VBrush::VBrush(const VTexture *texture):mType(VBrush::Type::Texture), mTexture(texture) { - if (!texture.valid()) return; - - mType = VBrush::Type::Texture; - mTexture = texture; -} - -void VBrush::setMatrix(const VMatrix &m) -{ - mMatrix = m; } V_END_NAMESPACE diff --git a/src/vector/vbrush.h b/src/vector/vbrush.h index 8869ec0..f45f6cc 100644 --- a/src/vector/vbrush.h +++ b/src/vector/vbrush.h @@ -59,22 +59,27 @@ public: VMatrix mMatrix; }; +struct VTexture { + VBitmap mBitmap; + VMatrix mMatrix; +}; + class VBrush { public: enum class Type { NoBrush, Solid, LinearGradient, RadialGradient, Texture }; - VBrush() = default; + VBrush():mType(Type::NoBrush),mColor(){}; explicit VBrush(const VColor &color); explicit VBrush(const VGradient *gradient); explicit VBrush(uchar r, uchar g, uchar b, uchar a); - explicit VBrush(const VBitmap &texture); + explicit VBrush(const VTexture *texture); inline VBrush::Type type() const { return mType; } - void setMatrix(const VMatrix &m); public: VBrush::Type mType{Type::NoBrush}; - VColor mColor; - const VGradient *mGradient{nullptr}; - VBitmap mTexture; - VMatrix mMatrix; + union { + VColor mColor{}; + const VGradient *mGradient; + const VTexture *mTexture; + }; }; V_END_NAMESPACE diff --git a/src/vector/vdrawhelper.cpp b/src/vector/vdrawhelper.cpp index e3ae7a8..43050f2 100644 --- a/src/vector/vdrawhelper.cpp +++ b/src/vector/vdrawhelper.cpp @@ -795,9 +795,9 @@ void VSpanData::setup(const VBrush &brush, VPainter::CompositionMode /*mode*/, case VBrush::Type::Texture: { mType = VSpanData::Type::Texture; initTexture( - &brush.mTexture, 255, VBitmapData::Plain, - brush.mTexture.rect()); - setupMatrix(brush.mMatrix); + &brush.mTexture->mBitmap, 255, VBitmapData::Plain, + brush.mTexture->mBitmap.rect()); + setupMatrix(brush.mTexture->mMatrix); break; } default: