/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
} // namespace
ModelLoadTask::ModelLoadTask(const std::string& modelUrl, const std::string& resourceDirectoryUrl, CallbackBase* callback)
-: AsyncTask(callback),
+: AsyncTask(callback, AsyncTask::PriorityType::LOW),
mModelUrl(modelUrl),
mResourceDirectoryUrl(resourceDirectoryUrl),
mModelCacheManager(Scene3D::Internal::ModelCacheManager::Get()),
mLoadResult(mModelCacheManager.GetModelLoadResult(mModelUrl)),
mHasSucceeded(false)
{
+ mModelCacheManager.ReferenceModelCache(mModelUrl);
}
ModelLoadTask::~ModelLoadTask()
{
+ mModelCacheManager.UnreferenceModelCache(mModelUrl);
}
void ModelLoadTask::Process()
mModelLoader = std::make_shared<Dali::Scene3D::Loader::ModelLoader>(mModelUrl, mResourceDirectoryUrl, mLoadResult);
- bool loadSucceeded = false;
- Dali::ConditionalWait& loadSceneConditionalWait = mModelCacheManager.GetLoadSceneConditionalWaitInstance(mModelUrl);
+ bool loadSucceeded = false;
{
- ConditionalWait::ScopedLock lock(loadSceneConditionalWait);
+ // Lock model url during process, so let we do not try to load same model multiple times.
+ mModelCacheManager.LockModelLoadScene(mModelUrl);
if(mModelCacheManager.IsSceneLoaded(mModelUrl))
{
loadSucceeded = true;
mModelCacheManager.SetSceneLoading(mModelUrl, false);
mModelCacheManager.SetSceneLoaded(mModelUrl, loadSucceeded);
}
+ mModelCacheManager.UnlockModelLoadScene(mModelUrl);
}
if(!loadSucceeded)