From de24bf76431a3d6ee5e4e27f3752ff7032752e7b Mon Sep 17 00:00:00 2001 From: sunghyun kim Date: Mon, 23 Oct 2023 18:54:33 +0900 Subject: [PATCH] [Tizen] Add lock for shader-precompiler Change-Id: I16ddddf53600497b398ccf9600a1dd7b75769fbf --- dali/integration-api/shader-precompiler.cpp | 33 ++++++++++++++++++++--------- dali/integration-api/shader-precompiler.h | 22 +++++++++++++++---- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/dali/integration-api/shader-precompiler.cpp b/dali/integration-api/shader-precompiler.cpp index f897a70..7ebc35c 100644 --- a/dali/integration-api/shader-precompiler.cpp +++ b/dali/integration-api/shader-precompiler.cpp @@ -46,24 +46,15 @@ ShaderPrecompiler& ShaderPrecompiler::Get() void ShaderPrecompiler::GetPrecompileShaderList(std::vector& shaderList) { - ConditionalWait::ScopedLock lock(mConditionalWait); - if(!IsReady()) - { - DALI_LOG_RELEASE_INFO("Precompiled shader list is not ready yet, need to wait \n"); - mConditionalWait.Wait(lock); - } - // move shader list shaderList = mRawShaderList; } void ShaderPrecompiler::SavePrecomipleShaderList(std::vector& shaderList) { - ConditionalWait::ScopedLock lock(mConditionalWait); - mRawShaderList = shaderList; mPrecompiled = true; - mConditionalWait.Notify(lock); + StopPrecompile(); } bool ShaderPrecompiler::IsReady() const @@ -81,6 +72,28 @@ bool ShaderPrecompiler::IsEnable() return mEnabled; } +void ShaderPrecompiler::WaitPrecompileList() +{ + ConditionalWait::ScopedLock lock(mConditionalWait); + { + Dali::Mutex::ScopedLock mutexLock(mMutex); + if(!mNeedsSleep) + { + return; + } + } + + mConditionalWait.Wait(lock); +} + +void ShaderPrecompiler::StopPrecompile() +{ + ConditionalWait::ScopedLock lock(mConditionalWait); + Dali::Mutex::ScopedLock mutexLock(mMutex); + mNeedsSleep = false; + mConditionalWait.Notify(lock); +} + } // namespace Integration } // namespace Dali diff --git a/dali/integration-api/shader-precompiler.h b/dali/integration-api/shader-precompiler.h index 1ad5ba7..e4a0774 100644 --- a/dali/integration-api/shader-precompiler.h +++ b/dali/integration-api/shader-precompiler.h @@ -68,7 +68,7 @@ public: * * @SINCE_2_2.45 * @param[in] shaders shader data for precompile - */ + */ void GetPrecompileShaderList(std::vector& shaders); /** @@ -76,7 +76,7 @@ public: * * @SINCE_2_2.45 * @param[in] shaders shader data for precompile - */ + */ void SavePrecomipleShaderList(std::vector& shaders); /** @@ -84,14 +84,14 @@ public: * * @SINCE_2_2.45 * @return true if precompile list is ready - */ + */ bool IsReady() const; /** * @brief Enable the feature of precompile * * @SINCE_2_2.45 - */ + */ void Enable(); /** @@ -103,6 +103,18 @@ public: bool IsEnable(); /** + * @brief Waiting for a list of shaders to be precompiled + * + */ + void WaitPrecompileList(); + + /** + * @brief Stop waiting for a list of shaders to be precompiled + * + */ + void StopPrecompile(); + + /** * Construct a new ShaderPrecompiler. */ ShaderPrecompiler(); @@ -118,8 +130,10 @@ private: static std::once_flag mOnceFlag; std::vector mRawShaderList; ConditionalWait mConditionalWait; + Dali::Mutex mMutex; bool mPrecompiled; bool mEnabled; + bool mNeedsSleep{true}; }; } // namespace Integration -- 2.7.4