From: Eunki, Hong Date: Wed, 25 Oct 2023 07:39:18 +0000 (+0900) Subject: [Tizen] Add lock for shader-precompiler X-Git-Tag: accepted/tizen/unified/20231031.163525~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=43f06388b88af2dd8b1ab0e0dac88216935d37d5;p=platform%2Fcore%2Fuifw%2Fdali-core.git [Tizen] Add lock for shader-precompiler This reverts commit c13ae2b3bef35b3aa1b0e8409efbf1e2cc6c9b82. Change-Id: I3d97c8702754a79ec573c0152d254c6a7d093db5 --- 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