Mirror von
https://github.com/IntellectualSites/FastAsyncWorldEdit.git
synchronisiert 2024-11-19 09:20:08 +01:00
Add config options
Dieser Commit ist enthalten in:
Ursprung
f58c2d470a
Commit
56b7c6ebb5
@ -438,7 +438,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
|
|||||||
final ServerLevel nmsWorld = serverLevel;
|
final ServerLevel nmsWorld = serverLevel;
|
||||||
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
||||||
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
||||||
if (chunk == null && MemUtil.shouldBeginSlow()) {
|
if ((chunk == null && MemUtil.shouldBeginSlow()) || Settings.settings().QUEUE.ASYNC_CHUNK_LOAD_WRITE) {
|
||||||
try {
|
try {
|
||||||
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
@ -438,7 +438,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
|
|||||||
final ServerLevel nmsWorld = serverLevel;
|
final ServerLevel nmsWorld = serverLevel;
|
||||||
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
||||||
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
||||||
if (chunk == null && MemUtil.shouldBeginSlow()) {
|
if ((chunk == null && MemUtil.shouldBeginSlow()) || Settings.settings().QUEUE.ASYNC_CHUNK_LOAD_WRITE) {
|
||||||
try {
|
try {
|
||||||
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
@ -439,7 +439,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
|
|||||||
final ServerLevel nmsWorld = serverLevel;
|
final ServerLevel nmsWorld = serverLevel;
|
||||||
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
||||||
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
||||||
if (chunk == null && MemUtil.shouldBeginSlow()) {
|
if ((chunk == null && MemUtil.shouldBeginSlow()) || Settings.settings().QUEUE.ASYNC_CHUNK_LOAD_WRITE) {
|
||||||
try {
|
try {
|
||||||
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
@ -440,7 +440,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
|
|||||||
final ServerLevel nmsWorld = serverLevel;
|
final ServerLevel nmsWorld = serverLevel;
|
||||||
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
CompletableFuture<LevelChunk> nmsChunkFuture = ensureLoaded(nmsWorld, chunkX, chunkZ);
|
||||||
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
LevelChunk chunk = nmsChunkFuture.getNow(null);
|
||||||
if (chunk == null && MemUtil.shouldBeginSlow()) {
|
if ((chunk == null && MemUtil.shouldBeginSlow()) || Settings.settings().QUEUE.ASYNC_CHUNK_LOAD_WRITE) {
|
||||||
try {
|
try {
|
||||||
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
chunk = nmsChunkFuture.get(); // "Artificially" slow FAWE down if memory low as performing the
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
@ -138,7 +138,7 @@ public class Fawe {
|
|||||||
} catch (Throwable ignored) {
|
} catch (Throwable ignored) {
|
||||||
}
|
}
|
||||||
}, 0);
|
}, 0);
|
||||||
TaskManager.taskManager().repeatAsync(() -> MemUtil.checkAndSetApproachingLimit(), 1);
|
TaskManager.taskManager().repeatAsync(MemUtil::checkAndSetApproachingLimit, 1);
|
||||||
|
|
||||||
TaskManager.taskManager().repeat(timer, 1);
|
TaskManager.taskManager().repeat(timer, 1);
|
||||||
|
|
||||||
@ -418,16 +418,12 @@ public class Fawe {
|
|||||||
final NotificationEmitter ne = (NotificationEmitter) memBean;
|
final NotificationEmitter ne = (NotificationEmitter) memBean;
|
||||||
|
|
||||||
ne.addNotificationListener((notification, handback) -> {
|
ne.addNotificationListener((notification, handback) -> {
|
||||||
LOGGER.info("Notification");
|
|
||||||
final long heapSize = Runtime.getRuntime().totalMemory();
|
final long heapSize = Runtime.getRuntime().totalMemory();
|
||||||
final long heapMaxSize = Runtime.getRuntime().maxMemory();
|
final long heapMaxSize = Runtime.getRuntime().maxMemory();
|
||||||
if (heapSize < heapMaxSize) {
|
if (heapSize < heapMaxSize) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LOGGER.info("NNNNNNNNNNNNNNNNNNNNNNNNNNNN");
|
LOGGER.warn("High memory usage detected, FAWE will attempt to slow operations to prevent a crash.");
|
||||||
LOGGER.info("NNNNNNNNNNNNNNNNNNNNNNNNNNNN");
|
|
||||||
LOGGER.info("NNNNNNNNNNNNNNNNNNNNNNNNNNNN");
|
|
||||||
LOGGER.info("JJJJJJJJJJJJJJJJJJJJJJJJJJJJ");
|
|
||||||
MemUtil.memoryLimitedTask();
|
MemUtil.memoryLimitedTask();
|
||||||
}, null, null);
|
}, null, null);
|
||||||
|
|
||||||
|
@ -57,6 +57,12 @@ public class Settings extends Config {
|
|||||||
" - Disable with 100 or -1."
|
" - Disable with 100 or -1."
|
||||||
})
|
})
|
||||||
public int MAX_MEMORY_PERCENT = 95;
|
public int MAX_MEMORY_PERCENT = 95;
|
||||||
|
@Comment({
|
||||||
|
"When percent memory usage reaches this threshold some aspects of editing will be slowed down:",
|
||||||
|
" - FAWE-Asynchronous chunk loading when writing changes (see queue.async-chunk-load-write)"
|
||||||
|
})
|
||||||
|
public int SLOWER_MEMORY_PERCENT = 80;
|
||||||
|
|
||||||
@Create
|
@Create
|
||||||
public ENABLED_COMPONENTS ENABLED_COMPONENTS;
|
public ENABLED_COMPONENTS ENABLED_COMPONENTS;
|
||||||
@Create
|
@Create
|
||||||
@ -599,6 +605,13 @@ public class Settings extends Config {
|
|||||||
})
|
})
|
||||||
public boolean POOL = true;
|
public boolean POOL = true;
|
||||||
|
|
||||||
|
@Comment({
|
||||||
|
"If chunk loading for writing edits to the world should be performed asynchronously to to FAWE",
|
||||||
|
" - Enable to improve performance at the expense of memory",
|
||||||
|
" - If experience out of memory crashed, disable this or reduce slower-memory-percent"
|
||||||
|
})
|
||||||
|
public boolean ASYNC_CHUNK_LOAD_WRITE = true;
|
||||||
|
|
||||||
public static class PROGRESS {
|
public static class PROGRESS {
|
||||||
|
|
||||||
@Comment({"Display constant titles about the progress of a user's edit",
|
@Comment({"Display constant titles about the progress of a user's edit",
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package com.fastasyncworldedit.core.util;
|
package com.fastasyncworldedit.core.util;
|
||||||
|
|
||||||
import com.fastasyncworldedit.core.configuration.Settings;
|
import com.fastasyncworldedit.core.configuration.Settings;
|
||||||
|
import com.sk89q.worldedit.internal.util.LogManagerCompat;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
@ -8,6 +10,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
|
|
||||||
public class MemUtil {
|
public class MemUtil {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManagerCompat.getLogger();
|
||||||
private static final AtomicBoolean memory = new AtomicBoolean(false);
|
private static final AtomicBoolean memory = new AtomicBoolean(false);
|
||||||
private static final AtomicBoolean slower = new AtomicBoolean(false);
|
private static final AtomicBoolean slower = new AtomicBoolean(false);
|
||||||
|
|
||||||
@ -60,7 +63,8 @@ public class MemUtil {
|
|||||||
final long heapFreeSize = Runtime.getRuntime().freeMemory();
|
final long heapFreeSize = Runtime.getRuntime().freeMemory();
|
||||||
final long heapMaxSize = Runtime.getRuntime().maxMemory();
|
final long heapMaxSize = Runtime.getRuntime().maxMemory();
|
||||||
final int size = (int) ((heapFreeSize * 100) / heapMaxSize);
|
final int size = (int) ((heapFreeSize * 100) / heapMaxSize);
|
||||||
slower.set(size > 80);
|
boolean limited = size >= Settings.settings().SLOWER_MEMORY_PERCENT;
|
||||||
|
slower.set(limited);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Queue<Runnable> memoryLimitedTasks = new ConcurrentLinkedQueue<>();
|
private static final Queue<Runnable> memoryLimitedTasks = new ConcurrentLinkedQueue<>();
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren