From 4f354f6d5e9c7e73e330311b270c793a70035830 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 2 Jul 2024 14:57:06 +0900 Subject: [PATCH] lottie/parser: optimization++ Skip the data constructuion if the mask mode is none. it's not used at all. --- src/loaders/lottie/tvgLottieParser.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 8237e951..e3726dcc 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -1161,16 +1161,26 @@ void LottieParser::getLayerSize(float& val) LottieMask* LottieParser::parseMask() { auto mask = new LottieMask; + auto valid = true; //skip if the mask mode is none. enterObject(); while (auto key = nextObjectKey()) { if (KEY_AS("inv")) mask->inverse = getBool(); - else if (KEY_AS("mode")) mask->method = getMaskMethod(mask->inverse); - else if (KEY_AS("pt")) getPathSet(mask->pathset); - else if (KEY_AS("o")) parseProperty(mask->opacity); + else if (KEY_AS("mode")) + { + mask->method = getMaskMethod(mask->inverse); + if (mask->method == CompositeMethod::None) valid = false; + } + else if (valid && KEY_AS("pt")) getPathSet(mask->pathset); + else if (valid && KEY_AS("o")) parseProperty(mask->opacity); else skip(key); } + if (!valid) { + delete(mask); + return nullptr; + } + return mask; } @@ -1179,8 +1189,9 @@ void LottieParser::parseMasks(LottieLayer* layer) { enterArray(); while (nextArrayValue()) { - auto mask = parseMask(); - layer->masks.push(mask); + if (auto mask = parseMask()) { + layer->masks.push(mask); + } } }