From 8ad25ba6d9cf3324cff957c6dfb20f94d7838b3a Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Thu, 27 May 2021 14:55:05 +0900 Subject: [PATCH] (Vector) Fix deadlock issue: remove lock Change-Id: I145d138f6a6a16e425dae577d2ecc88fd2dbfcbb --- .../animated-vector-image/vector-animation-task.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 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 a1659bf..3966d0c 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 @@ -373,7 +373,7 @@ VectorAnimationTask::UploadCompletedSignalType& VectorAnimationTask::UploadCompl bool VectorAnimationTask::Rasterize() { bool stopped = false; - uint32_t currentFrame, droppedFrames = 0; + uint32_t currentFrame; { ConditionalWait::ScopedLock lock(mConditionalWait); @@ -382,14 +382,13 @@ bool VectorAnimationTask::Rasterize() // The task will be destroyed. We don't need rasterization. return false; } - droppedFrames = mDroppedFrames; } ApplyAnimationData(); if(mPlayState == PlayState::PLAYING && mUpdateFrameNumber) { - mCurrentFrame = mForward ? mCurrentFrame + droppedFrames + 1 : mCurrentFrame - droppedFrames - 1; + mCurrentFrame = mForward ? mCurrentFrame + mDroppedFrames + 1 : mCurrentFrame - mDroppedFrames - 1; Dali::ClampInPlace(mCurrentFrame, mStartFrame, mEndFrame); } @@ -525,8 +524,6 @@ uint32_t VectorAnimationTask::GetStoppedFrame(uint32_t startFrame, uint32_t endF VectorAnimationTask::TimePoint VectorAnimationTask::CalculateNextFrameTime(bool renderNow) { - uint32_t droppedFrames = 0; - // std::chrono::time_point template has second parameter duration which defaults to the std::chrono::system_clock supported // duration. In some C++11 implementations it is a milliseconds duration, so it fails to compile unless mNextFrameStartTime // is casted to use the default duration. @@ -535,21 +532,20 @@ VectorAnimationTask::TimePoint VectorAnimationTask::CalculateNextFrameTime(bool if(renderNow) { mNextFrameStartTime = current; + mDroppedFrames = 0; } else if(mNextFrameStartTime < current) { + uint32_t droppedFrames = 0; + while(current > std::chrono::time_point_cast(mNextFrameStartTime + std::chrono::microseconds(mFrameDurationMicroSeconds))) { droppedFrames++; mNextFrameStartTime = std::chrono::time_point_cast(mNextFrameStartTime + std::chrono::microseconds(mFrameDurationMicroSeconds)); } - { - ConditionalWait::ScopedLock lock(mConditionalWait); - mDroppedFrames = droppedFrames; - } - mNextFrameStartTime = current; + mDroppedFrames = droppedFrames; } return mNextFrameStartTime; -- 2.7.4