- Fix TSAN warnings when FGCObject is destroyed from a worker thread while holding a gc scope guard
#jira UE-175467
#rb kevin.macaulayvacher
[CL 33454750 by danny couture in ue5-main branch]
We expose the previously private, and unused HasScriptObjectsChunk method to the IODispatcher, as multiple codepaths are relying on this path to determine if the IoDispatcher is being used at runtime to load from chunks.
#jira UE-206417
#rb Per.Larsson
[FYI] Francis.Hurteau
[CL 31615213 by kevin macaulayvacher in ue5-main branch]
This allows you to attach an automatic fix to any error or warning that may arise from eg. validation.
#jira none
#rb Julien.StJean
#ushell-cherrypick of 31124509 by gabriel.wreczycki
[CL 31126352 by ben hoffman in ue5-main branch]
Before Boot -> PIE
FPackageName::DoesPackageExistEx called 191284 times takes 16.45s in total
After Boot -> PIE
FPackageName::DoesPackageExistEx called 191743 times takes 1.61s in total
The majority of the 1.6s (1s) is from calling DoesPackageExistEx before the AssetRegistry has initialized and can provide a fast path. The 180K calls afterwards consume a total of 600ms compared to before, which took 15s.
The original DoesPackageExistEx code checked for package existence on the filesystem, and at the same time found the case matching package name (the casing the file system uses for the package name). This information is known to the AssetRegistry so we can avoid the duplicate work by deferring to the AssetRegistry.
The AssetRegistry needs to initialize itself, and previously did not expose a means to get the Case Matching FNames for Packages which are being used as the keys to AssetPackageData. We add a new overload to IAssetRegistryInterface::TryGetAssetPackageData to allow CoreUObject code to access the another new overload in the AssetRegistry::GetAssetPackageData which returns the case matching FName for the package as an out parameter. Since IAssetRegistryInterface can be used while the AssetRegistry doesn't exist or is still intializing, IAssetRegistryInterface::TryGetAssetPackageData will return UE::AssetRegistry::EExists::Unknown when the asset registry is not yet available. In the Unknown case, we fallback to the original FPackageName::DoesPackageExistEx codepath which reads from disk.
I've made the (Try)GetAssetPackageData methods that only return FAssetPackageData* to use the new implementation that returns a FAssetPackageData* and populates an FName in order to reduce code duplication, however I'm open to changing this if the extra store is a concern. All paths perform the key search in the AssetRegistry's CachedAssetPackageData map.
#jira UE-204062
#rb Matt.Peters
[CL 31055136 by kevin macaulayvacher in ue5-main branch]