From 70ba744d90154584933befabd0dd9eee713da14a Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Mon, 30 Dec 2019 18:20:39 +0900 Subject: [PATCH] [Tizen](Vector) Ignore rendered frames when the vector rendering is failed repeatedly Change-Id: I20b94a698a882c2938c3555d7586f0af94e3d05f --- .../toolkit-vector-animation-renderer.cpp | 4 +++ .../vector-animation-task.cpp | 32 ++++++++++++++++++---- .../animated-vector-image/vector-animation-task.h | 1 + 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp index cf52774..ee74ea0 100755 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp @@ -245,6 +245,10 @@ bool VectorAnimationRenderer::GetMarkerInfo( const std::string& marker, uint32_t return Internal::Adaptor::GetImplementation( *this ).GetMarkerInfo( marker, startFrame, endFrame ); } +void VectorAnimationRenderer::IgnoreRenderedFrames() +{ +} + VectorAnimationRenderer::UploadCompletedSignalType& VectorAnimationRenderer::UploadCompletedSignal() { return Internal::Adaptor::GetImplementation( *this ).UploadCompletedSignal(); 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 bb6fb7e..f1feb6f 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 @@ -84,7 +84,8 @@ VectorAnimationTask::VectorAnimationTask( VisualFactoryCache& factoryCache, cons mCurrentLoopUpdated( false ), mForward( true ), mUpdateFrameNumber( false ), - mNeedAnimationFinishedTrigger( true ) + mNeedAnimationFinishedTrigger( true ), + mForceRender( false ) { Initialize(); } @@ -308,7 +309,7 @@ void VectorAnimationTask::SetPlayRange( const Property::Array& playRange ) } // Make sure the range specified is between 0 and the total frame number - if( startFrame >= 0 && startFrame < mTotalFrame && endFrame >= 0 && endFrame < mTotalFrame ) + if( startFrame < mTotalFrame && endFrame < mTotalFrame ) { // If the range is not in order swap values if( startFrame > endFrame ) @@ -561,14 +562,33 @@ bool VectorAnimationTask::Rasterize() if( !renderSuccess ) { DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::Rasterize: Rendering failed. Try again later.[%d] [%p]\n", currentFrame, this ); - mUpdateFrameNumber = false; - if( !resourceReady ) + if( mForceRender ) { - ConditionalWait::ScopedLock lock( mConditionalWait ); - mResourceReady = false; + // Ignore previous frames and retry + mVectorRenderer.IgnoreRenderedFrames(); + renderSuccess = mVectorRenderer.Render( currentFrame ); + mForceRender = false; + } + else + { + mForceRender = true; + } + + if( !renderSuccess ) + { + mUpdateFrameNumber = false; + if( !resourceReady ) + { + ConditionalWait::ScopedLock lock( mConditionalWait ); + mResourceReady = false; + } } } + else + { + mForceRender = false; + } } if( stopped && renderSuccess ) 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 6fbd293..6d24518 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 @@ -305,6 +305,7 @@ private: bool mForward; bool mUpdateFrameNumber; bool mNeedAnimationFinishedTrigger; + bool mForceRender; }; -- 2.7.4