No Description
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.

JobTests_CombineDependencies.cs 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using NUnit.Framework;
  2. using Unity.Collections;
  3. using Unity.Jobs;
  4. namespace Unity.Jobs.Tests.ManagedJobs
  5. {
  6. internal class JobTests_CombineDependencies : JobTestsFixtureBasic
  7. {
  8. struct ArrayJob1 : IJob
  9. {
  10. public NativeArray<int> data;
  11. public void Execute()
  12. {
  13. data[0] = data[0] + 1;
  14. }
  15. }
  16. struct ArrayJob2 : IJob
  17. {
  18. public NativeArray<int> a;
  19. public NativeArray<int> b;
  20. public void Execute()
  21. {
  22. a[0] = a[0] + 100;
  23. b[0] = b[0] + 100;
  24. }
  25. }
  26. [Test]
  27. public void CombineDependenciesWorks()
  28. {
  29. var arrayA = new NativeArray<int>(2, Allocator.Persistent);
  30. var arrayB = new NativeArray<int>(2, Allocator.Persistent);
  31. var jobA = new ArrayJob1 {data = arrayA};
  32. var jobAHandle = jobA.Schedule();
  33. var jobB = new ArrayJob1 {data = arrayB};
  34. var jobBHandle = jobB.Schedule();
  35. var combinedHandle = JobHandle.CombineDependencies(jobAHandle, jobBHandle);
  36. var job2 = new ArrayJob2
  37. {
  38. a = arrayA,
  39. b = arrayB
  40. };
  41. job2.Schedule(combinedHandle).Complete();
  42. for (int i = 0; i < arrayA.Length; ++i)
  43. {
  44. Assert.AreEqual(arrayA[0], arrayB[0]);
  45. }
  46. arrayA.Dispose();
  47. arrayB.Dispose();
  48. }
  49. public void DeepCombineDependencies(int depth, int arraySize)
  50. {
  51. var arrays = new NativeArray<int>[arraySize];
  52. for (var i = 0; i < arrays.Length; i++)
  53. {
  54. arrays[i] = new NativeArray<int>(1, Allocator.Persistent);
  55. arrays[i][0] = 0;
  56. }
  57. var handles = new NativeArray<JobHandle>(arrays.Length, Allocator.Persistent);
  58. var previousJobHandle = new JobHandle();
  59. for (var i = 0; i < depth; i++)
  60. {
  61. for (var a = 0; a != arrays.Length; a++)
  62. {
  63. var job = new ArrayJob1 {data = arrays[a]};
  64. handles[a] = job.Schedule(previousJobHandle);
  65. }
  66. var combinedHandle = JobHandle.CombineDependencies(handles);
  67. var job2 = new ArrayJob2
  68. {
  69. a = arrays[0],
  70. b = arrays[1]
  71. };
  72. previousJobHandle = job2.Schedule(combinedHandle);
  73. }
  74. previousJobHandle.Complete();
  75. Assert.AreEqual(100 * depth + depth, arrays[0][0]);
  76. Assert.AreEqual(100 * depth + depth, arrays[1][0]);
  77. for (var i = 2; i < arrays.Length; i++)
  78. Assert.AreEqual(depth, arrays[i][0]);
  79. for (var a = 0; a != arrays.Length; a++)
  80. arrays[a].Dispose();
  81. handles.Dispose();
  82. }
  83. [Test]
  84. public void DeepCombineDependenciesWorks()
  85. {
  86. DeepCombineDependencies(5, 21);
  87. }
  88. }
  89. }