lottie/optimization: reserve() memory ahead before calling path api

to optimize the number of allocation.

Change-Id: Iab0b8db715c868de0a0f4a0c688421cc11be4b01
This commit is contained in:
subhransu mohanty 2018-07-26 11:23:14 +09:00
parent f6658ae623
commit 6d5d456d0f
2 changed files with 6 additions and 17 deletions

View File

@ -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();
}

View File

@ -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]);