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

Method loadModuleAsyncInner

valdi/src/valdi/runtime/Resources/ResourceManager.cpp:496–549  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

494}
495
496void ResourceManager::loadModuleAsyncInner(const StringBox& bundleName,
497 FlatSet<StringBox>& processedModules,
498 ResourceManagerLoadModuleType loadType,
499 Function<void(Result<Void>)> onComplete) {
500 if (processedModules.find(bundleName) != processedModules.end()) {
501 onComplete(Void());
502 return;
503 }
504 processedModules.insert(bundleName);
505
506 auto bundle = getBundle(bundleName);
507 if (!bundle->hasRemoteArchive()) {
508 onComplete(Void());
509 return;
510 }
511
512 auto manifest = _remoteModuleManager->getRegisteredManifest(bundleName);
513 if (manifest == nullptr) {
514 onComplete(Void());
515 return;
516 }
517
518 auto task = Valdi::makeShared<RemoteModulePrefetchTask>();
519
520 for (const auto& dependency : manifest->pb.dependencies()) {
521 task->enter();
522 loadModuleAsyncInner(StringCache::getGlobal().makeString(dependency),
523 processedModules,
524 loadType,
525 [=](auto result) { task->leave(result); });
526 }
527
528 auto includeSources = loadType == ResourceManagerLoadModuleType::Sources ||
529 loadType == ResourceManagerLoadModuleType::SourcesAndAssets;
530 auto includeAssets = loadType == ResourceManagerLoadModuleType::Assets ||
531 loadType == ResourceManagerLoadModuleType::SourcesAndAssets;
532
533 if (includeSources) {
534 task->enter();
535 _remoteModuleManager->loadModule(bundleName, [=](auto result) {
536 if (result) {
537 bundle->setLoadedArchiveIfNeeded(result.value());
538 }
539 task->leave(result);
540 });
541 }
542
543 if (includeAssets) {
544 task->enter();
545 _remoteModuleManager->loadResources(bundleName, [=](auto result) { task->leave(result); });
546 }
547
548 task->notify(std::move(onComplete));
549}
550
551void ResourceManager::addListener(Valdi::IResourceManagerListener* listener) {
552 std::lock_guard<Mutex> guard(_mutex);

Callers 1

loadModuleAsyncMethod · 0.95

Calls 15

getGlobalFunction · 0.85
hasRemoteArchiveMethod · 0.80
getRegisteredManifestMethod · 0.80
makeStringMethod · 0.80
loadResourcesMethod · 0.80
endMethod · 0.65
insertMethod · 0.65
enterMethod · 0.65
loadModuleMethod · 0.65
valueMethod · 0.65
VoidClass · 0.50

Tested by

no test coverage detected