Use pools

It feels hacky, but it works regardless. The GC should be working as
hard as it was beforehand.
This commit is contained in:
code-explorer786
2024-06-27 10:25:37 +07:00
parent b58a6bb8d6
commit 26105a64f1

View File

@@ -13,6 +13,7 @@ import arc.scene.ui.*;
import arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import arc.util.pooling.*;
import mindustry.*; import mindustry.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
@@ -278,8 +279,10 @@ public class LCanvas extends Table{
}); });
processedJumps.sort((a,b) -> a.jumpUIBegin - b.jumpUIBegin); processedJumps.sort((a,b) -> a.jumpUIBegin - b.jumpUIBegin);
Seq<JumpCurve> occupiers = new Seq<JumpCurve>(); Seq<JumpCurve> occupiers = Pools.obtain(Seq.class, Seq<JumpCurve>::new);
Bits occupied = new Bits(); Bits occupied = Pools.obtain(Bits.class, Bits::new);
occupiers.clear();
occupied.clear();
for(int i = 0; i < processedJumps.size; i++){ for(int i = 0; i < processedJumps.size; i++){
JumpCurve cur = processedJumps.get(i); JumpCurve cur = processedJumps.get(i);
occupiers.retainAll(e -> { occupiers.retainAll(e -> {
@@ -291,15 +294,21 @@ public class LCanvas extends Table{
occupiers.add(cur); occupiers.add(cur);
occupied.set(h); occupied.set(h);
} }
occupied.clear();
occupiers.clear();
Pools.free(occupied);
Pools.free(occupiers);
} }
private int getJumpHeight(int index, Seq<JumpCurve> occupiers, Bits occupied){ private int getJumpHeight(int index, Seq<JumpCurve> occupiers, Bits occupied){
JumpCurve jmp = processedJumps.get(index); JumpCurve jmp = processedJumps.get(index);
if(jmp.markedDone) return jmp.predHeight; if(jmp.markedDone) return jmp.predHeight;
// TODO: optimize for LESS cloning Seq<JumpCurve> tmpOccupiers = Pools.obtain(Seq.class, Seq<JumpCurve>::new).clear();
Seq<JumpCurve> tmpOccupiers = new Seq<JumpCurve>(occupiers); Bits tmpOccupied = Pools.obtain(Bits.class, Bits::new);
Bits tmpOccupied = new Bits(); tmpOccupiers.set(occupiers);
tmpOccupied.clear();
tmpOccupied.set(occupied); tmpOccupied.set(occupied);
int max = -1; int max = -1;
@@ -320,6 +329,11 @@ public class LCanvas extends Table{
jmp.predHeight = occupied.nextClearBit(max + 1); jmp.predHeight = occupied.nextClearBit(max + 1);
jmp.markedDone = true; jmp.markedDone = true;
tmpOccupied.clear();
tmpOccupiers.clear();
Pools.free(tmpOccupied);
Pools.free(tmpOccupiers);
return jmp.predHeight; return jmp.predHeight;
} }