From: Heeyong Song Date: Tue, 9 Jun 2020 07:53:08 +0000 (+0900) Subject: (Vector) Fix memory leak X-Git-Tag: dali_1.9.17~12^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=88c9691756d8e04c7b16c666200dbffba983cc7c (Vector) Fix memory leak Sometimes the VectorAnimationTask was not destructed because it tried to rasterize repeatedly. Change-Id: Id4c6cc9bc32f8f5d4c5836e0b4fc9edf33eaa5f9 --- 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