Let we ensure to release the RenderingData at main thread, instead of Render() time.
(Since RenderingDataImpl could have reference count at Render time. And it might be released
at worker thread timing if Finalize() API called after Render().
Change-Id: I85a725c7a356d56567009e5c3d131a6db206c9c1
Signed-off-by: Eunki Hong <eunkiki.hong@samsung.com>
}
Dali::Mutex::ScopedLock lock(mMutex);
+ if(DALI_UNLIKELY(mFinalized))
+ {
+ // Fast-out if finalized.
+ return false;
+ }
+
if(mEnableFixedCache)
{
if(mDecodedBuffers.size() < mTotalFrameNumber)
{
mPreviousTextures.push_back(mRenderedTexture); // It is used to destroy the object in the main thread.
- mRenderedTexture = renderingDataImpl->mTexture;
+ mRenderedTexture = std::move(renderingDataImpl->mTexture);
+ renderingDataImpl->mTexture.Reset();
+
mResourceReady = true;
mResourceReadyTriggered = true;
DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "this = %p\n", this);
}
+// Called by VectorAnimationTaskThread
bool VectorAnimationRendererX::Render(uint32_t frameNumber)
{
std::shared_ptr<RenderingDataImpl> renderingDataImpl;
VectorAnimationRenderer::~VectorAnimationRenderer()
{
+ // Ensure the rendering data removed after Render finisehd at VectorAnimationTaskThread.
+ mCurrentRenderingData.reset();
}
// This Method is called inside mRenderingDataMutex
Dali::Mutex::ScopedLock lock(mRenderingDataMutex);
mPreparedRenderingData.reset();
- mCurrentRenderingData.reset();
ClearPreviousRenderingData();
// Change this flag under both mMutex and mRenderingDataMutex