33using Collections . Pooled ;
44using CommunityToolkit . HighPerformance ;
55using Schedulers ;
6+ using Schedulers . Utils ;
67
78// ReSharper disable once CheckNamespace
89namespace Arch . Core ;
@@ -11,12 +12,6 @@ namespace Arch.Core;
1112
1213public partial class World
1314{
14-
15- /// <summary>
16- /// A list of <see cref="JobHandle"/> which are pooled to avoid allocs.
17- /// </summary>
18- private NetStandardList < JobHandle > JobHandles { get ; }
19-
2015 /// <summary>
2116 /// A cache used for the parallel queries to prevent list allocations.
2217 /// </summary>
@@ -106,6 +101,7 @@ public void InlineParallelChunkQuery<T>(in QueryDescription queryDescription, in
106101 {
107102 var archetypeSize = archetype . ChunkCount ;
108103 var part = new RangePartitioner ( Environment . ProcessorCount , archetypeSize ) ;
104+ var handle = SharedJobScheduler . Schedule ( ) ;
109105 foreach ( var range in part )
110106 {
111107 var job = pool . Get ( ) ;
@@ -114,23 +110,21 @@ public void InlineParallelChunkQuery<T>(in QueryDescription queryDescription, in
114110 job . Chunks = archetype . Chunks ;
115111 job . Instance = innerJob ;
116112
117- var jobHandle = SharedJobScheduler . Schedule ( job ) ;
113+ var jobHandle = SharedJobScheduler . Schedule ( job , handle ) ;
114+ SharedJobScheduler . ReadToFlush ( jobHandle ) ;
118115 JobsCache . Add ( job ) ;
119- JobHandles . Add ( jobHandle ) ;
120116 }
121117
122118 // Schedule, flush, wait, return.
123- var handle = SharedJobScheduler . CombineDependencies ( JobHandles . AsSpan ( ) ) ;
124- SharedJobScheduler . Flush ( ) ;
125- handle . Complete ( ) ;
119+ SharedJobScheduler . ReadToFlush ( handle ) ;
120+ SharedJobScheduler . Wait ( handle ) ;
126121
127122 for ( var index = 0 ; index < JobsCache . Count ; index ++ )
128123 {
129124 var job = Unsafe . As < ChunkIterationJob < T > > ( JobsCache [ index ] ) ;
130125 pool . Return ( job ) ;
131126 }
132127
133- JobHandles . Clear ( ) ;
134128 JobsCache . Clear ( ) ;
135129 }
136130 }
@@ -156,6 +150,7 @@ public JobHandle ScheduleInlineParallelChunkQuery<T>(in QueryDescription queryDe
156150
157151 // Cast pool in an unsafe fast way and run the query.
158152 var query = Query ( in queryDescription ) ;
153+ var handle = SharedJobScheduler . Schedule ( ) ;
159154 foreach ( var archetype in query . GetArchetypeIterator ( ) )
160155 {
161156 var archetypeSize = archetype . ChunkCount ;
@@ -170,16 +165,14 @@ public JobHandle ScheduleInlineParallelChunkQuery<T>(in QueryDescription queryDe
170165 Instance = innerJob
171166 } ;
172167
173- var jobHandle = SharedJobScheduler . Schedule ( job ) ;
174- JobHandles . Add ( jobHandle ) ;
168+ var jobHandle = SharedJobScheduler . Schedule ( job , handle ) ;
169+ SharedJobScheduler . ReadToFlush ( jobHandle ) ;
175170 }
176171 }
177172
178- // Schedule, flush, wait, return.
179- var handle = SharedJobScheduler . CombineDependencies ( JobHandles . AsSpan ( ) ) ;
180- SharedJobScheduler . Flush ( ) ;
181- JobHandles . Clear ( ) ;
182-
173+ // flush, wait, return.
174+ SharedJobScheduler . ReadToFlush ( handle ) ;
175+ SharedJobScheduler . Wait ( handle ) ;
183176 return handle ;
184177 }
185178}
0 commit comments