Mirror of Svelto.ECS because we're a fan of it
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.8KB

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