Ensure that the Save1 codepath doesn't attempt to lazy load/resolve wrapped object pointers mid-save (which is not permitted).
#rb matt.peters
#rb francis.hurteau
#fyi devin.doucette
[CL 14826094 by Zousar Shaker in ue5-main branch]
This prevent missing property name changed from default when using tagged property serialization for example
Fixed -DiffOnly not calling presave properly, since it shouldn't be called only on the DiffCallstack pass
#rb Matt.Peters
[CL 14822073 by Francis Hurteau 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]
- This stops code compiling fine in the editor then breaking when compiled for a different config.
#rb Martin.Ridgers
#fyi ben.ingram
#rnx
[CL 14812609 by paul chipchase in ue5-main branch]
Changed Save2 to use the old import sorting algo to keep binary consistent between the new and old save algo
Encapsulated "UseUnversionedPropertySerialization" in LinkerSave to set both the archive mode and the necessary package flag
Moved FObjectImportSortHelper to SavePackageUtilities
Cache "s.ProcessPrestreamingRequests" for Save2
#rb Matt.Peters
[CL 14790090 by Francis Hurteau in ue5-main branch]
On Mac the Main thread isn't the Game thread, so this trips the assert in ~FInternalReferenceCollector(), even if the TStrongObjectPtr has been manually Reset prior.
#jira UE-101794
#fyi Alexis.Matte
#rb Steve.Robb
[CL 14787366 by Jamie Dale in ue5-main branch]
This isn't related to any particular bug, but while debugging I found myself confirming that this was not the case - especially since INDEX_NONE may appear to be a valid value for ArrayIndex.
#rb paul.chipchase
[CL 14774958 by sebastian nordgren in ue5-main branch]
- Add protection against async property accessed during async build and postload.
- Split PostLoad into 3 steps with the most part now being made async.
- Make Build/BatchBuild API async when the feature is activated.
- Add a new StaticMesh compilation manager. (This will be refactory later to reduce duplicated code with texture compiler).
- Skip RenderState creation for any static mesh component still being built so they only show up when ready.
- Fixed DistanceField and MeshCard computation that might trigger too soon if fixups are required to RenderData during PostLoad.
- Dynamic priorisation for building and updating static meshes nearest to the viewport.
- Implement different PIE modes, current default is to stall only for mesh that might affect nagivation/collision for players/bots.
- Add a new generic interface for assets being built (still a WIP).
- Add ability in FrontEnd filters to skip serialization of asset being async compiled and refresh when compilation finishes.
- Prevent auto-save while textures and static meshes are being built (same as shaders)
- Logic has been reordered in some Fortnite Building Component to avoid unnecessarily touching static mesh properties.
General Optimizations
- Use cached thumbnails until shaders/textures/static meshes are ready to improve performance and avoid rendering incomplete thumbnails.
DEBUGGING
- Can be forcibly enabled/disabled through command-line via -asyncstaticmeshcompilation=[off, on, paused]
- Can pause staticmesh compilation using Editor.AsyncStaticMeshCompilation = 2 or -asyncstaticmeshcompilation=paused
- Can manually resume a specified amount of paused compilation using Editor.AsyncStaticMeshCompilationResume [Num]
- Can forcibly wait on all compilation using Editor.AsyncStaticMeshCompilationFlushAll
BENCHMARKS
- 2m19s to 17.9s for Loading FortGPUTestbed's LumenTest with an empty local only DDC
- 2h45m to 5mxxs for Loading Reverb's P_World with an empty local only DDC
- 17m29 to 10m27s for Loading Apollo_Terrain_Edit with an empty local only DDC
TESTS
- Loading maps from Reverb, Fortnite, ShooterGame, QAGame, FortGPUTestbed
- Content browser interactions while still under heavy compilation
- Importing with Datasmith / Dataprep
- Working with the new Mesh Modeling Tool
- Shutting down the editor while loading
- Most of EngineTest Test Suite
REFERENCES
- Design https://docs.google.com/document/d/1O4GI1G9AtQN6l0SaGFfXw0DyNhlLunLoEqne5INvxIQ
- Documentation https://docs.google.com/document/d/1KCdFEMhhcsGwfgOisTVwlOwtsmEd7qbB0V6Tc39Gb10
#rb Francis.Hurteau
[CL 14688146 by danny couture in ue5-main branch]
MakeView now has overloads that accept an outer shared buffer that it will hold a reference to and inherit the read-only state from. The view must be contained by the outer shared buffer.
TakeOwnership now has overloads that accept an instance of a type derived from FSharedBuffer::FBufferOwner that will be moved and stored to manage the lifetime of the buffer when a delete function is insufficient.
Functions that create buffers now return pointers instead of references, for more optimal reference counting. ToSharedRef can be called on the return value to convert it to a reference in cases where that is useful.
#jira none
#rb Zousar.Shaker
#rnx
[CL 14680479 by Devin Doucette in ue5-main branch]
* Modified EnableNewSave cvar to use multiple values: 0: disabled, 1: enabled for cook, 2: enabled for uncooked, 3: enabled everywhere
* Added proper Prestream Packages support to Save2 since it isn't something that will be deprecated in the end
* Fixed new package not being saved properly when passing in a Base Object because they aren't properly marked as fully loaded in Save1
* Added a way for SaveConcurrent to use serial save with Save1 for now when not being passed in the SAVE_Concurrent flag
* Switched Save2 traces to use the SaveTimeChannel like Save1
#rb Matt.Peters
[CL 14652312 by Francis Hurteau in ue5-main branch]