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.

88 lines
2.7KB

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