Commit Graph

83 Commits

Author SHA1 Message Date
Robert Manuszewski
20505f9b6e Fixing a crash when re-enetering FlushAsyncLoading in the same callstack when there was a synchronuous load request from async loading callbacks.
[CL 2550784 by Robert Manuszewski in Main branch]
2015-05-14 11:04:37 -04:00
Ankit Khare
e589eb7ceb UE-14297 - Hang on Launch On HTML5 projects - ( 4.8 blocker)
fixing an issue for single thread mode where the IOSystem is starved and loading goes into an infinite loop,  this change may be pushing other issues under the rug, but for now checking it in as it has a limited fallout, if any.

#codereview Robert.Manuszewski@epicgames.com

[CL 2547766 by Ankit Khare in Main branch]
2015-05-12 16:10:26 -04:00
Robert Manuszewski
ce61c6c71c Making FAsyncLoadingThread::InsertPackage (more) thread safe
[CL 2538742 by Robert Manuszewski in Main branch]
2015-05-06 03:24:17 -04:00
Mike Fricker
290f5e6d82 Miscellaneous fixes for Clang on windows
These changes allow UE4 to compile and run (in Debug) on Clang 3.7 alpha (r231657 only!)
  - Disabled editor source file discovery (crashes with Clang currently)
  - Disabled FThreadIdleStats in UnrealHeaderTool with Clang on Windows (causes link errors due to inlining bugs with Clang and DLL imports)
  - Use MSVC linker by default, even when compiling with Clang (can be tweaked with bAllowClangLinker)
  - Enabled shadow variable warnings on Windows with Clang
  - Limited max size of reflection code source files (Clang on Windows crashes with huge source files)
  - Fixed UE4 deprecation warnings not showing up when using Clang on Windows
  - Make sure initialization list order only triggers a warning on Clang for Windows

Other changes:
  - Fixed issues with pushed pragmas not getting popped (PRAGMA_ENABLE_DEPRECATION_WARNINGS)
  - Removed EMIT_DEPRECATED_WARNING_MESSAGE, wasn't used
  - Fixed various third party library includes not being treated as system headers (prevents compiler warnings)

To test Clang on Windows (beta!!):

- Get latest UE4 main branch (4.9)

- Install LLVM+Clang for Windows version r231657.  It's a quick install, you don't need to compile anything yourself.

- Open UEBuildWindows.cs, and change bCompileWithClang to true.  Be careful not to check that in.  We'll probably make this config-driven later, after the Clang toolchain gets more mature.

- Switch to Debug Editor configuration.  (See below for more info.)

- Rebuild the game or engine

Notes:

- You must use Clang r231657 (3.7.0 alpha).  There are no other releases that I've found that are able to compile UE4 successfully.  Most of the newer releases crash during compiling, and older releases aren't able to digest Windows header files well enough.

- Compiling in Development currently will not work due to bugs with Clangs handling of inlining and DLL exports.  Monolithic builds should work, though.

- Occasionally you may see runtime crashes (stack overflows or access violations) when running UE4 compiled with Clang on Windows.  These may very well be bugs in Clang (remember, we're using an alpha release of Clang 3.7.0.)  Unfortunately without better debugger support, it can be difficult to workaround these

- When debugging, you will only have functions and line numbers, no variables or parameters.  Clang only has preliminary support for Microsoft's PDB format currently.
XGE is fully supported with Clang on Windows.  Best case rebuild times I've seen are 3.5 minutes in Debug.

- Shared PCHs aren't supported yet (similar to on Mac and Linux), so iterative compile times may be slower compared to Visual C++.  However the Clang compiler is actually quite fast for rebuilds, probably because of missing debug info though.

- There may be some compiler warnings that are different between Mac/Linux and Windows.  We haven't done a line-by-line comparison yet.

- Build products and executables for Clang and VC++ overlap on disk.  So you have to rebuild to switch back and forth.  Sorry.

- Clang on Windows has a few bugs that we've had to work around.  You might see some strange things from time to time.  Every new release of Clang has different behavior on Windows.

- We still use the VC++ Linker, even when compiling using Clang.  The new Clang linker (lld.exe) can be enabled with bAllowClangLinker but it will crash when linking some modules.  It also doesn't produce usable debug symbols by Visual Studio (yet).

#codereview mikolaj.sieluzycki

[CL 2532260 by Mike Fricker in Main branch]
2015-04-30 14:24:21 -04:00
Robert Manuszewski
0c7bc6f9da Fixing BulkData serialization when cooking compressed packages
#codereview Ori.Cohen

[CL 2528304 by Robert Manuszewski in Main branch]
2015-04-28 06:48:18 -04:00
Ori Cohen
c2171a5af4 Fix single use bulk data unloading during cook of multiple levels and crashing. UE-13215
#codereview Daniel.Lamb, Robert.Manuszewski
#lockdown Zachary.EdgertonJones

[CL 2523175 by Ori Cohen in Main branch]
2015-04-23 15:44:19 -04:00
Robert Manuszewski
a398dfdfa7 Fixing huge streaming time regressions in 4.8. Reduced FN startup time by 8 seconds.
- Removed lambdas and TFunctions from FArchiveAsync (this was the culprit of the regression)
- Added THREADSAFE_UOBJECTS to easily disable UObject multithreading safety and potential overhead (not that it even exists)
- Moved a few functions so that they're not called too often (they come up in profiles)

UE-14282

#lockdown Zachary.EdgertonJones

[CL 2522599 by Robert Manuszewski in Main branch]
2015-04-23 07:47:56 -04:00
Marc Audy
ba008b0bdf Fix shadow variables
[CL 2521205 by Marc Audy in Main branch]
2015-04-22 11:37:49 -04:00
Bob Tellez
c482c47909 [AUTOMERGE]
#UE4 Wrapped expensive stat gathering in #if LOOKING_FOR_PERF_ISSUES and added a yield when flushing async loading in a multithreaded environment

--------
Integrated using branch Ue4-To-UE4-Fortnite-Simple (reversed) of change#2519624 by Bob.Tellez on 2015/04/21 14:14:05.

[CL 2519625 by Bob Tellez in Main branch]
2015-04-21 14:14:25 -04:00
Jaroslaw Surowiec
07e576f6b8 Stats - Cleaned AsyncIo stats
[CL 2519507 by Jaroslaw Surowiec in Main branch]
2015-04-21 13:10:11 -04:00
Robert Manuszewski
2e0c7f3d5e Fixing IsInAsyncLoadingThread to be consisent with the old single-threaded path.
[CL 2519240 by Robert Manuszewski in Main branch]
2015-04-21 10:36:14 -04:00
Maciej Mroz
0b95ee59cf Signature CRC32 for Blueprint
#codereview Dan.Oconnor, Phillip.Kavan

[CL 2518229 by Maciej Mroz in Main branch]
2015-04-20 16:45:16 -04:00
Ori Cohen
b68cd294bc custom alignment for bulk data
#codereview Gil.Gribb

[CL 2517837 by Ori Cohen in Main branch]
2015-04-20 13:10:43 -04:00
Bob Tellez
6656e19ecd [AUTOMERGE]
#UE4 Reducing TickAsyncLoadingGameThread stat spam by opening the stat section at callsites.

--------
Integrated using branch Ue4-To-UE4-Fortnite-Simple (reversed) of change#2517702 by Bob.Tellez on 2015/04/20 11:44:04.

[CL 2517706 by Bob Tellez in Main branch]
2015-04-20 11:45:53 -04:00
Robert Manuszewski
dfd2792985 Fixing typo in WarnIfTimeLimitExceeded code
[CL 2515792 by Robert Manuszewski in Main branch]
2015-04-17 09:37:05 -04:00
Robert Manuszewski
4f18d6d8d5 Async loading improvements:
- changed an assert to a warning when calling LoadObject in PostLoad
- added an opt-out ability for IsTimeLimitExceeded warning
- added descriptions of the current work performed during async loading for IsTimeLimitExceeded warning
- made sure we don't check IsTimeLimitExceeded when we already know we timed out.

[CL 2515757 by Robert Manuszewski in Main branch]
2015-04-17 09:16:30 -04:00
Bob Tellez
1c98e9c74e [AUTOMERGE]
#UE4 Fix to reduce calls to Seconds() to improve performance on VMs. UE-13843

--------
Integrated using branch Ue4-To-UE4-Fortnite-Simple (reversed) of change#2515314 by Bob.Tellez on 2015/04/16 21:33:22.

[CL 2515315 by Bob Tellez in Main branch]
2015-04-16 21:34:23 -04:00
Robert Manuszewski
3297a8b715 Only warn about async loading time limit exceeded in cooked builds
[CL 2510195 by Robert Manuszewski in Main branch]
2015-04-13 07:51:00 -04:00
Marc Audy
a509e739ad Fix shadow variables
[CL 2508945 by Marc Audy in Main branch]
2015-04-10 16:47:24 -04:00
Robert Manuszewski
d1201e6e35 Thread safety fixes for multiple classes related to UObjects:
- FUnresolvedStructTracker
- FUniqueObjectGuid
- FLinkerManager
- FStringAssetReference
- FUObjectAnnotationDense

[CL 2507007 by Robert Manuszewski in Main branch]
2015-04-09 13:27:12 -04:00
Jaroslaw Surowiec
db1988e512 Core - Misc tweaks to async loading blocking time stat
[CL 2506677 by Jaroslaw Surowiec in Main branch]
2015-04-09 08:20:36 -04:00
Jaroslaw Surowiec
d29b68766d Core - Async stats improvements
[CL 2506584 by Jaroslaw Surowiec in Main branch]
2015-04-09 05:37:17 -04:00
Robert Manuszewski
d282635dcd Adding VerifyAsyncLoadAssumptions console command to check if flags on UObjects get properly reset after async loading has finished.
[CL 2506557 by Robert Manuszewski in Main branch]
2015-04-09 05:15:26 -04:00
Robert Manuszewski
e7fe718ecc AsyncLoading stats improvements (reducing stats spam and hitches):
- removed counters so that async loading stats group can be verbose again
- added a new async loading stats group for game-thread-only stats tracking
- made IsTimeLimitExceeded more aggresive with warnings when the limit is exceeded (reduced the warning threshold from 2.5 to 1.5 * limit)
- made LinkerLoad stats verbose again
- IO blocking will now be reported if it happens on game thread only

[CL 2506386 by Robert Manuszewski in Main branch]
2015-04-09 02:41:14 -04:00
PaulEremeeff
c9a246101e PR #1013: Fixing PVS-Studio warnings. (Contributed by PaulEremeeff)
Some files have been omitted and will be submitted with modified corrections

[CL 2505544 by Dan Oconnor in Main branch]
2015-04-08 14:46:25 -04:00