Remove bValid from FMetaData and FData return structs; it is redundant with the RawHash/Buffer data already present in those structs.
#preflight 62680b42430b9997ebe0a46d
#rb Devin.Doucette
#rnx
[CL 19923039 by Matt Peters in ue5-main branch]
Stored per object, and can be set from any game code, not just PreReplication
#rb ryan.gerleve, peter.engstrom
#ROBOMERGE-AUTHOR: brian.bekich
#ROBOMERGE-SOURCE: CL 19909058 via CL 19911194 via CL 19911458
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)
[CL 19913111 by brian bekich in ue5-main branch]
It is possible to toggle to the previous/legacy behavior with gc.GCLockBehavior=1.
Legacy behavior:
A giant FGCCSyncObject lock for the complete duration of CollectGarbageInternal.
A giant FUObjectHashTables lock for most of CollectGarbageInternal except the execution of the GetPreGarbageCollectDelegate and GetPostGarbageCollect callbacks.
Giant FGCCSyncObject and FUObjectHashTables locks for IncrementalPurgeGarbage (inluding both UnhashUnreachableObjects and IncrementalDestroyGarbage).
Unchanged behavior:
The GIsGarbageCollecting contract is fuzzy and the behavior is not changed at this point to reduce risk.
GIsGarbageCollecting is set during CollectGarbageInternal.
GIsGarbageCollecting is also set during the IncrementalDestroyGarbage phase of IncrementalPurgeGarbage, but not during UnhashUnreachableObjects. Why???
Many use cases seems to be as simple as to avoid the StaticFindObject asserts, but there are definitely use cases that are harder to reason about like UObject::GetDefaultSubobjectByName, UObject::CanModify, UChildActorComponent::DestroyChildActor, AActor::ProcessEvent, AGroupActor::PostRemove, UEditorEngine::UndoTransaction, UEditorEngine::RedoTransaction, DatasmithRuntime::FSceneImporter, ...
Changed legacy and default behavior:
Move PostReachabilityAnalysis.Broadcast after GatherUnreachableObjects, NotifyUnreachableObjects and ClearWeakReferences.
StaticAllocateObject and the StaticFindObject functions are now checking IsGarbageCollectingAndLockingUObjectHashTables instead of IsGarbageCollecting/IsGarbageCollectingOnGameThread,
but when using the legacy behavior IsGarbageCollectingAndLockingUObjectHashTables should have the same meaning as IsGarbageCollecting.
New default behavior:
Restrict the giant scope of locking FGCCSyncObject and FUObjectHashTables during CollectGarbageInternal to DissolveClusters, VerifyGCAssumptions, PerformReachabilityAnalysis, GatherUnreachableObjects, NotifyUnreachableObjects and ClearWeakReferences.
Remove the giant FGCCSyncObject lock completely during IncrementalPurgeGarbage (including UnhashUnreachableObjects and IncrementalDestroyGarbage).
Remove the giant FUObjectHashTables lock completely during IncrementalDestroyGarbage.
This means BeginDestroy, FinishDestroy, destructors and callbacks are all executed without the giant FGCCSyncObject and FUObjectHashTables locks and they are all relying on existing smaller thread safety locks for for accessing the global uboject array and global hash tables.
#jira UE-145217, UE-144461, FORT-369252
#rb francis.hurteau, danny.couture, robert.manuszewski, robert.millar
#rnx
#ROBOMERGE-OWNER: pj.kack
#ROBOMERGE-AUTHOR: pj.kack
#ROBOMERGE-SOURCE: CL 19898875 via CL 19899297 via CL 19899332 via CL 19899335
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v940-19807014)
[CL 19902015 by pj kack in ue5-main branch]
Saves ~400ms from asset data gatherer during editor startup, which is not on current critical path, for an internal project. Probably saves bit of critical path time in runtime startup.
#preflight 62664b911a71643e8b8806e8
[CL 19899015 by Johan Torp in ue5-main branch]
#preflight 6262023aa2579b4c772bfc75
#ROBOMERGE-AUTHOR: keith.yerex
#ROBOMERGE-SOURCE: CL 19865362 via CL 19865432 via CL 19866497 via CL 19868767 via CL 19869044
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v940-19807014)
[CL 19874250 by keith yerex in ue5-main branch]
#rb Sebastian.Nordgren
#rnx
#preflight 62629097a2579b4c773d4d26
- Note that the size of disk we return is the payload's compressed size, which should probably be renamed in the package trailer to SizeOnDisk since we don't keep a record of it once the payload is virtualized (as we don't really know if a virtualization backend might change the compression of the payload while it is being stored etc)
[CL 19863102 by paul chipchase in ue5-main branch]
Remove the now-unnecessary duplicates to remove the warning.
#jira UE-149739
#rb Francis.Hurteau
#rnx
#preflight 626186166119a1a496ac8c3d
[CL 19855349 by Matt Peters in ue5-main branch]
- test-specific targets and modules are constructed by RulesAssembly which removes a lot of spaghetti code
- no more excluding the Tests folder by default which is guaranteed to mislead users #fyi Jon.Nabozny
- test compilation in Tests is controlled through WITH_LOW_LEVEL_TESTS
- preparation code for switching tests between Catch2 / TestAutomation Fmwk
Nightly LLT PF 6260431391376845adeb4c40
#rnx
#preflight 62602d50dd47b4ad2173c30b
[CL 19834665 by chris constantinescu in ue5-main branch]
Do not pop when peeking flush requests, they are removed from the GT
#rb CarlMagnus.Nordin, PJ.Kack
#jira UE-148465
#preflight 625d71b848670f31a61e9e95
[CL 19832325 by Francis Hurteau in ue5-main branch]