This represents UE4/Main @17774255, Release-5.0 @17791557 and Dev-PerfTest @17789485
[CL 17794212 by aurel cordonnier in ue5-release-engine-test branch]
Changes control of the feature to uniformly require the -LazyLoadImports commandline switch.
Ensures that serialization of ObjectPtr fields for blueprints doesn't differ between raw pointer (Object) fields. INSTANCES of these types were already serialized identically (wrote out the same type identifier in tagged property serialization), but the serialized type descriptors (used by blueprints) write out the FFieldClass::GetName, and that differed between FObjectProperty and FObjectPtrProperty, and this change addresses that discrepancy.
Allow ObjectPtr fields to be instantiated in place of Object fields in script/blueprint in editor builds while ensuring that they are serialization compatible and considered equal types.
#rb francis.hurteau
#rb marc.audy
#fyi devin.doucette
#fyi robert.manuszewski
#preflight 605cbf325e87c40001b74f5b
[CL 15827275 by Zousar Shaker in ue5-main branch]
-Compile in lazy resolve functionality for editor binaries
-Add "-LazyResolveAllImports" commandline switch to allow lazy RESOLVE of all wrapped object references
-Functionality confirmed: load default map in ShooterGame Editor, cook ShooterGame, load LumenReflectiveTest in FortGPUTestbed, load default map and P_Construct in Frosty
-Renamed "-DisableLoadingAllImports" to "-LazyLoadAllImports" commandline switch to allow lazy LOAD of all wrapped object references and ensured it works with AsyncLoading code path
-Non functional when combined with lazy resolve - will be worked on afterwards
-Added CPU timing scopes to measure performance impact of lazy resolve
Fixed lazy resolve bugs:
-Ensure null check on an unresolved object reference resolves the object reference (a non-null unresolved reference can become a null resolved reference)
-Ensure hash of an unresolved object reference resolves the object reference and hashes the resultant address (otherwise we can't reliably ensure hash consistency in the face of object redirection or stale references)
-Avoid using package name hash internally as it immediately manifested in hash collisions on a moderately sized project
-Ensure StaticFindObjectFastInternal instead of StaticFindObjectFast to ensure we can find/resolve not fully loaded objects
-Ensure UObjectRedirectors are handled when resolving wrapped object pointers
-Ensure we handle the possibility that a package has been partially loaded and we may not find our target object within it because the object hasn't been created yet
Automated testing:
-Adding hash consistency and redirector resolve tests to ObjectPtr unit tests
#rb devin.doucette
[CL 15571874 by Zousar Shaker in ue5-main branch]
-Add "-LazyResolveAllImports" commandline switch to allow lazy RESOLVE of all wrapped object references
-Functionality confirmed: load default map in ShooterGame Editor, cook ShooterGame, load LumenReflectiveTest in FortGPUTestbed, load default map and P_Construct in Frosty
-Renamed "-DisableLoadingAllImports" to "-LazyLoadAllImports" commandline switch to allow lazy LOAD of all wrapped object references and ensured it works with AsyncLoading code path
-Non functional when combined with lazy resolve - will be worked on afterwards
-Added CPU timing scopes to measure performance impact of lazy resolve
Fixed lazy resolve bugs:
-Ensure null check on an unresolved object reference resolves the object reference (a non-null unresolved reference can become a null resolved reference)
-Ensure hash of an unresolved object reference resolves the object reference and hashes the resultant address (otherwise we can't reliably ensure hash consistency in the face of object redirection or stale references)
-Avoid using package name hash internally as it immediately manifested in hash collisions on a moderately sized project
-Ensure StaticFindObjectFastInternal instead of StaticFindObjectFast to ensure we can find/resolve not fully loaded objects
-Ensure UObjectRedirectors are handled when resolving wrapped object pointers
-Ensure we handle the possibility that a package has been partially loaded and we may not find our target object within it because the object hasn't been created yet
Automated testing:
-Adding hash consistency and redirector resolve tests to ObjectPtr unit tests
#rb devin.doucette
[CL 15514386 by Zousar Shaker in ue5-main branch]
Note: This keeps the fix for incorrect nested DefaultSceneRoot ICH override template names in place, since that was a separate issue.
#rnx
#rb None
#jira UE-87133, UESP-4238
#fyi Jon.Nabozny
[CL 14897958 by Phillip Kavan in ue5-main branch]
Change summary:
- Reordered FComponentOverrideRecord struct fields so that the key is serialized before the template object. Archetype lookups on the template object are now dependent on the key being valid as we now route these through the record table.
- ICH override template object serialization is now deferred in non-EDL builds (i.e. editor) as part of loading the Blueprint class asset. This ensures that the ICH override record key is valid in older assets before we let the linker instance the export object for the ICH override template object on load; per the above, this depends on a successful archetype lookup for its instantiation.
- Modified the signature of UClass::FindArchetype() to include an additional ObjectFlags input argument.
- Revised GetArchetypeFromRequiredInfoImpl() to now route ICH override template object archetype lookups through the owning class in place of the "old way" of doing a brute force subobject search through the outer class chain, which would sometimes fail and fall back to incorrectly return the archetype class's default object, resulting in data loss issues on load.
- Revised UBlueprintGeneratedClass::FindArchetype() to route ICH override template object archetype lookups through the parent class hierarchy, using the ICH override record's key to retrieve the original template as the basis for finding a match. This ensures that lookups won't fail due to things like SCS variable name changes in the base class and also that we now can properly handle archetype lookups for ICH records that override an inherited default scene root.
#jira UE-87133
#rb Marc.Audy
[CL 14886445 by Phillip Kavan in ue5-main branch]
Create a new interface IPackageResourceManager that handles all attempts to load packages from storage. The default implementation passes through to loading from IFileManager. Future implementations will load from other services such as the EditorDomain and TargetDomain.
Add FPackagePath class that holds a LocalFilePath or LongPackageName, or a relative path to a package under a mounted content root (which can be converted into either the LocalFilePath or LongPackageName).
Modify LinkerLoad, BulkData, and AsyncLoader to use FPackagePath and IResourceManager.
Modify UPackage and FLinkerLoad to have a FPackagePath instead of a Filename.
#rb Paul.Chipchase, CarlMagnus.Nordin, Francis.Hurteau, Devin.Doucette
#rn Major Core
[CL 14814912 by Matt Peters in ue5-main branch]
[FYI] Dan.Oconnor,Robert.Manuszewski
#ROBOMERGE-SOURCE: CL 12687021 via CL 12687035 via CL 12687039 via CL 12687044 via CL 12687050 via CL 12687054
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v675-12543919)
[CL 12687066 by bob tellez in Main branch]
#rb none
#rnx
#jira
#ROBOMERGE-SOURCE: CL 12686476 via CL 12686478 via CL 12686480 via CL 12686482 via CL 12686483 via CL 12686484
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v675-12543919)
[CL 12686486 by dan oconnor in Main branch]
#UE4 Fix load errors not being supressed for subclasses of BlueprintGeneratedClass
#ROBOMERGE-AUTHOR: Robert.Manuzsewski
#ROBOMERGE-SOURCE: CL 12676447 via CL 12676451 via CL 12676453
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v675-12543919)
[CL 12676455 by bob tellez in Main branch]
#rb CopyUp
#ROBOMERGE-OWNER: ryan.vance
#ROBOMERGE-AUTHOR: ryan.vance
#ROBOMERGE-SOURCE: CL 12149088 via CL 12150247
#ROBOMERGE-BOT: (v659-12123632)
[CL 12150618 by ryan vance in Main branch]
This prevents non-component subobjects that were trashed during compilation from sticking around forever with a bad AsyncLoading flag, causing corruption or crashes
Some of these fixes aren't currently needed because CDOs are hacked to never have NeedPostLoadSubobjects set on them, but this is safer in case we change that later
#jira UE-88129
#rb dan.oconnor
#ROBOMERGE-SOURCE: CL 12010702 in //UE4/Release-4.25/... via CL 12010728
#ROBOMERGE-BOT: RELEASE (Release-4.25Plus -> Main) (v656-11643781)
[CL 12010754 by ben zeigler in Main branch]
#rnx
#rb none
#ROBOMERGE-OWNER: ryan.durand
#ROBOMERGE-AUTHOR: ryan.durand
#ROBOMERGE-SOURCE: CL 10869210 via CL 10869511 via CL 10869900
#ROBOMERGE-BOT: (v613-10869866)
[CL 10870549 by ryan durand in Main branch]