to optimize the number of allocation.
Change-Id: Iab0b8db715c868de0a0f4a0c688421cc11be4b01
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();
}
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]);