Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.8KB

  1. #if UNITY_JOBS
  2. using Svelto.DataStructures;
  3. using Unity.Jobs;
  4. using Svelto.Common;
  5. namespace Svelto.ECS.SveltoOnDOTS
  6. {
  7. /// <summary>
  8. /// Note sorted jobs run in serial
  9. /// </summary>
  10. /// <typeparam name="Interface"></typeparam>
  11. /// <typeparam name="SequenceOrder"></typeparam>
  12. public abstract class SortedJobifiedEnginesGroup<Interface, SequenceOrder> : IJobifiedEngine
  13. where SequenceOrder : struct, ISequenceOrder where Interface : class, IJobifiedEngine
  14. {
  15. protected SortedJobifiedEnginesGroup(FasterList<Interface> engines)
  16. {
  17. _name = "SortedJobifiedEnginesGroup - " + this.GetType().Name;
  18. _instancedSequence = new Sequence<Interface, SequenceOrder>(engines);
  19. }
  20. public JobHandle Execute(JobHandle inputHandles)
  21. {
  22. var sequenceItems = _instancedSequence.items;
  23. JobHandle combinedHandles = inputHandles;
  24. using (var profiler = new PlatformProfiler(_name))
  25. {
  26. for (var index = 0; index < sequenceItems.count; index++)
  27. {
  28. var engine = sequenceItems[index];
  29. using (profiler.Sample(engine.name))
  30. combinedHandles = engine.Execute(combinedHandles);
  31. }
  32. }
  33. return combinedHandles;
  34. }
  35. public string name => _name;
  36. readonly string _name;
  37. readonly Sequence<Interface, SequenceOrder> _instancedSequence;
  38. }
  39. public abstract class
  40. SortedJobifiedEnginesGroup<Interface, Parameter, SequenceOrder> : IJobifiedGroupEngine<Parameter>
  41. where SequenceOrder : struct, ISequenceOrder where Interface : class, IJobifiedEngine<Parameter>
  42. {
  43. protected SortedJobifiedEnginesGroup(FasterList<Interface> engines)
  44. {
  45. _name = "SortedJobifiedEnginesGroup - " + this.GetType().Name;
  46. _instancedSequence = new Sequence<Interface, SequenceOrder>(engines);
  47. }
  48. public JobHandle Execute(JobHandle combinedHandles, ref Parameter param)
  49. {
  50. var sequenceItems = _instancedSequence.items;
  51. using (var profiler = new PlatformProfiler(_name))
  52. {
  53. for (var index = 0; index < sequenceItems.count; index++)
  54. {
  55. var engine = sequenceItems[index];
  56. using (profiler.Sample(engine.name))
  57. combinedHandles = engine.Execute(combinedHandles, ref param);
  58. }
  59. }
  60. return combinedHandles;
  61. }
  62. public string name => _name;
  63. readonly string _name;
  64. readonly Sequence<Interface, SequenceOrder> _instancedSequence;
  65. }
  66. }
  67. #endif