3
3
using Collections . Pooled ;
4
4
using CommunityToolkit . HighPerformance ;
5
5
using Schedulers ;
6
+ using Schedulers . Utils ;
6
7
7
8
// ReSharper disable once CheckNamespace
8
9
namespace Arch . Core ;
@@ -11,12 +12,6 @@ namespace Arch.Core;
11
12
12
13
public partial class World
13
14
{
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
-
20
15
/// <summary>
21
16
/// A cache used for the parallel queries to prevent list allocations.
22
17
/// </summary>
@@ -106,6 +101,7 @@ public void InlineParallelChunkQuery<T>(in QueryDescription queryDescription, in
106
101
{
107
102
var archetypeSize = archetype . ChunkCount ;
108
103
var part = new RangePartitioner ( Environment . ProcessorCount , archetypeSize ) ;
104
+ var handle = SharedJobScheduler . Schedule ( ) ;
109
105
foreach ( var range in part )
110
106
{
111
107
var job = pool . Get ( ) ;
@@ -114,23 +110,21 @@ public void InlineParallelChunkQuery<T>(in QueryDescription queryDescription, in
114
110
job . Chunks = archetype . Chunks ;
115
111
job . Instance = innerJob ;
116
112
117
- var jobHandle = SharedJobScheduler . Schedule ( job ) ;
113
+ var jobHandle = SharedJobScheduler . Schedule ( job , handle ) ;
114
+ SharedJobScheduler . Flush ( jobHandle ) ;
118
115
JobsCache . Add ( job ) ;
119
- JobHandles . Add ( jobHandle ) ;
120
116
}
121
117
122
118
// Schedule, flush, wait, return.
123
- var handle = SharedJobScheduler . CombineDependencies ( JobHandles . AsSpan ( ) ) ;
124
- SharedJobScheduler . Flush ( ) ;
125
- handle . Complete ( ) ;
119
+ SharedJobScheduler . Flush ( handle ) ;
120
+ SharedJobScheduler . Wait ( handle ) ;
126
121
127
122
for ( var index = 0 ; index < JobsCache . Count ; index ++ )
128
123
{
129
124
var job = Unsafe . As < ChunkIterationJob < T > > ( JobsCache [ index ] ) ;
130
125
pool . Return ( job ) ;
131
126
}
132
127
133
- JobHandles . Clear ( ) ;
134
128
JobsCache . Clear ( ) ;
135
129
}
136
130
}
@@ -156,6 +150,7 @@ public JobHandle ScheduleInlineParallelChunkQuery<T>(in QueryDescription queryDe
156
150
157
151
// Cast pool in an unsafe fast way and run the query.
158
152
var query = Query ( in queryDescription ) ;
153
+ var handle = SharedJobScheduler . Schedule ( ) ;
159
154
foreach ( var archetype in query . GetArchetypeIterator ( ) )
160
155
{
161
156
var archetypeSize = archetype . ChunkCount ;
@@ -170,16 +165,14 @@ public JobHandle ScheduleInlineParallelChunkQuery<T>(in QueryDescription queryDe
170
165
Instance = innerJob
171
166
} ;
172
167
173
- var jobHandle = SharedJobScheduler . Schedule ( job ) ;
174
- JobHandles . Add ( jobHandle ) ;
168
+ var jobHandle = SharedJobScheduler . Schedule ( job , handle ) ;
169
+ SharedJobScheduler . Flush ( jobHandle ) ;
175
170
}
176
171
}
177
172
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 . Flush ( handle ) ;
175
+ SharedJobScheduler . Wait ( handle ) ;
183
176
return handle ;
184
177
}
185
178
}
0 commit comments