Add check similar to pthread_rw on Mac/Linux to make sure Windows FRWLock is not held when destroyed
Fix the one place that we were actually copying a RWLock
Introduce a new TDontCopy wrapper that can be used to make a class member an exclusive entity of that class. (Contributed by Steve.Robb)
#rnx
#rb Steve.Robb
[CL 14675525 by danny couture in ue5-main branch]
- Removed overly cautious check because it can't be implemented properly on Clang without enabling AVX2 code generation... which we definitely don't want!
#rb Francis.Hurteau
[CL 14428216 by danny couture in ue5-main branch]
- Load the proper delay-loaded dll depending on instruction support of the current platform.
- Replaced reciprocal approximation with proper division.
- This improves performance as the division is faster than a reciprocal with refinement on recent CPUs.
- This improves quality as the division provides higher precision.
- It fixes a nasty non-determinism in the DDC because reciprocal yield different results on different CPUs.
- Configured so that AVX2 and SSE2 results are exactly the same (see config.h).
- More details can be found in config.h
- 80.773s -> 47.547s for single-threaded 8k texture compression
- 18m34s -> 14m50s for recompressing all textures of Reverb P_World during level loading.
#rb Francis.Hurteau, Geoff.Evans
[CL 14362917 by danny couture in ue5-main branch]
1) Fix Visual Studio Profiling PerfAPI build script pathing for modern era of Visual Studio, add IDEDir to UBT for base path of PerfAPI lib/headers
2) Add initial support for Superluminal instrumentation API, if it's installed and -Superluminal is passed on the command line. Dial back color saturation a bit to go easier on the eyes (my eyes!!). This is WIP support, we are technically violating the API rules by feeding in changing strings to the same profile marker. So, with this change you can see the instrumentation markers in the timeline, but using all the event features in Superluminal causes weird artifacts like event strings changing as you use profiler features. Subsequent change will attempt to pry apart static and instance string data in the instrumentation, as this is a common trope across profilers (and non-PC platforms).
Updated FExternalProfiler API to forward along color information from the instrumentation. This is a minor breaking change as it's very unlikely there are direct callers of these APIs.
[CL 14321510 by geoff evans in ue5-main branch]
Add CookSettings MemoryMinFreeVirtual to garbage collect when AvailableVirtual is too low.
Normalize the names of the 4 CookSettings.Memory settings variables.
Change boolean expression of the 4 memory values to be (freevirtual OR freephysical) AND (usedvirtual OR usedphysical), which seems like the most useful way to combine them.
#rnx
#rb Daniel.Lamb, Zousar.Shaker
#ROBOMERGE-SOURCE: CL 13120351 via CL 13120373 via CL 13120383 via CL 13120389
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v687-13115495)
[CL 13120395 by matt peters in Main branch]
Speculative fix, disabling monitor mode crash reporter client for everything but the editor.
#rb stefan.boberg
#rnx
#ROBOMERGE-SOURCE: CL 13113584 via CL 13113586 via CL 13113587 via CL 13113588
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v686-13045012)
[CL 13113589 by johan berg in Main branch]
#rb rune.stubbe
#jira none
#rnx
#ROBOMERGE-SOURCE: CL 13007135 in //UE4/Release-4.25/... via CL 13007150 via CL 13007159
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v682-12900288)
[CL 13007166 by jeff newquist in Main branch]
Normal read requests have this behavior, but size requests were not respecting this, which caused problems when the constructor launches a callback on another thread and then immediately calls WaitCompletion, such as in the callback lambda inside FFileCacheHandle::FFileCacheHandle / PushCompletedRequest.
#rb rune.stubbe
#jira none
#rnx
#ROBOMERGE-SOURCE: CL 12974187 in //UE4/Release-4.25/... via CL 12974195 via CL 12974203
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v682-12900288)
[CL 12974208 by jeff newquist in Main branch]
#jira
#ROBOMERGE-SOURCE: CL 12870520 via CL 12870524 via CL 12870525
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v681-12776863)
[CL 12870526 by ben marsh in Main branch]
#jira UE-91803
#rb none
#lockdown cristina.riverun
#ROBOMERGE-SOURCE: CL 12696485 in //UE4/Release-4.25/... via CL 12696487 via CL 12696511
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v676-12543919)
[CL 12696548 by patrick laflamme in Main branch]
Details:
The 4.24.3 analytics shows many unexplained exit codes, 23 647 at the moment. Normally, the Editor will exit with code 0 if everything when well, 3 or 1 if it gracefully handled a crash, 255 it was aborted. But we also see may others like the following predominent cases below:
-1073741819 => STATUS_ACCESS_VIOLATION => 8081 cases
-1073740791 => STATUS_STACK_BUFFER_OVERRUN => 7581 cases
-1073740771 => STATUS_FATAL_USER_CALLBACK_EXCEPTION => 5357 cases
On Windows, the crash reporting system should catch and report STATUS_ACCESS_VIOLATION and then exit with code 3 (as the error was handled). For example, if you add a null pointer dereference(STATUS_ACCESS_VIOLATION) in the code, the crash reporter handle it and the Editor exit with code 3. Just like if you enter 'debug crash' console command, the editor gracefully handle the error and exit with code 3. But if you move the null pointer dereference in the crash handler thread itself, the error is not handled and the Editor exits with code STATUS_ACCESS_VIOLATION. This hints that our crash reporting thread is likely crashing in the wild. It would be useful to isolate those cases from the other cases and keep count of how many times this happens.
#jira UE-91803 - Analytics hints that crash reporting and crash handling crashes themselves.
#rb Jamie.Dale
#lockdown cristina.riverun
#ROBOMERGE-SOURCE: CL 12695027 in //UE4/Release-4.25/... via CL 12695062 via CL 12695098
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v676-12543919)
[CL 12695136 by patrick laflamme in Main branch]
#rb stefan.boberg
#jira none
#ROBOMERGE-SOURCE: CL 12670885 in //UE4/Release-4.25/... via CL 12670887 via CL 12670888
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v675-12543919)
[CL 12672054 by jonas meyer in Main branch]
#jira UE-91493 - CrashReportClientEditor may send a report owned by another concurrent instance losing the exit code in the process
#rb Jamie.Dale
#ROBOMERGE-SOURCE: CL 12598059 in //UE4/Release-4.25/... via CL 12598060 via CL 12598062
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v675-12543919)
[CL 12598063 by patrick laflamme in Main branch]