{
const char* VERSION_SEPARATOR = "-";
const char* SHADER_SUFFIX = ".dali-bin";
-
-constexpr uint32_t MAXIMUM_STRING_SHADER_DATA_CACHE_CLEAN_THRESHOLD = 128u;
} // namespace
namespace Dali
}
else
{
- if(DALI_UNLIKELY(mTotalStringCachedShadersCount >= MAXIMUM_STRING_SHADER_DATA_CACHE_CLEAN_THRESHOLD))
- {
- // Reset string cache, to avoid memory leak problem.
- ResetStringShaderData();
- }
auto& cacheList = mShaderStringCache[shaderHash]; ///< Get or create a new cache list.
// Ignore shaderdata with string if it already exists:
}
shaderData.Reference();
cacheList.PushBack(&shaderData);
-
- ++mTotalStringCachedShadersCount;
DALI_LOG_INFO(Debug::Filter::gShader, Debug::General, "CACHED NON-BINARY SHADER FOR HASH: %u, HINT: %d, TAG: %u\n", shaderHash, static_cast<int>(shaderData.GetHints()), shaderData.GetRenderPassTag());
}
}
// Reduce reference before erase
(*iter)->Unreference();
cacheList.Erase(iter);
-
- --mTotalStringCachedShadersCount;
break;
}
}
}
}
-void ShaderFactory::ResetStringShaderData()
-{
- DALI_LOG_RELEASE_INFO("Trigger StringShaderData GC. shader : [%u]\n", mTotalStringCachedShadersCount);
- for(auto&& iter : mShaderStringCache)
- {
- auto& cacheList = iter.second;
- for(auto&& shaderData : cacheList)
- {
- shaderData->Unreference();
- }
- }
-
- // Reset cache after unreference.
- mShaderStringCache.clear();
-
- mTotalStringCachedShadersCount = 0u;
- DALI_LOG_RELEASE_INFO("StringShaderData GC done\n");
-}
-
} // namespace Internal
} // namespace Dali
*/
void RemoveStringShaderData(Internal::ShaderData& shaderData);
- /**
- * @brief Remove all the string shader data from the cache.
- */
- void ResetStringShaderData();
-
// Undefined
ShaderFactory(const ShaderFactory&) = delete;
ShaderCacheContainer mShaderBinaryCache; ///< Cache of pre-compiled shaders.
ShaderCacheContainer mShaderStringCache; ///< Cache of non-pre-compiled shaders. (TODO : Could we clean up this cache by user management?)
- uint32_t mTotalStringCachedShadersCount{0u}; ///< Total number of cached shaders that are not pre-compiled.
-
}; // class ShaderFactory
inline MessageBase* ShaderCompiledMessage(ShaderSaver& factory, Internal::ShaderDataPtr shaderData)