From 3306bd2cdc93663e8d91f3c9928192e722798656 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Mon, 26 Sep 2016 01:53:13 +1000 Subject: [PATCH] Performance improvements + Fix packet sending Async flush the changeset (sync flush for undo when needed) - Not any faster, but edits will feel significantly faster Fix incorrect bit mask for fixlighting packet sending --- core/src/main/java/com/boydti/fawe/FaweAPI.java | 2 +- .../main/java/com/boydti/fawe/config/Settings.java | 6 +++--- .../boydti/fawe/object/changeset/FaweChangeSet.java | 12 ++++++++++++ .../main/java/com/sk89q/worldedit/EditSession.java | 7 ++++++- .../main/java/com/sk89q/worldedit/LocalSession.java | 7 ++++--- .../worldedit/extension/platform/CommandManager.java | 9 ++++++--- 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/com/boydti/fawe/FaweAPI.java b/core/src/main/java/com/boydti/fawe/FaweAPI.java index e77547d2..4518fac7 100644 --- a/core/src/main/java/com/boydti/fawe/FaweAPI.java +++ b/core/src/main/java/com/boydti/fawe/FaweAPI.java @@ -431,7 +431,7 @@ public class FaweAPI { NMSRelighter relighter = new NMSRelighter(nmsQueue); for (int x = minX; x <= maxX; x++) { for (int z = minZ; z <= maxZ; z ++) { - relighter.addChunk(x, z, null, 65536); + relighter.addChunk(x, z, null, 65535); count++; } } diff --git a/core/src/main/java/com/boydti/fawe/config/Settings.java b/core/src/main/java/com/boydti/fawe/config/Settings.java index bc3f09a7..89b62db8 100644 --- a/core/src/main/java/com/boydti/fawe/config/Settings.java +++ b/core/src/main/java/com/boydti/fawe/config/Settings.java @@ -106,7 +106,7 @@ public class Settings extends Config { public static boolean COMBINE_STAGES = true; @Comment({ "Higher compression reduces the size of history at the expense of CPU", - "0 = Uncompressed byte array", + "0 = Uncompressed byte array (fastest)", "1 = 1 pass fast compressor (default)", "2 = 2 x fast", "3 = 3 x fast", @@ -115,8 +115,8 @@ public class Settings extends Config { "6 = 1 x medium, 3 x fast", "7 = 1 x high, 1 x medium, 1 x fast", "8 = 1 x high, 1 x medium, 2 x fast", - "9 = 1 x high, 1 x medium, 3 x fast", - "NOTE: If using disk, do some compression as smaller files save faster" + "9 = 1 x high, 1 x medium, 3 x fast (best compression)", + "NOTE: If using disk, do some compression (3+) as smaller files save faster" }) public static int COMPRESSION_LEVEL = 1; @Comment({ diff --git a/core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java b/core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java index fdc66964..6a516e5a 100644 --- a/core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java +++ b/core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java @@ -52,6 +52,18 @@ public abstract class FaweChangeSet implements ChangeSet { return world; } + public boolean flushAsync() { + waiting.incrementAndGet(); + TaskManager.IMP.async(new Runnable() { + @Override + public void run() { + waiting.decrementAndGet(); + flush(); + } + }); + return true; + } + public boolean flush() { try { while (waiting.get() > 0) { diff --git a/core/src/main/java/com/sk89q/worldedit/EditSession.java b/core/src/main/java/com/sk89q/worldedit/EditSession.java index 8a242643..9f2ec78a 100644 --- a/core/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/core/src/main/java/com/sk89q/worldedit/EditSession.java @@ -1182,7 +1182,12 @@ public class EditSession extends AbstractWorld implements HasFaweQueue { queue.flush(); } if (getChangeSet() != null) { - ((FaweChangeSet) getChangeSet()).flush(); + if (Settings.HISTORY.COMBINE_STAGES) { + ((FaweChangeSet) getChangeSet()).flushAsync(); + } else { + ((FaweChangeSet) getChangeSet()).flush(); + } + } } diff --git a/core/src/main/java/com/sk89q/worldedit/LocalSession.java b/core/src/main/java/com/sk89q/worldedit/LocalSession.java index 3dc53ab4..aab0325e 100644 --- a/core/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/core/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -423,7 +423,10 @@ public class LocalSession { private FaweChangeSet getChangeSet(Object o) { if (o instanceof FaweChangeSet) { - return (FaweChangeSet) o; + FaweChangeSet cs = (FaweChangeSet) o; + MainUtil.stacktrace(); + cs.flush(); + return cs; } if (o instanceof Integer) { return new DiskStorageHistory(currentWorld, this.uuid, (Integer) o); @@ -466,8 +469,6 @@ public class LocalSession { } } FaweChangeSet changeSet = (FaweChangeSet) editSession.getChangeSet(); - // Just in case - changeSet.flush(); historySize += MainUtil.getSize(changeSet); if (append) { history.add(changeSet); diff --git a/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java b/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java index 57db472a..1e7b3df2 100644 --- a/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java +++ b/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java @@ -22,6 +22,7 @@ package com.sk89q.worldedit.extension.platform; import com.boydti.fawe.Fawe; import com.boydti.fawe.command.AnvilCommands; import com.boydti.fawe.config.BBC; +import com.boydti.fawe.config.Settings; import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.changeset.FaweStreamChangeSet; import com.boydti.fawe.object.exception.FaweException; @@ -334,9 +335,11 @@ public final class CommandManager { final long time = System.currentTimeMillis() - start; if (time > 5 && hasSession) { BBC.ACTION_COMPLETE.send(finalActor, (time / 1000d)); - ChangeSet fcs = editSession.getChangeSet(); - if (fcs != null && fcs instanceof FaweStreamChangeSet) { - MainUtil.sendCompressedMessage((FaweStreamChangeSet) fcs, fp); + if (!Settings.HISTORY.COMBINE_STAGES) { // If stages are combined, we don't know the size yet (async flush) + ChangeSet fcs = editSession.getChangeSet(); + if (fcs != null && fcs instanceof FaweStreamChangeSet) { + MainUtil.sendCompressedMessage((FaweStreamChangeSet) fcs, fp); + } } } }