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.

87 lines
2.8KB

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