Initial version of the debugger
- currently compiled by StateTreeModule and StateTreeEditorModule using WITH_STATETREE_DEBUGGER
- currently not exposed to UI by StateTree settings 'bUseDebugger'
- in this version only one instance per asset can be debugged
- using Trace services to read events generated by statetree instances.
- can connect to any traces (Editor, Client, Server) as long as the compiled statetree matches
#rb mieszko.zielinski
#preflight 641088a30e1f02786b509663
[CL 24639409 by yoan stamant in ue5-main branch]
- Fixed bug where delayed transitions from events were not triggered properly.
#preflight 6410735f5819afacafa78ce4
[CL 24635553 by mikko mononen in ue5-main branch]
Also removed the Mutable named functions and replaced with the constness being part of the template.
#preflight 63ea4fbaec50523134d85665
[CL 24197313 by stephen holmes in ue5-main branch]
- refactored the property binding representation, editor binding shave now more structure, and removed intermediate representation
- added functionality to resolve property paths agains a known value
- added instanced struct and object indirection types
- added editor functionality to allow to bind to further than first level of properties
- refactored editor tree traversal, allow to access values too
- simplified statetree node ui
- requires to recompile trees, bumped version
#rb Mieszko.Zielinski
#preflight 63e6204ff15c83b79312aca5
[CL 24117094 by mikko mononen in ue5-main branch]
* Ran IWYU on ~170 plugins to remove includes not needed. Public api still keep old includes inside #if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_2
#preflight 63d09351574ab9cae4670216
#rb none
[CL 23844750 by henrik karlsson in ue5-main branch]
- Added ability for tasks to request transitions
- Added buffered transition requests
- Added callback method to FStateTreeTaskBase which is called during transition triggering
- Allow FStateTreeStateLink to be added to tasks and conditions (resolved automatically during compile)
#jira UE-174250
#preflight 63ca7ee8977c62635603afcb
[CL 23815873 by mikko mononen in ue5-main branch]
- Calling GetStateTreeRunStatus() on unintialized instance is not error anymore, returns failed
- Made UStateTreeComponent::GetStateTreeRunStatus() to return failed instead of unset to be consistent with FStateTreeExecutionContext
- Allow to access execution state directly from instance data without exec context
- Do no crete exec context in UStateTreeComponent when sending events
#jira UE-173207
#preflight 63bfec4af02e72c08cab1811
[CL 23661828 by mikko mononen in ue5-main branch]
- added class picker style new node picker with search box and categories
#rb Mieszko.Zielinski
#preflight 63be76206e6e8d4662c637fb
[CL 23643504 by mikko mononen in ue5-main branch]
- Added global tasks which are run at tree level similar to evals (will replace evals)
- allows initial state selection to rely in calculated data (e.g. world conditions)
- allows better reuse of existing logic
- Call evaluator stop in reverse order
- Use some uses of mutable instanced structs
- Copy bindings along with ST nodes
- Remove bindings when removing a ST node, so that undo can restore them
#rb Yoan.StAmant
#preflight 63bd2c7968068a8bd6395d2c
[CL 23632408 by mikko mononen in ue5-main branch]
List of optimizations and changes:
* Token stream structure
* Split token stream into strong-only and a mixed (weak+strong) stream
* Split token stream into a builder and a tighter view class which reduces sizeof(UClass)
* Implemented ref-counted token stream view sharing
* Removed Class and Outer from token stream
* Allow empty token streams (enabled by removing Class/Outer) to avoid touching token stream data
* Placed ARO (AddReferencedObjects) last to reduce per object cache thrashing, improve control flow predicability and avoid reading the last EndOfPointer and EndOfStream tokens
* FPrefetchingObjectIterator that bring in Class/Outer, class' tokenstream view and the first token data ahead of time
* Decode token bitfield once and ahead of time
* Reference queues and batch processing
* Introduced bounded queues: ref arrays -> unvalidated refs -> validated (non-null / non-permanent) refs
* Split all these queues for killable vs immutable references
* Stack-living references still handled synchronously. With removal of Class/Outer (prefetched ahead of time) few instances remain outside of ARO calls.
* Outer queues hold 32 items and get flushed when full.
* AddReferencedObjects (ARO) optimizations
* Misc optimizations in many ARO implementations
* New FReferenceCollector API to queue up ARO references (AddStableReference), old sync API (HandleObjectReference) still available
* New AddPropertyReferences traversal that replaces SerializeBin and PropertyValueIterator
* 4.5x faster than PropertyValueIterator
* Uses CLASSCAST dispatch instead of virtual SerializeItem dispatch.
* Step towards new unified token stream replacement shared by class token processing, structs and ARO
* Replaced StructUtil::AddReferencedObjects with AddPropertyReferences traversal, ~8x speedup and collects more references for CitySample
* Parallelism
* Single long-running task per worker
* Improved work-stealing / load-balancing, workers can steal full blocks, ARO calls and initial references
* Queue up slow ARO calls to improve load balancing and avoid late stragglers. Motivated by certain ARO calls taking over 2ms for a few specific objects.
* Kick tasks manually to avoid ParallelFor end synchronization
* FGCObject
* Initial reference collector runs in parallel with mark phase
* New FGCObject constructor API (AddStableNativeReferencesOnly) to opt-in to initial reference collection, used by StreamableManager
* Same constructor API allows FGCObjects to defer registration until they become active (RegisterLater), reduces number of active GCObjects
* Reduced memory usage
* Allocate reached objects in scratch pages (FWorkBlock) and reuse processed blocks, instead of swapping two big TArray<UObject*> per worker
* Reduced sizeof(UClass)
* Shareable token streams
* Misc optimizations
* New API to test if an object is in the permanent object pool. Old API read two global pointers for every visited reference.
* Fixed signed integer usage in GUObjectArray lookup that led to bad codegen
* FPropertyIterator optimizations
* SerializeBin optimizations
* Other changes
* Moved many helpers into UE::GC namespace
* Replaced TFastReferenceCollector API with simplified CollectReferences call. Needed to break this API any way.
* Introduced FGCInternals to avoid forward-declaring TFastReferenceCollector and depend on the options enum in common headers
* Moved and outlined code from GarbageCollection.h / FastReferenceCollector.h to GarbageCollection.cpp
* Moved GC History and Garbage Reference Tracking into a synchronous TDebugReachabilityProcessor
* Removed PersistentGarbage flag since it wasn't used in practice
* Improved const correctness
#rb robert.millar,robert.manuszewski,pj.kack
#preflight 63945bf45624e6da5ec85f88
#jira UE-169791
[CL 23475562 by johan torp in ue5-main branch]