From 88c9691756d8e04c7b16c666200dbffba983cc7c Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Tue, 9 Jun 2020 16:53:08 +0900 Subject: [PATCH] (Vector) Fix memory leak Sometimes the VectorAnimationTask was not destructed because it tried to rasterize repeatedly. Change-Id: Id4c6cc9bc32f8f5d4c5836e0b4fc9edf33eaa5f9 --- .../animated-vector-image/vector-animation-task.cpp | 14 +++++++++++++- .../visuals/animated-vector-image/vector-animation-task.h | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp index 6072ce5..55968e1 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp @@ -74,7 +74,8 @@ VectorAnimationTask::VectorAnimationTask( VisualFactoryCache& factoryCache, cons mForward( true ), mUpdateFrameNumber( false ), mNeedAnimationFinishedTrigger( true ), - mAnimationDataUpdated( false ) + mAnimationDataUpdated( false ), + mDestroyTask( false ) { Initialize(); } @@ -95,6 +96,8 @@ void VectorAnimationTask::Finalize() } mVectorRenderer.Finalize(); + + mDestroyTask = true; } void VectorAnimationTask::SetRenderer( Renderer renderer ) @@ -372,6 +375,15 @@ bool VectorAnimationTask::Rasterize() bool stopped = false; uint32_t currentFrame; + { + ConditionalWait::ScopedLock lock( mConditionalWait ); + if( mDestroyTask ) + { + // The task will be destroyed. We don't need rasterization. + return false; + } + } + ApplyAnimationData(); if( mPlayState == PlayState::PLAYING && mUpdateFrameNumber ) diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h index 8e91788..79c3ee2 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h @@ -314,7 +314,7 @@ private: bool mUpdateFrameNumber; bool mNeedAnimationFinishedTrigger; bool mAnimationDataUpdated; - + bool mDestroyTask; }; } // namespace Internal -- 2.7.4