MCPcopy Create free account
hub / github.com/Snapchat/Valdi / resolveAssetLoader

Method resolveAssetLoader

valdi/src/valdi/runtime/Resources/AssetLoaderManager.cpp:78–118  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

76}
77
78Ref<AssetLoader> AssetLoaderManager::resolveAssetLoader(const StringBox& urlScheme,
79 snap::valdi_core::AssetOutputType outputType) {
80 std::lock_guard<Mutex> mutex(_mutex);
81
82 // Could change later to a map for potentially faster query performance.
83 const RegisteredAssetLoader* bytesAssetLoaderCandidate = nullptr;
84
85 size_t i = _entries.size();
86 while (i > 0) {
87 i--;
88 const auto& entry = _entries[i];
89 if (entry.urlScheme == urlScheme) {
90 if (entry.outputType == outputType && canUseRegisteredAssetLoader(entry, bytesAssetLoaderCandidate)) {
91 return entry.assetLoader;
92 }
93
94 if (entry.outputType == snap::valdi_core::AssetOutputType::Bytes && bytesAssetLoaderCandidate == nullptr) {
95 bytesAssetLoaderCandidate = &entry;
96 }
97 }
98 }
99
100 if (outputType != snap::valdi_core::AssetOutputType::Bytes) {
101 const auto& downloaderIt = _downloaderByScheme.find(urlScheme);
102 if (downloaderIt != _downloaderByScheme.end()) {
103 return tryCreateAssetLoaderFromFactory(
104 urlScheme, outputType, /* sourceAssetLoader */ nullptr, downloaderIt->second, _entries.size());
105 } else if (bytesAssetLoaderCandidate != nullptr) {
106 auto sourceAssetLoader = bytesAssetLoaderCandidate->assetLoader;
107 auto remoteDownloader = makeShared<AssetLoaderRemoteDownloaderAdapter>(sourceAssetLoader);
108
109 return tryCreateAssetLoaderFromFactory(urlScheme,
110 outputType,
111 sourceAssetLoader,
112 remoteDownloader,
113 bytesAssetLoaderCandidate - _entries.data());
114 }
115 }
116
117 return nullptr;
118}
119
120Ref<AssetLoader> AssetLoaderManager::tryCreateAssetLoaderFromFactory(const StringBox& urlScheme,
121 snap::valdi_core::AssetOutputType outputType,

Callers 2

TEST_FFunction · 0.80

Calls 5

endMethod · 0.65
sizeMethod · 0.45
findMethod · 0.45
dataMethod · 0.45

Tested by 1

TEST_FFunction · 0.64