#if UNITY_JOBS using Svelto.DataStructures; using Unity.Jobs; using Svelto.Common; namespace Svelto.ECS.SveltoOnDOTS { /// /// Note sorted jobs run in serial /// /// /// public abstract class SortedJobifiedEnginesGroup : IJobifiedEngine where SequenceOrder : struct, ISequenceOrder where Interface : class, IJobifiedEngine { protected SortedJobifiedEnginesGroup(FasterList engines) { _name = "SortedJobifiedEnginesGroup - " + this.GetType().Name; _instancedSequence = new Sequence(engines); } public JobHandle Execute(JobHandle inputHandles) { var sequenceItems = _instancedSequence.items; JobHandle combinedHandles = inputHandles; using (var profiler = new PlatformProfiler(_name)) { for (var index = 0; index < sequenceItems.count; index++) { var engine = sequenceItems[index]; using (profiler.Sample(engine.name)) combinedHandles = engine.Execute(combinedHandles); } } return combinedHandles; } public string name => _name; readonly string _name; readonly Sequence _instancedSequence; } public abstract class SortedJobifiedEnginesGroup : IJobifiedGroupEngine where SequenceOrder : struct, ISequenceOrder where Interface : class, IJobifiedEngine { protected SortedJobifiedEnginesGroup(FasterList engines) { _name = "SortedJobifiedEnginesGroup - " + this.GetType().Name; _instancedSequence = new Sequence(engines); } public JobHandle Execute(JobHandle combinedHandles, ref Parameter param) { var sequenceItems = _instancedSequence.items; using (var profiler = new PlatformProfiler(_name)) { for (var index = 0; index < sequenceItems.count; index++) { var engine = sequenceItems[index]; using (profiler.Sample(engine.name)) combinedHandles = engine.Execute(combinedHandles, ref param); } } return combinedHandles; } public string name => _name; readonly string _name; readonly Sequence _instancedSequence; } } #endif