Also fix a memory leak when doing unversioned serialization of properties with destructors and default values: "loading as zero" doesn't call the destructor on the value being overwritten, and so isn't safe to use for properties that require destruction.
#rb Devin.Doucette, Robert.Manuszewski
[CL 26706988 by andrew scheidecker in ue5-main branch]
Like JS, JSON does not directly support FP specials in its numeric literal syntax. However, JS has Infinity and NaN global variables, and JSON does not have anything like that.
To work around the omission, this change makes the JSON formatter encode FP specials as a tagged string in the form:
"Number:+inf"
"Number:-inf"
"Number:-nan:0x123"
"Number:+nan:0xabc"
This change also gets rid of the special case that tried to print floats as integers as it invoked UB to cast an out-of-range float to an int.
#rb Francis.Hurteau
[CL 26704226 by andrew scheidecker in ue5-main branch]
- Allows callees of LoadPackageAsync to be notified when serialization is done so they can schedule the next load right from the async loading thread without having to pay for a round-trip to the game-thread
- Add UnattendedAsyncLoading test as a sample of how this feature can be used
- Add thread-safety tests for LoadPackageAsync
- Can be exercised using a cooked client build with the following command-line
-ExecCmds="Automation RunTest System.Engine.Loading.UnattendedAsyncLoadingTest+System.Engine.Loading.ThreadSafeAsyncLoadingTest;Quit"
#jira UE-188744
#rb Francis.Hurteau
[CL 26569151 by danny couture in ue5-main branch]
- Saves a lot of memory when tons of actors remapping are used for world partition. Multiple GB in PIE is not unheard of.
- Add LLM counter specifically for LinkerInstancingContext memory usage
- Make sure everything is thread-safe and ready for async loading thread usage
#jira UE-185799
#rb Francis.Hurteau
[CL 26543720 by danny couture in ue5-main branch]
[FYI] Maxime.Mercier
Original CL Desc
-----------------------------------------------------------------
Better support of reinstantiation of subobjects in CDOs
Also reuse same pattern on instances to fix more subobject nesting issues
[CL 26523238 by maxime mercier in ue5-main branch]
1) Fix for test package names not starting with proper prefix
2) Fix incompatible value that is passed into CheckValidObject to NOT be the outer of the fallback objecte. The incompatible value now gets renamed by CheckValidObject, and renaming the outer of the fallback object would break the test.
#rnx
#rb Joe.Pribele
[CL 26474125 by Matt Peters in ue5-main branch]
#rb Per.Larsson
### Problem
- The IoStore does not support bulkdata payloads being compressed at the package level, instead compression will be applied to the .ucas file when it is created, this means that we don't really use the SizeOnDisk value for cooked bulkdata as it should always be the same as the in memory size.
- Some code paths in the editor however might support compression in the workspace domain and so use the SizeOnDisk value, such as calling ::GetCopy.
- In this cause the size being passed to the IoDispatcher would be INDEX_NONE, which the system converts to "please load the entire .ubulk section of the package"
- The buffer returned to the user would eventually be trimmed to the correct in memory size so this bug would be hard to notice, the only downside is wasting time loading more data off disk than required.
### Fix
- AsyncLoading2 now sets the SizeOnDisk to be a valid value (the size of the payload in memory) if we are not using runtime only bulkdata (USE_RUNTIME_BULKDATA) so when GetSizeOnDisk is called, it returns the correct value and we only load the payload we want.
- An assert has been added to make sure that the payload is not compressed (in which case the size would be wrong and we could end up overrunning valid memory) even though the flag is removed when cooking and it should not be possible to get to that point.
[CL 26404304 by paul chipchase in ue5-main branch]