From: subhransu mohanty Date: Thu, 26 Jul 2018 02:23:14 +0000 (+0900) Subject: lottie/optimization: reserve() memory ahead before calling path api X-Git-Tag: submit/tizen/20180917.042405~189 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F74%2F185074%2F2;p=platform%2Fcore%2Fuifw%2Flottie-player.git lottie/optimization: reserve() memory ahead before calling path api to optimize the number of allocation. Change-Id: Iab0b8db715c868de0a0f4a0c688421cc11be4b01 --- diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index a55bc3c..51bfe91 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -904,23 +904,7 @@ LOTShapeItem::LOTShapeItem(LOTShapeData *data):LOTPathDataItem(data->isStatic()) VPath LOTShapeItem::getPath(int frameNo) { - LottieShapeData shapeData = mData->mShape.value(frameNo); - - if (shapeData.mPoints.empty()) - return VPath(); - - VPath path; - - int size = shapeData.mPoints.size(); - const VPointF *points = shapeData.mPoints.data(); - path.moveTo(points[0]); - for (int i = 1 ; i < size; i+=3) { - path.cubicTo(points[i], points[i+1], points[i+2]); - } - if (shapeData.mClosed) - path.close(); - - return path; + return mData->mShape.value(frameNo).toPath(); } diff --git a/src/lottie/lottiemodel.h b/src/lottie/lottiemodel.h index fc3475e..9e37dc1 100644 --- a/src/lottie/lottiemodel.h +++ b/src/lottie/lottiemodel.h @@ -109,6 +109,11 @@ public: VPath path; int size = mPoints.size(); const VPointF *points = mPoints.data(); + /* reserve exact memory requirement at once + * ptSize = size + 1(size + close) + * elmSize = size/3 cubic + 1 move + 1 close + */ + path.reserve(size + 1 , size/3 + 2); path.moveTo(points[0]); for (int i = 1 ; i < size; i+=3) { path.cubicTo(points[i], points[i+1], points[i+2]);