[Tizen] Add lock for shader-precompiler
authorJaehyun Cho <jae_hyun.cho@samsung.com>
Wed, 15 Nov 2023 06:02:32 +0000 (15:02 +0900)
committerJaehyun Cho <jae_hyun.cho@samsung.com>
Wed, 15 Nov 2023 06:02:32 +0000 (15:02 +0900)
This reverts commit 1dcc56d068d87d17f8dd679107457870fe014c80.

dali/integration-api/shader-precompiler.cpp
dali/integration-api/shader-precompiler.h

index f897a70..7ebc35c 100644 (file)
@@ -46,24 +46,15 @@ ShaderPrecompiler& ShaderPrecompiler::Get()
 
 void ShaderPrecompiler::GetPrecompileShaderList(std::vector<RawShaderData>& 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<RawShaderData>& 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
index 1ad5ba7..e4a0774 100644 (file)
@@ -68,7 +68,7 @@ public:
    *
    *  @SINCE_2_2.45
    *  @param[in] shaders shader data for precompile
-  */
+   */
   void GetPrecompileShaderList(std::vector<RawShaderData>& shaders);
 
   /**
@@ -76,7 +76,7 @@ public:
    *
    * @SINCE_2_2.45
    * @param[in] shaders shader data for precompile
-  */
+   */
   void SavePrecomipleShaderList(std::vector<RawShaderData>& 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<RawShaderData> mRawShaderList;
   ConditionalWait mConditionalWait;
+  Dali::Mutex mMutex;
   bool mPrecompiled;
   bool mEnabled;
+  bool mNeedsSleep{true};
 };
 
 } // namespace Integration