From: Subhransu Mohanty Date: Thu, 6 Aug 2020 03:56:48 +0000 (+0900) Subject: parser: cache some comutaion during parsing X-Git-Tag: submit/tizen/20200809.214919~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9466f2421b6baf27def9abb8e0abc55e9aebb104;p=platform%2Fcore%2Fuifw%2Flottie-player.git parser: cache some comutaion during parsing --- diff --git a/src/lottie/lottiemodel.h b/src/lottie/lottiemodel.h index 7342344..fa48c93 100644 --- a/src/lottie/lottiemodel.h +++ b/src/lottie/lottiemodel.h @@ -152,6 +152,7 @@ struct Value { T mEndValue; T at(float t) const { return lerp(mStartValue, mEndValue, t); } float angle(float) const { return 0; } + void cache(){} }; template <> @@ -160,8 +161,16 @@ struct Value { VPointF mEndValue; VPointF mInTangent; VPointF mOutTangent; + float mBezierLength; bool mPathKeyFrame = false; + void cache() { + mInTangent = mEndValue + mInTangent; + mOutTangent = mStartValue + mOutTangent; + mBezierLength = VBezier::fromPoints(mStartValue, mOutTangent, + mInTangent, mEndValue).length(); + + } VPointF at(float t) const { if (mPathKeyFrame) { @@ -170,9 +179,9 @@ struct Value { * using bezier at progress length (t * bezlen) */ VBezier b = - VBezier::fromPoints(mStartValue, mStartValue + mOutTangent, - mEndValue + mInTangent, mEndValue); - return b.pointAt(b.tAtLength(t * b.length())); + VBezier::fromPoints(mStartValue, mOutTangent, + mInTangent, mEndValue); + return b.pointAt(b.tAtLength(t * mBezierLength)); } return lerp(mStartValue, mEndValue, t); } @@ -181,9 +190,9 @@ struct Value { { if (mPathKeyFrame) { VBezier b = - VBezier::fromPoints(mStartValue, mStartValue + mOutTangent, - mEndValue + mInTangent, mEndValue); - return b.angleAt(b.tAtLength(t * b.length())); + VBezier::fromPoints(mStartValue, mOutTangent, + mInTangent, mEndValue); + return b.angleAt(b.tAtLength(t * mBezierLength)); } return 0; } diff --git a/src/lottie/lottieparser.cpp b/src/lottie/lottieparser.cpp index 32abd42..0889a49 100644 --- a/src/lottie/lottieparser.cpp +++ b/src/lottie/lottieparser.cpp @@ -2052,6 +2052,9 @@ void LottieParserImpl::parseKeyFrame(model::DynamicProperty &obj) } } + // hooks to cache some computaion + keyframe.mValue.cache(); + if (!obj.mKeyFrames.empty()) { // update the endFrame value of current keyframe obj.mKeyFrames.back().mEndFrame = keyframe.mStartFrame;