From: Eunki, Hong Date: Tue, 16 Jan 2024 02:51:06 +0000 (+0900) Subject: [Tizen] Fix bug that Dali::Texture destroyed at worker thread X-Git-Tag: accepted/tizen/8.0/unified/20240122.175523~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F14%2F304314%2F3;p=platform%2Fcore%2Fuifw%2Fdali-extension.git [Tizen] Fix bug that Dali::Texture destroyed at worker thread If SetSize() API comes multiple times before Event thread comes, The mPreviousTexture might be released at workerthread. It might make some Render::Texture leak. Change-Id: I94e36ac81cc4bf9bbebc0b3b9d3ce89187390b15 Signed-off-by: Eunki, Hong --- diff --git a/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.cpp b/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.cpp index 8ce4542..3d0b32e 100644 --- a/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.cpp +++ b/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.cpp @@ -52,7 +52,7 @@ Debug::Filter* gVectorAnimationLogFilter = Debug::Filter::New(Debug::NoLogging, VectorAnimationRendererTizen::VectorAnimationRendererTizen() : mBuffers(), mRenderedTexture(), - mPreviousTexture(), + mPreviousTextures(), mTargetSurface(), mTbmQueue(NULL) { @@ -191,7 +191,8 @@ bool VectorAnimationRendererTizen::Render(uint32_t frameNumber) if(!mResourceReady) { - mPreviousTexture = mRenderedTexture; // It is used to destroy the object in the main thread. + mPreviousTextures.push_back(mRenderedTexture); // It is used to destroy the object in the main thread. + mRenderedTexture = mTexture; mResourceReady = true; mResourceReadyTriggered = true; @@ -272,7 +273,7 @@ void VectorAnimationRendererTizen::ResetBuffers() void VectorAnimationRendererTizen::OnFinalize() { mRenderedTexture.Reset(); - mPreviousTexture.Reset(); + mPreviousTextures.clear(); mTargetSurface = nullptr; mTbmQueue = NULL; @@ -283,7 +284,7 @@ void VectorAnimationRendererTizen::OnSetSize() mTbmQueue = AnyCast(mTargetSurface->GetNativeImageSourceQueue()); // Reset the previous texture to destroy it in the main thread - mPreviousTexture.Reset(); + mPreviousTextures.clear(); } void VectorAnimationRendererTizen::PrepareTarget() diff --git a/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.h b/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.h index ce82262..98448b0 100644 --- a/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.h +++ b/dali-extension/vector-animation-renderer/vector-animation-renderer-tizen.h @@ -108,10 +108,10 @@ private: std::vector mBuffers; ///< EGL Image vector - Dali::Texture mRenderedTexture; ///< Rendered Texture - Dali::Texture mPreviousTexture; ///< Previous rendered texture - NativeImageSourceQueuePtr mTargetSurface; ///< The target surface - tbm_surface_queue_h mTbmQueue; ///< Tbm surface queue handle + Dali::Texture mRenderedTexture; ///< Rendered Texture + std::vector mPreviousTextures; ///< Previous rendered texture + NativeImageSourceQueuePtr mTargetSurface; ///< The target surface + tbm_surface_queue_h mTbmQueue; ///< Tbm surface queue handle }; } // namespace Plugin