This commit is contained in:
RePixelatedMC
2023-12-03 16:56:56 +01:00
parent 8fc6e3b335
commit 83e311870f
3 changed files with 53 additions and 28 deletions
@@ -142,7 +142,6 @@ public class IrisSettings {
public int objectLoaderCacheSize = 4_096; public int objectLoaderCacheSize = 4_096;
public int scriptLoaderCacheSize = 512; public int scriptLoaderCacheSize = 512;
public int tectonicUnloadThreads = -1; // -1 = Disabled and instead use the dynamic method public int tectonicUnloadThreads = -1; // -1 = Disabled and instead use the dynamic method
public boolean dynamicPerformanceMode = true;
public boolean AggressiveTectonicUnload = false; public boolean AggressiveTectonicUnload = false;
public int AggressiveTectonicThreshold = -1; // -1 = Disabled and instead uses the tectonicLimit public int AggressiveTectonicThreshold = -1; // -1 = Disabled and instead uses the tectonicLimit
public int LazyPregenMaxCPM = -1; // -1 = no limit public int LazyPregenMaxCPM = -1; // -1 = no limit
@@ -3,41 +3,61 @@ package com.volmit.iris.core.service;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.core.tools.IrisToolbelt;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.IrisWorld; import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.format.C;
import com.volmit.iris.util.format.Form;
import com.volmit.iris.util.mantle.TectonicPlate;
import com.volmit.iris.util.math.M;
import com.volmit.iris.util.misc.getHardware; import com.volmit.iris.util.misc.getHardware;
import com.volmit.iris.util.parallel.BurstExecutor;
import com.volmit.iris.util.parallel.HyperLock;
import com.volmit.iris.util.parallel.MultiBurst;
import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.plugin.IrisService;
import com.volmit.iris.util.scheduling.Looper; import com.volmit.iris.util.scheduling.Looper;
import io.papermc.lib.PaperLib;
import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import static com.volmit.iris.util.mantle.Mantle.tectonicLimit; import static com.volmit.iris.util.mantle.Mantle.tectonicLimit;
public class IrisEngineSVC implements IrisService { public class IrisEngineSVC implements IrisService {
private JavaPlugin plugin; private JavaPlugin plugin;
public Looper ticker; public Looper ticker;
public Mantle mantle; public List<World> IrisWorlds = new ArrayList<>();
public final World IrisWorld = Bukkit.getWorld("test"); public List<World> corruptedIrisWorlds = new ArrayList<>();
// public Engine engine = IrisToolbelt.access(IrisWorld).getEngine();
@Override @Override
public void onEnable() { public void onEnable() {
this.plugin = Iris.instance; this.plugin = Iris.instance;
if (IrisSettings.get().getPerformance().dynamicPerformanceMode) { this.IrisStartup();
this.startupPerformance();
this.IrisEngine(); this.IrisEngine();
ticker.start(); ticker.start();
} }
}
public void IrisEngine(){ public void IrisEngine(){
ticker = new Looper() { ticker = new Looper() {
@Override @Override
protected long loop() { protected long loop() {
try { try {
for (World world : IrisWorlds){
Engine engine = IrisToolbelt.access(world).getEngine();
}
} catch (Throwable e) { } catch (Throwable e) {
Iris.reportError(e); Iris.reportError(e);
e.printStackTrace(); e.printStackTrace();
@@ -48,19 +68,30 @@ public class IrisEngineSVC implements IrisService {
} }
}; };
} }
public void startupPerformance(){ public void IrisStartup(){
if (IrisSettings.get().getPerformance().dynamicPerformanceMode) {
tectonicLimit.set(2); tectonicLimit.set(2);
long t = getHardware.getProcessMemory(); long t = getHardware.getProcessMemory();
for (; t > 250; ) { for (; t > 250; ) {
tectonicLimit.getAndAdd(1); tectonicLimit.getAndAdd(1);
t = t - 250; t = t - 250;
} }
tectonicLimit.set(10); tectonicLimit.set(10); // DEBUG CODE
}
}
public void getAllIrisWorlds(){
for (World w : Bukkit.getServer().getWorlds()) {
File container = Bukkit.getWorldContainer();
Bukkit.getWorldContainer();
if(IrisToolbelt.access(w) != null){
IrisWorlds.add(w);
} else {
File worldDirectory = new File(container, w.getName());
File IrisWorldTest = new File(worldDirectory, "Iris");
if (IrisWorldTest.exists()){
if(IrisToolbelt.access(w) == null){
corruptedIrisWorlds.add(w);
}
}
}
}
} }
@Override @Override
@@ -418,7 +418,6 @@ public class Mantle {
forceAggressiveThreshold.set(IrisSettings.get().getPerformance().getAggressiveTectonicThreshold()); forceAggressiveThreshold.set(IrisSettings.get().getPerformance().getAggressiveTectonicThreshold());
} }
if(IrisSettings.get().getPerformance().dynamicPerformanceMode) {
// todo Repixel improve the logic // todo Repixel improve the logic
int h = dynamicThreads.get() - 1; int h = dynamicThreads.get() - 1;
if (toUnload.size() != 0) { if (toUnload.size() != 0) {
@@ -438,26 +437,22 @@ public class Mantle {
} }
} }
oldFakeToUnload.set(toUnload.size()); oldFakeToUnload.set(toUnload.size());
}
if (!IrisSettings.get().getPerformance().dynamicPerformanceMode){
if(IrisSettings.get().getPerformance().getTectonicUnloadThreads() <= -1){ if(IrisSettings.get().getPerformance().getTectonicUnloadThreads() <= -1){
dynamicThreads.set(1); dynamicThreads.set(1);
} else { } else {
dynamicThreads.set(IrisSettings.get().getPerformance().getTectonicUnloadThreads()); dynamicThreads.set(IrisSettings.get().getPerformance().getTectonicUnloadThreads());
} }
}
adjustedIdleDuration.set(baseIdleDuration); adjustedIdleDuration.set(baseIdleDuration);
if (loadedRegions != null) { if (loadedRegions != null) {
if (loadedRegions.size() > tectonicLimit.get()) { if (loadedRegions.size() > tectonicLimit.get()) {
// todo update this correctly and maybe do something when its above a 100% // todo update this correctly and maybe do something when its above a 100%
if (IrisSettings.get().getPerformance().dynamicPerformanceMode) {
int tectonicLimitValue = tectonicLimit.get(); int tectonicLimitValue = tectonicLimit.get();
adjustedIdleDuration.set(Math.max(adjustedIdleDuration.get() - (1000 * (((loadedRegions.size() - tectonicLimitValue) / (double) tectonicLimitValue) * 100) * 0.4), 4000)); adjustedIdleDuration.set(Math.max(adjustedIdleDuration.get() - (1000 * (((loadedRegions.size() - tectonicLimitValue) / (double) tectonicLimitValue) * 100) * 0.4), 4000));
} }
} }
}
io.set(true); io.set(true);