9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2026-01-04 15:41:30 +00:00
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

View File

@@ -142,7 +142,6 @@ public class IrisSettings {
public int objectLoaderCacheSize = 4_096;
public int scriptLoaderCacheSize = 512;
public int tectonicUnloadThreads = -1; // -1 = Disabled and instead use the dynamic method
public boolean dynamicPerformanceMode = true;
public boolean AggressiveTectonicUnload = false;
public int AggressiveTectonicThreshold = -1; // -1 = Disabled and instead uses the tectonicLimit
public int LazyPregenMaxCPM = -1; // -1 = no limit

View File

@@ -3,33 +3,49 @@ package com.volmit.iris.core.service;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
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.object.IrisWorld;
import com.volmit.iris.util.mantle.Mantle;
import com.volmit.iris.util.collection.KSet;
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.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.scheduling.Looper;
import io.papermc.lib.PaperLib;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.World;
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;
public class IrisEngineSVC implements IrisService {
private JavaPlugin plugin;
public Looper ticker;
public Mantle mantle;
public final World IrisWorld = Bukkit.getWorld("test");
// public Engine engine = IrisToolbelt.access(IrisWorld).getEngine();
public List<World> IrisWorlds = new ArrayList<>();
public List<World> corruptedIrisWorlds = new ArrayList<>();
@Override
public void onEnable() {
this.plugin = Iris.instance;
if (IrisSettings.get().getPerformance().dynamicPerformanceMode) {
this.startupPerformance();
this.IrisEngine();
ticker.start();
}
this.IrisStartup();
this.IrisEngine();
ticker.start();
}
public void IrisEngine(){
@@ -37,7 +53,11 @@ public class IrisEngineSVC implements IrisService {
@Override
protected long loop() {
try {
for (World world : IrisWorlds){
Engine engine = IrisToolbelt.access(world).getEngine();
}
} catch (Throwable e) {
Iris.reportError(e);
e.printStackTrace();
@@ -48,19 +68,30 @@ public class IrisEngineSVC implements IrisService {
}
};
}
public void startupPerformance(){
if (IrisSettings.get().getPerformance().dynamicPerformanceMode) {
tectonicLimit.set(2);
long t = getHardware.getProcessMemory();
for (; t > 250; ) {
tectonicLimit.getAndAdd(1);
t = t - 250;
}
tectonicLimit.set(10);
public void IrisStartup(){
tectonicLimit.set(2);
long t = getHardware.getProcessMemory();
for (; t > 250; ) {
tectonicLimit.getAndAdd(1);
t = t - 250;
}
}
public void getAllIrisWorlds(){
tectonicLimit.set(10); // DEBUG CODE
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

View File

@@ -418,7 +418,6 @@ public class Mantle {
forceAggressiveThreshold.set(IrisSettings.get().getPerformance().getAggressiveTectonicThreshold());
}
if(IrisSettings.get().getPerformance().dynamicPerformanceMode) {
// todo Repixel improve the logic
int h = dynamicThreads.get() - 1;
if (toUnload.size() != 0) {
@@ -438,24 +437,20 @@ public class Mantle {
}
}
oldFakeToUnload.set(toUnload.size());
}
if (!IrisSettings.get().getPerformance().dynamicPerformanceMode){
if(IrisSettings.get().getPerformance().getTectonicUnloadThreads() <= -1){
dynamicThreads.set(1);
} else {
dynamicThreads.set(IrisSettings.get().getPerformance().getTectonicUnloadThreads());
}
}
adjustedIdleDuration.set(baseIdleDuration);
if (loadedRegions != null) {
if (loadedRegions.size() > tectonicLimit.get()) {
// todo update this correctly and maybe do something when its above a 100%
if (IrisSettings.get().getPerformance().dynamicPerformanceMode) {
int tectonicLimitValue = tectonicLimit.get();
adjustedIdleDuration.set(Math.max(adjustedIdleDuration.get() - (1000 * (((loadedRegions.size() - tectonicLimitValue) / (double) tectonicLimitValue) * 100) * 0.4), 4000));
}
}
}