This represents UE4/Main @17774255, Release-5.0 @17791557 and Dev-PerfTest @17789485
[CL 17794212 by aurel cordonnier in ue5-release-engine-test branch]
Thread1 can call TaskEvent.Trigger(), which unlocks the task, and before it calls verify(TryExecute()), Thread2 starts TaskEvent retraction (because Thread2 started waiting on its subsequent task), and first it gets execution permission. then it proceeds to complete retraction as the task is unlocked but not executed yet. Now Thread1 tries to get execution permissions and fails, but can proceed as normal. its job is done
[FYI] devin.doucette
#ROBOMERGE-AUTHOR: andriy.tylychko
#ROBOMERGE-SOURCE: CL 17770492 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v881-17767770)
#ROBOMERGE[STARSHIP]: UE5-Release-Engine-Staging Release-5.0
[CL 17770496 by andriy tylychko in ue5-release-engine-test branch]
A nested task is a task that must be completed before its parent task is completed, w/o blocking a worker that executes the parent task. It's an analog to `DontCompleteUntil` feature of the old TaskGraph
#rb Francis.Hurteau Danny.Couture
#ROBOMERGE-SOURCE: CL 17014883 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v839-17012307)
[CL 17014884 by andriy tylychko in ue5-release-engine-test branch]
* refactored integration with low-level tasks to fix task retraction: high-level tasks now store task body because there's no way to store it in low-level task and to implement retraction
* added timeout support for task retraction
* removed tests that deadlocks with task retraction
#rb francis.hurteau danny.couture
#ROBOMERGE-SOURCE: CL 16938828 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v838-16927207)
[CL 16938834 by andriy tylychko in ue5-release-engine-test branch]
* an ability to specify task prerequisites, either TTask or FTaskEvent
* redesigned FTaskEvent so it can be used as a prerequisite
* a helper function `Tasks::Prerequisites()` to specify multiple prerequisites
* added `Tasks::Wait()` function to wait for multiple tasks
* unit- and perf-tests
#rb danny.couture
#ROBOMERGE-SOURCE: CL 16333765 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v804-16311228)
[CL 16333773 by andriy tylychko in ue5-release-engine-test branch]
* the thread was removed and its surrounding was cleaned up a bit
* ENamedThreads::StatsThread (and relatives) deprecated
* support for single-threaded execution looks a bit messy because it still have to be based on the old TaskGraph API until we convert the game thread to the new API (which will be one of the very last things)
* despite the direct usage of ENamedThreads::StatsThread from an external code is highly unlikely, to preserve backward compatiblity internally TaskGraph redirects all remaining stats tasks to StatsPipe
#rb martin.ridgers
[CL 15794122 by Andriy Tylychko in ue5-main branch]
Pipe is a chain of tasks that are executed one after another and so can be used for synchronised access to a shared resource. Should be used instead of dedicated threads as much as possible.
#rb steve.robb arne.schober
[CL 15700278 by Andriy Tylychko in ue5-main branch]