UnloadResourceAsync (#766)

* Add `UnloadResourcesAsync` to handle threaded unloading.
Make `UnloadResources` non-async.
Add common `UnloadResourcesProcess` to handle the actual unloading.

* Clang again

* Add priority argument to `UnloadResourcesAsync`
This commit is contained in:
Malkierian
2024-12-18 09:27:03 -05:00
committed by GitHub
parent b7e715e60a
commit 0aa813dbd3
2 changed files with 23 additions and 10 deletions
+20 -10
View File
@@ -342,24 +342,34 @@ void ResourceManager::DirtyResources(const ResourceFilter& filter) {
});
}
void ResourceManager::UnloadResources(const ResourceFilter& filter) {
mThreadPool->submit_task([this, filter]() -> void {
auto list = GetArchiveManager()->ListFiles(filter.IncludeMasks, filter.ExcludeMasks);
for (const auto& key : *list.get()) {
UnloadResource({ key, mDefaultCacheOwner, mDefaultCacheArchive });
}
});
}
void ResourceManager::DirtyResources(const std::string& searchMask) {
DirtyResources({ { searchMask }, {}, mDefaultCacheOwner, mDefaultCacheArchive });
}
void ResourceManager::UnloadResourcesAsync(const std::string& searchMask, BS::priority_t priority) {
UnloadResourcesAsync({ { searchMask }, {}, mDefaultCacheOwner, mDefaultCacheArchive }, priority);
}
void ResourceManager::UnloadResourcesAsync(const ResourceFilter& filter, BS::priority_t priority) {
mThreadPool->submit_task([this, filter]() -> void { UnloadResourcesProcess(filter); }, priority);
}
void ResourceManager::UnloadResources(const std::string& searchMask) {
UnloadResources({ { searchMask }, {}, mDefaultCacheOwner, mDefaultCacheArchive });
}
void ResourceManager::UnloadResources(const ResourceFilter& filter) {
UnloadResourcesProcess(filter);
}
void ResourceManager::UnloadResourcesProcess(const ResourceFilter& filter) {
auto list = GetArchiveManager()->ListFiles(filter.IncludeMasks, filter.ExcludeMasks);
for (const auto& key : *list.get()) {
UnloadResource({ key, mDefaultCacheOwner, mDefaultCacheArchive });
}
}
std::shared_ptr<ArchiveManager> ResourceManager::GetArchiveManager() {
return mArchiveManager;
}
+3
View File
@@ -95,6 +95,8 @@ class ResourceManager {
void DirtyResources(const ResourceFilter& filter);
void UnloadResources(const std::string& searchMask);
void UnloadResources(const ResourceFilter& filter);
void UnloadResourcesAsync(const std::string& searchMask, BS::priority_t priority = BS::pr::normal);
void UnloadResourcesAsync(const ResourceFilter& filter, BS::priority_t priority = BS::pr::normal);
bool OtrSignatureCheck(const char* fileName);
bool IsAltAssetsEnabled();
@@ -102,6 +104,7 @@ class ResourceManager {
protected:
std::shared_ptr<std::vector<std::shared_ptr<IResource>>> LoadResourcesProcess(const ResourceFilter& filter);
void UnloadResourcesProcess(const ResourceFilter& filter);
std::variant<ResourceLoadError, std::shared_ptr<IResource>> CheckCache(const ResourceIdentifier& identifier,
bool loadExact = false);
std::shared_ptr<File> LoadFileProcess(const ResourceIdentifier& identifier,