From: subhransu mohanty Date: Wed, 26 Jun 2019 01:53:44 +0000 (+0900) Subject: rlottie: Update DirtyMatrix only when needed. X-Git-Tag: submit/tizen/20190718.020831~34 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f746e68ed17b3b08fbd74710176f30371caa45fa;p=platform%2Fcore%2Fuifw%2Flottie-player.git rlottie: Update DirtyMatrix only when needed. --- diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index 8dcdebe..9b823c5 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -467,18 +467,20 @@ void LOTLayerItem::update(int frameNumber, const VMatrix &parentMatrix, m *= parentMatrix; // 3. update the dirty flag based on the change - if (!mCombinedMatrix.fuzzyCompare(m)) { + if (mCombinedMatrix != m) { mDirtyFlag |= DirtyFlagBit::Matrix; + mCombinedMatrix = m; } + if (!vCompare(mCombinedAlpha, alpha)) { mDirtyFlag |= DirtyFlagBit::Alpha; + mCombinedAlpha = alpha; } - mCombinedMatrix = m; - mCombinedAlpha = alpha; // 4. update the mask if (mLayerMask) { - mLayerMask->update(frameNo(), m, alpha, mDirtyFlag); + mLayerMask->update(frameNo(), mCombinedMatrix, mCombinedAlpha, + mDirtyFlag); } // 5. if no parent property change and layer is static then nothing to do. @@ -1034,28 +1036,30 @@ void LOTContentGroupItem::addChildren(LOTGroupData *data) void LOTContentGroupItem::update(int frameNo, const VMatrix &parentMatrix, float parentAlpha, const DirtyFlag &flag) { - VMatrix m = parentMatrix; float alpha = parentAlpha; DirtyFlag newFlag = flag; if (mData && mData->mTransform) { - // update the matrix and the flag - if ((flag & DirtyFlagBit::Matrix) || !mData->mTransform->isStatic()) { + VMatrix m = mData->mTransform->matrix(frameNo); + m *= parentMatrix; + + if (!(flag & DirtyFlagBit::Matrix) && !mData->mTransform->isStatic() && + (m != mMatrix)) { newFlag |= DirtyFlagBit::Matrix; } - m = mData->mTransform->matrix(frameNo); - m *= parentMatrix; - alpha *= mData->mTransform->opacity(frameNo); + mMatrix = m; + + alpha *= mData->mTransform->opacity(frameNo); if (!vCompare(alpha, parentAlpha)) { newFlag |= DirtyFlagBit::Alpha; } + } else { + mMatrix = parentMatrix; } - mMatrix = m; - for (const auto &content : mContents) { - content->update(frameNo, m, alpha, newFlag); + content->update(frameNo, matrix(), alpha, newFlag); } }