Skip to content

Commit f430bf6

Browse files
committed
Remove ThreadLocal in builders
1 parent 0009c5e commit f430bf6

2 files changed

Lines changed: 20 additions & 24 deletions

File tree

src/main/java/com/github/elebras1/flecs/ObserverBuilder.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,23 @@ public class ObserverBuilder {
1111
private final Flecs world;
1212
private final Arena arena;
1313
private final MemorySegment desc;
14-
private int termCount = 0;
15-
private int eventCount = 0;
16-
private static final long TERM_SIZE = ecs_term_t.layout().byteSize();
17-
private static final int MAX_EVENTS = 8;
14+
private int termCount;
15+
private int eventCount;
1816
private Query.IterCallback iterCallback;
1917
private Query.RunCallback runCallback;
2018
private Query.EntityCallback entityCallback;
19+
private Iter iter;
20+
private static final long TERM_SIZE = ecs_term_t.layout().byteSize();
21+
private static final int MAX_EVENTS = 8;
2122

2223
public ObserverBuilder(Flecs world) {
2324
this.world = world;
2425
this.arena = Arena.ofConfined();
2526
this.desc = ecs_observer_desc_t.allocate(this.arena);
27+
this.termCount = 0;
28+
this.eventCount = 0;
2629
this.desc.fill((byte) 0);
30+
this.iter = null;
2731
}
2832

2933
public ObserverBuilder(Flecs world, String name) {
@@ -159,16 +163,13 @@ public ObserverBuilder observerFlags(int flags) {
159163
public FlecsObserver iter(Query.IterCallback callback) {
160164
this.iterCallback = callback;
161165

162-
final ThreadLocal<Iter> iterHolder = new ThreadLocal<>();
163166
MemorySegment callbackStub = ecs_iter_action_t.allocate(it -> {
164-
Iter iter = iterHolder.get();
165-
if (iter == null) {
166-
iter = new Iter(it, this.world);
167-
iterHolder.set(iter);
167+
if (this.iter == null) {
168+
this.iter = new Iter(it, this.world);
168169
} else {
169170
iter.setNativeIter(it);
170171
}
171-
callback.accept(iter);
172+
callback.accept(this.iter);
172173
}, this.world.arena());
173174

174175
ecs_observer_desc_t.callback(this.desc, callbackStub);
@@ -179,16 +180,13 @@ public FlecsObserver iter(Query.IterCallback callback) {
179180
public FlecsObserver run(Query.RunCallback callback) {
180181
this.runCallback = callback;
181182

182-
final ThreadLocal<Iter> iterHolder = new ThreadLocal<>();
183183
MemorySegment callbackStub = ecs_run_action_t.allocate(it -> {
184-
Iter iter = iterHolder.get();
185-
if (iter == null) {
186-
iter = new Iter(it, this.world);
187-
iterHolder.set(iter);
184+
if (this.iter == null) {
185+
this.iter = new Iter(it, this.world);
188186
} else {
189187
iter.setNativeIter(it);
190188
}
191-
callback.accept(iter);
189+
callback.accept(this.iter);
192190
}, this.world.arena());
193191

194192
ecs_observer_desc_t.run(this.desc, callbackStub);

src/main/java/com/github/elebras1/flecs/SystemBuilder.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class SystemBuilder {
1717
private Query.RunCallback runCallback;
1818
private Query.EntityCallback entityCallback;
1919
private long phase = 0;
20+
private Iter iter;
2021

2122
public SystemBuilder(Flecs world) {
2223
this.world = world;
@@ -199,17 +200,14 @@ public FlecsSystem iter(Query.IterCallback callback) {
199200

200201
public FlecsSystem run(Query.RunCallback callback) {
201202
this.runCallback = callback;
202-
203-
final ThreadLocal<Iter> iterHolder = new ThreadLocal<>();
203+
204204
MemorySegment callbackStub = ecs_run_action_t.allocate(it -> {
205-
Iter iter = iterHolder.get();
206-
if (iter == null) {
207-
iter = new Iter(it, this.world);
208-
iterHolder.set(iter);
205+
if (this.iter == null) {
206+
this.iter = new Iter(it, this.world);
209207
} else {
210-
iter.setNativeIter(it);
208+
this.iter.setNativeIter(it);
211209
}
212-
callback.accept(iter);
210+
callback.accept(this.iter);
213211
}, this.world.arena());
214212

215213
ecs_system_desc_t.run(this.desc, callbackStub);

0 commit comments

Comments
 (0)