From 50fdd275cbebd801174cfd1e6a336eac0b531c1d Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Thu, 30 Jan 2025 11:42:38 +0100 Subject: [PATCH 01/12] Avoid copy in getAsset: getAsset ident returns a pointer instead of copy --- src/AyonUsdResolver/cache/resolverContextCache.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.h b/src/AyonUsdResolver/cache/resolverContextCache.h index a8e6c15..a4f9f82 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.h +++ b/src/AyonUsdResolver/cache/resolverContextCache.h @@ -21,7 +21,7 @@ class pinningFileHandler { const std::unordered_map &rootReplaceData); ~pinningFileHandler() = default; - assetIdent getAssetData(const std::string &resolveKey); + assetIdent* getAssetData(const std::string &resolveKey); private: std::filesystem::path m_pinningFilePath; @@ -62,7 +62,7 @@ class resolverContextCache { * @param assetIdentifier * @return */ - assetIdent getAsset(const std::string &assetIdentifier, const cacheName &selectedCache, const bool &isAyonPath); + assetIdent* getAsset(const std::string &assetIdentifier, const cacheName &selectedCache, const bool &isAyonPath); /** * @brief set up the cache from a pinning file @@ -100,6 +100,8 @@ class resolverContextCache { bool isCacheStatic() const; private: + // assetIdent - cache element class used to represent an Usd asset in cache for the resolver (m_assetIdent, m_resolvedAssetPath) + // assetIdentHash - string equals to assetIdent std::unordered_set m_PreCache; std::unordered_set m_AyonCache; std::unordered_set m_CommonCache; From e2f1f9d2560f4977305a77fa885d84fb5d6803bc Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Thu, 30 Jan 2025 11:43:12 +0100 Subject: [PATCH 02/12] Avoid copy in getAsset: implementation of getAsset to return a pointer instead of copy --- .../cache/resolverContextCache.cpp | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index 855e7a6..ca1de58 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -62,9 +62,9 @@ pinningFileHandler::pinningFileHandler(const std::string &pinningFilePath, * @param resolveKey UsdAssetIdent * @return populated assetIdent if key was found in pinning file. Empty assetIdent if key was not found */ -assetIdent +assetIdent* pinningFileHandler::getAssetData(const std::string &resolveKey) { - assetIdent assetEntry; + assetIdent* assetEntry = nullptr; std::string pinnedAssetPath; try { @@ -74,9 +74,11 @@ pinningFileHandler::getAssetData(const std::string &resolveKey) { return assetEntry; } + assetEntry = new assetIdent(); + if (!pinnedAssetPath.empty()) { - assetEntry.setAssetIdentifier(resolveKey); - assetEntry.setResolvedAssetPath(pinnedAssetPath); + assetEntry->setAssetIdentifier(resolveKey); + assetEntry->setResolvedAssetPath(pinnedAssetPath); } return assetEntry; @@ -159,32 +161,31 @@ resolverContextCache::migratePreCacheIntoAyonCache() { m_PreCache.clear(); }; -assetIdent +assetIdent* resolverContextCache::getAsset(const std::string &assetIdentifier, const cacheName &selectedCache, const bool &isAyonPath) { TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("resolverContextCache::getAsset: (%s) \n", assetIdentifier.c_str()); - assetIdent asset; - if (assetIdentifier.empty()) { - return asset; + return nullptr; } if (this->m_static_cache) { return this->m_pinningFileHandler->getAssetData(assetIdentifier); } std::unordered_set::iterator hit; + assetIdent* asset = nullptr; std::shared_lock PreCachesharedLock(m_PreCachesharedMutex); hit = m_PreCache.find(assetIdentifier); if (hit != m_PreCache.end()) { - asset = *hit; + asset = const_cast(&(*hit)); // get the pointer without making a copy of the object PreCachesharedLock.unlock(); TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) .Msg("resolverContextCache::getAsset: PreCache Hit on (%s) with (%s) \n", - asset.getAssetIdentifier().c_str(), asset.getResolvedAssetPath().GetPathString().c_str()); + asset->getAssetIdentifier().c_str(), asset->getResolvedAssetPath().GetPathString().c_str()); return asset; } PreCachesharedLock.unlock(); @@ -195,7 +196,7 @@ resolverContextCache::getAsset(const std::string &assetIdentifier, std::shared_lock AyonCacheSharedLock(m_AyonCachesharedMutex); hit = m_AyonCache.find(assetIdentifier); if (hit != m_AyonCache.end()) { - asset = *hit; + asset = const_cast(&(*hit)); // get the pointer without making a copy of the object TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("resolverContextCache::getAsset: AyonCache Hit \n"); } @@ -208,7 +209,7 @@ resolverContextCache::getAsset(const std::string &assetIdentifier, std::shared_lock CommonCacheSharedLock(m_CommonCachesharedMutex); hit = m_CommonCache.find(assetIdentifier); if (hit != m_CommonCache.end()) { - asset = *hit; + asset = const_cast(&(*hit)); // get the pointer without making a copy of the object TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) .Msg("resolverContextCache::getAsset: CommonCache Hit \n"); } @@ -217,37 +218,39 @@ resolverContextCache::getAsset(const std::string &assetIdentifier, break; } } - if (!asset.is_empty()) { + if (asset != nullptr) { TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) - .Msg("resolverContextCache::getAsset: Cache Hit with (%s) with (%s) \n", asset.getAssetIdentifier().c_str(), - asset.getResolvedAssetPath().GetPathString().c_str()); + .Msg("resolverContextCache::getAsset: Cache Hit with (%s) with (%s) \n", asset->getAssetIdentifier().c_str(), + asset->getResolvedAssetPath().GetPathString().c_str()); return asset; } + asset = new assetIdent(); + TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("resolverContextCache::getAsset: No Cache Hit \n"); if (isAyonPath) { std::pair resolvedAsset = m_ayon->resolvePath(assetIdentifier); - asset.setAssetIdentifier(std::move(resolvedAsset.first)); - asset.setResolvedAssetPath(std::move(resolvedAsset.second)); + asset->setAssetIdentifier(std::move(resolvedAsset.first)); + asset->setResolvedAssetPath(std::move(resolvedAsset.second)); TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("resolverContextCache::getAsset: called ayon.resolvePath() \n"); - this->insert(asset); + this->insert(*asset); } else { if (_IsRelativePath(assetIdentifier)) { - asset.setResolvedAssetPath(_ResolveAnchored(ArchGetCwd(), assetIdentifier)); + asset->setResolvedAssetPath(_ResolveAnchored(ArchGetCwd(), assetIdentifier)); } else { - asset.setResolvedAssetPath(ArResolvedPath(TfNormPath(TfAbsPath(assetIdentifier)))); + asset->setResolvedAssetPath(ArResolvedPath(TfNormPath(TfAbsPath(assetIdentifier)))); } - if (!asset.getResolvedAssetPath().empty()) { - asset.setAssetIdentifier(assetIdentifier); + if (!asset->getResolvedAssetPath().empty()) { + asset->setAssetIdentifier(assetIdentifier); std::shared_lock CommonCacheSharedLock(m_CommonCachesharedMutex); TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) .Msg("resolverContextCache::getAsset: insert into CommonCache \n"); - m_CommonCache.insert(asset); + m_CommonCache.insert(*asset); } } From 60cabb203b99123c49a82365940e50995fcc872e Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Thu, 30 Jan 2025 11:44:35 +0100 Subject: [PATCH 03/12] Avoid copy in getAsset: small adjustmenst in resolver caused by change of return value type in getAsset --- src/AyonUsdResolver/resolver.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/AyonUsdResolver/resolver.cpp b/src/AyonUsdResolver/resolver.cpp index f812984..a6b5a7e 100644 --- a/src/AyonUsdResolver/resolver.cpp +++ b/src/AyonUsdResolver/resolver.cpp @@ -99,7 +99,7 @@ AyonUsdResolver::_Resolve(const std::string &assetPath) const { const AyonUsdResolverContext* contexts[2] = {this->_GetCurrentContextPtr(), &_fallbackContext}; for (const AyonUsdResolverContext* ctx: contexts) { if (ctx) { - assetIdent asset; + assetIdent* asset = nullptr; std::shared_ptr resolverCache = ctx->getCachePtr(); std::string cleanAssetPath = assetPath; @@ -112,8 +112,10 @@ AyonUsdResolver::_Resolve(const std::string &assetPath) const { if (pos != std::string::npos) { sdfArgs = assetPath.substr(pos + cleanAssetPath.length()); } - ArResolvedPath resolvedPath(sdfArgs.empty() ? asset.getResolvedAssetPath() : - asset.getResolvedAssetPath().GetPathString() + sdfArgs); + + // currently asset can not be nullptr, but doesn't check if getResolvedAssetPath is empty + ArResolvedPath resolvedPath(sdfArgs.empty() ? asset->getResolvedAssetPath() : + asset->getResolvedAssetPath().GetPathString() + sdfArgs); if (resolvedPath) { TF_DEBUG(AYONUSDRESOLVER_RESOLVER) From 1a81fdd850749eb6eea32d00a32ce942cdd8bf85 Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Thu, 30 Jan 2025 13:06:23 +0100 Subject: [PATCH 04/12] Avoid copy in getAsset: implementation of getAsset to return a pointer instead of copy --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index ca1de58..e7f31c1 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -168,7 +168,7 @@ resolverContextCache::getAsset(const std::string &assetIdentifier, TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("resolverContextCache::getAsset: (%s) \n", assetIdentifier.c_str()); if (assetIdentifier.empty()) { - return nullptr; + return new assetIdent(); } if (this->m_static_cache) { return this->m_pinningFileHandler->getAssetData(assetIdentifier); From 79435be351bebd87b08de47089868543710b7c85 Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Fri, 7 Feb 2025 10:13:48 +0100 Subject: [PATCH 05/12] Small adjustment in _Resolve, + explaining comment --- src/AyonUsdResolver/resolver.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/AyonUsdResolver/resolver.cpp b/src/AyonUsdResolver/resolver.cpp index a6b5a7e..ce2c272 100644 --- a/src/AyonUsdResolver/resolver.cpp +++ b/src/AyonUsdResolver/resolver.cpp @@ -99,13 +99,13 @@ AyonUsdResolver::_Resolve(const std::string &assetPath) const { const AyonUsdResolverContext* contexts[2] = {this->_GetCurrentContextPtr(), &_fallbackContext}; for (const AyonUsdResolverContext* ctx: contexts) { if (ctx) { - assetIdent* asset = nullptr; - std::shared_ptr resolverCache = ctx->getCachePtr(); std::string cleanAssetPath = assetPath; RES_FUNCS_REMOVE_SDF_ARGS(cleanAssetPath); - asset = resolverCache->getAsset(cleanAssetPath, cacheName::AYONCACHE, true); + // currently asset can not be nullptr to match the previous implementation + // getAsset can return only empty assetIdent + assetIdent* asset = resolverCache->getAsset(cleanAssetPath, cacheName::AYONCACHE, true); size_t pos = assetPath.find(cleanAssetPath); std::string sdfArgs; @@ -113,7 +113,6 @@ AyonUsdResolver::_Resolve(const std::string &assetPath) const { sdfArgs = assetPath.substr(pos + cleanAssetPath.length()); } - // currently asset can not be nullptr, but doesn't check if getResolvedAssetPath is empty ArResolvedPath resolvedPath(sdfArgs.empty() ? asset->getResolvedAssetPath() : asset->getResolvedAssetPath().GetPathString() + sdfArgs); From 8a976209068da8f55632b9351c4b07040c777e94 Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Mon, 13 Apr 2026 16:41:28 +0200 Subject: [PATCH 06/12] assetIdent -> AssetIdentifier --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index 6085187..ea61a7e 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -76,7 +76,7 @@ PinningFileHandler::getAssetData(const std::string &resolveKey) { return assetEntry; } - assetEntry = new assetIdent(); + assetEntry = new AssetIdentifier(); if (!pinnedAssetPath.empty()) { assetEntry->setAssetIdentifier(resolveKey); @@ -179,7 +179,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, } std::unordered_set::iterator hit; - assetIdent* asset = nullptr; + assetIdentifier* asset = nullptr; std::shared_lock preCacheSharedLock(m_PreCacheSharedMutex); hit = m_PreCache.find(assetIdentifier); @@ -213,7 +213,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, std::shared_lock CommonCacheSharedLock(m_CommonCacheSharedMutex); hit = m_CommonCache.find(assetIdentifier); if (hit != m_CommonCache.end()) { - asset = const_cast(&(*hit)); // get the pointer without making a copy of the object + asset = const_cast(&(*hit)); // get the pointer without making a copy of the object TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) .Msg("ResolverContextCache::getAsset: CommonCache Hit \n"); } From c5eb7b4bfde2d69679785363d4b14a8e23898728 Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Mon, 13 Apr 2026 16:44:15 +0200 Subject: [PATCH 07/12] assetIdent -> AssetIdentifier n.2 --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index ea61a7e..b844127 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -172,7 +172,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("ResolverContextCache::getAsset: (%s) \n", assetIdentifier.c_str()); if (assetIdentifier.empty()) { - return new assetIdent(); + return new AssetIdentifier(); } if (m_staticCache) { return m_pinningFileHandler->getAssetData(assetIdentifier); From 8b2f9021786c839e116e0c1e8f02c4ff24a2604e Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Mon, 13 Apr 2026 16:50:21 +0200 Subject: [PATCH 08/12] removing reference where its not needed --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 4 ++-- src/AyonUsdResolver/cache/resolverContextCache.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index b844127..4d3e274 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -167,8 +167,8 @@ ResolverContextCache::migratePreCacheIntoAyonCache() { AssetIdentifier* ResolverContextCache::getAsset(const std::string &assetIdentifier, - const cacheName &selectedCache, - const bool &isAyonPath) { + const CacheName selectedCache, + const bool isAyonPath) { TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("ResolverContextCache::getAsset: (%s) \n", assetIdentifier.c_str()); if (assetIdentifier.empty()) { diff --git a/src/AyonUsdResolver/cache/resolverContextCache.h b/src/AyonUsdResolver/cache/resolverContextCache.h index 95dd385..1646ace 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.h +++ b/src/AyonUsdResolver/cache/resolverContextCache.h @@ -62,7 +62,7 @@ class ResolverContextCache { * @param isAyonPath Whether this is an AYON URI * @return AssetIdentifier with resolved path */ - AssetIdentifier* getAsset(const std::string &assetIdentifier, const cacheName &selectedCache, const bool &isAyonPath); + AssetIdentifier* getAsset(const std::string &assetIdentifier, const CacheName selectedCache, const bool isAyonPath); /** * @brief Set up the cache from a pinning file From 7af7acffec1d7f360693f8ee69f3d704bbee7f52 Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Mon, 13 Apr 2026 16:55:05 +0200 Subject: [PATCH 09/12] fix incorrect variable name --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index 4d3e274..a504697 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -185,7 +185,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, hit = m_PreCache.find(assetIdentifier); if (hit != m_PreCache.end()) { asset = const_cast(&(*hit)); // get the pointer without making a copy of the object - PreCachesharedLock.unlock(); + preCachesharedLock.unlock(); TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) .Msg("ResolverContextCache::getAsset: PreCache Hit on (%s) with (%s) \n", From bf6488c7d056db9693bae18d8e8096f5698b44cf Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Mon, 13 Apr 2026 16:59:10 +0200 Subject: [PATCH 10/12] fix incorrect type name --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index a504697..185af54 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -179,7 +179,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, } std::unordered_set::iterator hit; - assetIdentifier* asset = nullptr; + AssetIdentifier* asset = nullptr; std::shared_lock preCacheSharedLock(m_PreCacheSharedMutex); hit = m_PreCache.find(assetIdentifier); @@ -213,7 +213,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, std::shared_lock CommonCacheSharedLock(m_CommonCacheSharedMutex); hit = m_CommonCache.find(assetIdentifier); if (hit != m_CommonCache.end()) { - asset = const_cast(&(*hit)); // get the pointer without making a copy of the object + asset = const_cast(&(*hit)); // get the pointer without making a copy of the object TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) .Msg("ResolverContextCache::getAsset: CommonCache Hit \n"); } From 81122a7ec463edd40a32f167b29ad85181037fab Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Mon, 13 Apr 2026 17:03:58 +0200 Subject: [PATCH 11/12] fix build issues --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index 185af54..e057df9 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -185,7 +185,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, hit = m_PreCache.find(assetIdentifier); if (hit != m_PreCache.end()) { asset = const_cast(&(*hit)); // get the pointer without making a copy of the object - preCachesharedLock.unlock(); + preCacheSharedLock.unlock(); TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT) .Msg("ResolverContextCache::getAsset: PreCache Hit on (%s) with (%s) \n", @@ -233,7 +233,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("ResolverContextCache::getAsset: No Cache Hit \n"); if (isAyonPath) { - std::pair resolvedAsset = m_ayon->resolvePath(assetIdentifier); + std::pair resolvedAsset = m_ayon->resolvePath(*assetIdentifier); asset->setAssetIdentifier(std::move(resolvedAsset.first)); asset->setResolvedAssetPath(std::move(resolvedAsset.second)); From d775dab46a811a64245cd3753fcd7060dd3f43f2 Mon Sep 17 00:00:00 2001 From: Tadeas Hejnic Date: Mon, 13 Apr 2026 17:16:11 +0200 Subject: [PATCH 12/12] fix build issue --- src/AyonUsdResolver/cache/resolverContextCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AyonUsdResolver/cache/resolverContextCache.cpp b/src/AyonUsdResolver/cache/resolverContextCache.cpp index e057df9..11b7375 100644 --- a/src/AyonUsdResolver/cache/resolverContextCache.cpp +++ b/src/AyonUsdResolver/cache/resolverContextCache.cpp @@ -233,7 +233,7 @@ ResolverContextCache::getAsset(const std::string &assetIdentifier, TF_DEBUG(AYONUSDRESOLVER_RESOLVER_CONTEXT).Msg("ResolverContextCache::getAsset: No Cache Hit \n"); if (isAyonPath) { - std::pair resolvedAsset = m_ayon->resolvePath(*assetIdentifier); + std::pair resolvedAsset = m_ayon->get()->resolvePath(assetIdentifier); asset->setAssetIdentifier(std::move(resolvedAsset.first)); asset->setResolvedAssetPath(std::move(resolvedAsset.second));