Attempted to fix FPS drop on Grid sorting, fixes #1674

This commit is contained in:
raoulvdberge
2018-03-08 18:46:26 +01:00
parent 1bd2a44820
commit 1510e27dad
3 changed files with 12 additions and 30 deletions

View File

@@ -11,6 +11,7 @@
- Fixed Disk Manipulator being stuck on unemptiable, non-empty disks (ineternet) - Fixed Disk Manipulator being stuck on unemptiable, non-empty disks (ineternet)
- Fixed orientations of the Portable Grid (TeamSpen210) - Fixed orientations of the Portable Grid (TeamSpen210)
- Fixed crafting event in Crafting Grid being fired twice (raoulvdberge) - Fixed crafting event in Crafting Grid being fired twice (raoulvdberge)
- Attempted to fix FPS drop on Grid sorting (raoulvdberge)
- Disk Manipulator in fluid mode will now extract a bucket at a time instead of 1 mB (or 64 buckets at a time with a Stack Upgrade instead of 64 mB) (raoulvdberge) - Disk Manipulator in fluid mode will now extract a bucket at a time instead of 1 mB (or 64 buckets at a time with a Stack Upgrade instead of 64 mB) (raoulvdberge)
### 1.5.31 ### 1.5.31

View File

@@ -62,8 +62,8 @@ public class GuiGrid extends GuiBase implements IGridDisplay {
public static List<IGridStack> STACKS = new ArrayList<>(); public static List<IGridStack> STACKS = new ArrayList<>();
public static boolean CAN_CRAFT; public static boolean CAN_CRAFT;
private static boolean SCHEDULE_SORT = false; private static final Sorter SORTER = new Sorter();
private Queue<Sorter> sortingQueue = new ArrayDeque<>(); private static boolean SCHEDULE_SORT;
private boolean wasConnected; private boolean wasConnected;
@@ -210,16 +210,7 @@ public class GuiGrid extends GuiBase implements IGridDisplay {
if (SCHEDULE_SORT) { if (SCHEDULE_SORT) {
SCHEDULE_SORT = false; SCHEDULE_SORT = false;
sortingQueue.add(new Sorter(this)); SORTER.startIfPossible(this);
}
Sorter sorter = sortingQueue.peek();
if (sorter != null) {
if (!sorter.isStarted()) {
sorter.start();
} else if (sorter.isDone()) {
sortingQueue.poll();
}
} }
} }

View File

@@ -18,15 +18,10 @@ public class Sorter implements Runnable {
private static final GridSorting SORTING_INVENTORYTWEAKS = new GridSortingInventoryTweaks(); private static final GridSorting SORTING_INVENTORYTWEAKS = new GridSortingInventoryTweaks();
private static final GridSorting SORTING_LAST_MODIFIED = new GridSortingLastModified(); private static final GridSorting SORTING_LAST_MODIFIED = new GridSortingLastModified();
private boolean done; private boolean busy;
private boolean started;
private GuiGrid gui; private GuiGrid gui;
public Sorter(GuiGrid gui) {
this.gui = gui;
}
@Override @Override
public void run() { public void run() {
IGrid grid = gui.getGrid(); IGrid grid = gui.getGrid();
@@ -90,20 +85,15 @@ public class Sorter implements Runnable {
gui.getTabPageRight().visible = grid.getTotalTabPages() > 0; gui.getTabPageRight().visible = grid.getTotalTabPages() > 0;
} }
this.done = true; this.busy = false;
} }
public void start() { public void startIfPossible(GuiGrid gui) {
this.started = true; if (!busy) {
this.busy = true;
this.gui = gui;
new Thread(this, "RS grid sorting").start(); new Thread(this, "RS grid sorting").start();
} }
public boolean isStarted() {
return started;
}
public boolean isDone() {
return done;
} }
} }