From 23168167b5d5aaa74cbe7427977144cf787dfa20 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Tue, 16 Jan 2024 11:51:06 +0900 Subject: [PATCH] [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 --- .../vector-animation-renderer-tizen.cpp | 9 +++++---- .../vector-animation-renderer/vector-animation-renderer-tizen.h | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) 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 -- 2.7.4