From bc705aa7a001dee29544ae56639a8488305ed5c5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 24 Sep 2020 18:24:43 -0400 Subject: [PATCH] Minor allocation optimization --- .../annotations/entity/EntityProcess.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java index 231823ec9a..88b3b30438 100644 --- a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java +++ b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java @@ -1,6 +1,5 @@ package mindustry.annotations.entity; -import arc.*; import arc.files.*; import arc.func.*; import arc.struct.*; @@ -520,7 +519,7 @@ public class EntityProcess extends BaseProcessor{ //add free code to remove methods - always at the end //this only gets called next frame. if(first.name().equals("remove") && ann.pooled()){ - mbuilder.addStatement("$T.app.post(() -> $T.free(this))", Core.class, Pools.class); + mbuilder.addStatement("mindustry.gen.Groups.queueFree(($T)this)", Poolable.class); } builder.addMethod(mbuilder.build()); @@ -587,6 +586,17 @@ public class EntityProcess extends BaseProcessor{ //write clear groupsBuilder.addMethod(groupClear.build()); + //add method for pool storage + groupsBuilder.addField(FieldSpec.builder(ParameterizedTypeName.get(Seq.class, Poolable.class), "freeQueue", Modifier.PRIVATE, Modifier.STATIC).initializer("new Seq<>()").build()); + + //method for freeing things + MethodSpec.Builder groupFreeQueue = MethodSpec.methodBuilder("queueFree") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .addParameter(Poolable.class, "obj") + .addStatement("freeQueue.add(obj)"); + + groupsBuilder.addMethod(groupFreeQueue.build()); + //add method for resizing all necessary groups MethodSpec.Builder groupResize = MethodSpec.methodBuilder("resize") .addParameter(TypeName.FLOAT, "x").addParameter(TypeName.FLOAT, "y").addParameter(TypeName.FLOAT, "w").addParameter(TypeName.FLOAT, "h") @@ -595,6 +605,11 @@ public class EntityProcess extends BaseProcessor{ MethodSpec.Builder groupUpdate = MethodSpec.methodBuilder("update") .addModifiers(Modifier.PUBLIC, Modifier.STATIC); + //free everything pooled at the start of each updaet + groupUpdate + .addStatement("for($T p : freeQueue) $T.free(p)", Poolable.class, Pools.class) + .addStatement("freeQueue.clear()"); + //method resize for(GroupDefinition group : groupDefs){ if(group.spatial){