- Data read from stdout/stderr is now writen to buffers posted in a Channel<T>, which correctly supports await and cancellation (unlike AsynchronousPipe).
- Public StdOut/StdErr streams are now a custom stream implementation that reads from the channel and copies data into the output buffer.
- Buffer objects are sized at 1024 bytes and pooled, which should be enough to accomodate most output lines without splitting.
- When the process is disposed, we now terminate the entire process tree. The tasks left reading from the child process terminate asynchronously.
Tested in a command line and WinForms app (by forcing SupportsJobObjects to return false) with asynchronous and synchronous reads to ensure code does not deadlock.
#preflight 61e062b3ed50181feb511e39
[CL 18601195 by Ben Marsh in ue5-main branch]
- Now uses the custom C++ Perforce library developed for Horde. This removes dependencies on an installed P4.EXE tool, improves performance, and paves the way to cross-platform support via command line invocations.
- As part of the migration to the new Perforce library, the codebase now uses async/await extensively instead of background threads, and supports a proper cancellation path rather than aborting threads.
- ILogger is now used for writing log files.
- Started converting to use of nullable annotations.
#preflight none
[CL 18511154 by Ben Marsh in ue5-main branch]
On systems with multiple process groups, distribute launched processes explicitly between groups to improve overall utiliization.
#jira none
[CL 17392872 by jonathan adamczewski in ue5-main branch]
Process.StartTime raises an exception on non-windows platforms if the process has already exited, so cache it immediately after starting the FrameworkProcess
Process.TotalProcessorTime raises an exception on non-windows if the process has also exited, so don't do that
#rb none
#rnx
[CL 16863633 by joe kirchoff in ue5-main branch]
#fyi joe.kirchoff
Original CL Desc
-----------------------------------------------------------------
UnrealBuildTool: Use process directly to get wall clock execution time
Process.StartTime raises an exception on non-windows platforms if the process has already exited, so cache it immediately after starting the FrameworkProcess
#rb none
#rnx
[CL 16863370 by joe kirchoff in ue5-main branch]
Process.StartTime raises an exception on non-windows platforms if the process has already exited, so cache it immediately after starting the FrameworkProcess
#rb none
#rnx
[CL 16863209 by joe kirchoff in ue5-main branch]
#fyi Joe.Kirchoff
Original CL Desc
-----------------------------------------------------------------
UnrealBuildTool: Use process directly to get wall clock execution time
#rb none
#rnx
[CL 16857196 by joe kirchoff in ue5-main branch]