mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-17 03:40:18 +00:00
lottie/optimization: reserve() memory ahead before calling path api
to optimize the number of allocation. Change-Id: Iab0b8db715c868de0a0f4a0c688421cc11be4b01
This commit is contained in:
parent
f6658ae623
commit
6d5d456d0f
@ -904,23 +904,7 @@ LOTShapeItem::LOTShapeItem(LOTShapeData *data):LOTPathDataItem(data->isStatic())
|
|||||||
|
|
||||||
VPath LOTShapeItem::getPath(int frameNo)
|
VPath LOTShapeItem::getPath(int frameNo)
|
||||||
{
|
{
|
||||||
LottieShapeData shapeData = mData->mShape.value(frameNo);
|
return mData->mShape.value(frameNo).toPath();
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -109,6 +109,11 @@ public:
|
|||||||
VPath path;
|
VPath path;
|
||||||
int size = mPoints.size();
|
int size = mPoints.size();
|
||||||
const VPointF *points = mPoints.data();
|
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]);
|
path.moveTo(points[0]);
|
||||||
for (int i = 1 ; i < size; i+=3) {
|
for (int i = 1 ; i < size; i+=3) {
|
||||||
path.cubicTo(points[i], points[i+1], points[i+2]);
|
path.cubicTo(points[i], points[i+1], points[i+2]);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user