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.

74 lines
2.7KB

  1. #if UNITY_JOBS
  2. using Svelto.DataStructures;
  3. using Unity.Jobs;
  4. using Svelto.Common;
  5. namespace Svelto.ECS.Extensions.Unity
  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)) combinedHandles = engine.Execute(combinedHandles);
  30. }
  31. }
  32. return combinedHandles;
  33. }
  34. public string name => _name;
  35. readonly string _name;
  36. readonly Sequence<Interface, SequenceOrder> _instancedSequence;
  37. }
  38. public abstract class SortedJobifiedEnginesGroup<Interface, Parameter, SequenceOrder>: IJobifiedGroupEngine<Parameter>
  39. where SequenceOrder : struct, ISequenceOrder where Interface : class, IJobifiedEngine<Parameter>
  40. {
  41. protected SortedJobifiedEnginesGroup(FasterList<Interface> engines)
  42. {
  43. _name = "SortedJobifiedEnginesGroup - "+this.GetType().Name;
  44. _instancedSequence = new Sequence<Interface, SequenceOrder>(engines);
  45. }
  46. public JobHandle Execute(JobHandle combinedHandles, ref Parameter param)
  47. {
  48. var sequenceItems = _instancedSequence.items;
  49. using (var profiler = new PlatformProfiler(_name))
  50. {
  51. for (var index = 0; index < sequenceItems.count; index++)
  52. {
  53. var engine = sequenceItems[index];
  54. using (profiler.Sample(engine.name)) combinedHandles = engine.Execute(combinedHandles, ref param);
  55. }
  56. }
  57. return combinedHandles;
  58. }
  59. public string name => _name;
  60. readonly string _name;
  61. readonly Sequence<Interface, SequenceOrder> _instancedSequence;
  62. }
  63. }
  64. #endif