lottie: prevent mem leak
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run

Masks of pooled shapes were not unrefed, filling up
the memory pool.
This commit is contained in:
Mira Grudzinska 2025-07-02 14:17:35 +02:00 committed by Hermet Park
parent 5e17fe0034
commit ea8abe8912

View file

@ -1203,7 +1203,7 @@ void LottieBuilder::updateMasks(LottieLayer* layer, float frameNo)
//the first mask
if (!pShape) {
pShape = layer->pooling();
pShape->reset();
SHAPE(pShape)->reset();
auto compMethod = (method == MaskMethod::Subtract || method == MaskMethod::InvAlpha) ? MaskMethod::InvAlpha : MaskMethod::Alpha;
//Cheaper. Replace the masking with a clipper
if (layer->masks.count == 1 && compMethod == MaskMethod::Alpha) {
@ -1215,13 +1215,11 @@ void LottieBuilder::updateMasks(LottieLayer* layer, float frameNo)
//Chain mask composition
} else if (pMethod != method || pOpacity != opacity || (method != MaskMethod::Subtract && method != MaskMethod::Difference)) {
auto shape = layer->pooling();
shape->reset();
SHAPE(shape)->reset();
pShape->mask(shape, method);
pShape = shape;
}
pShape->trimpath(0.0f, 1.0f);
pShape->strokeWidth(0.0f);
pShape->fill(255, 255, 255, opacity);
pShape->transform(layer->cache.matrix);