summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2019-04-09 07:21:32 +0300
committerRebecca Worledge <rebecca.worledge@theqtcompany.com>2019-04-11 03:00:56 +0000
commit80151882a9a806f5fdbb700fd6a0db1300d9d5e0 (patch)
treed4a41feb20dbbf1f37218a6ec1674ab4fc5e97b3
parentfbaf1d8e3292929e79b7c7dcdbe8f28533809ceb (diff)
BatchRenderer: do not prune cached frames next to the current one
there is no any reason to drop frames that would be re-evaluated just a few ticks later Change-Id: Ieda6cf5784319fe6b35e82ee520ee4abddaab703 Reviewed-by: Rebecca Worledge <rebecca.worledge@theqtcompany.com>
-rw-r--r--src/imports/rasterrenderer/batchrenderer.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/imports/rasterrenderer/batchrenderer.cpp b/src/imports/rasterrenderer/batchrenderer.cpp
index 2a6f373..84e5a2f 100644
--- a/src/imports/rasterrenderer/batchrenderer.cpp
+++ b/src/imports/rasterrenderer/batchrenderer.cpp
@@ -140,11 +140,13 @@ bool BatchRenderer::gotoFrame(LottieAnimation *animator, int frame)
void BatchRenderer::pruneFrameCache(Entry* e)
{
QHash<int, BMBase*>::iterator it = e->frameCache.begin();
-
while (it != e->frameCache.end()) {
- if (it.key() == e->currentFrame) {
+ int frame = it.key();
+ if ((frame - e->currentFrame) * e->animDir >= 0) { // same frame or same direction
++it;
} else {
+ qCDebug(lcLottieQtBodymovinRenderThread) << "Animator:" << static_cast<void*>(e->animator)
+ << "Remove frame from cache" << frame;
delete it.value();
it = e->frameCache.erase(it);
}