Fixes & Mem improvements

This commit is contained in:
Daniel Mills
2020-07-31 01:02:00 -04:00
parent 9d326d240a
commit 121653a8f2
25 changed files with 42206 additions and 62 deletions

View File

@@ -49,6 +49,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
protected World world;
protected int generated;
protected int ticks;
private boolean fastPregen = false;
protected boolean pregenDone;
public ContextualChunkGenerator()
@@ -103,7 +104,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
{
if(perSecond.flip())
{
if(generated > 770)
if(generated > (fastPregen ? 1950 : 770))
{
pregenDone = true;
}
@@ -221,6 +222,31 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
return c;
}
protected ChunkData generateChunkFastPregen(World world, Random no, int x, int z, BiomeGrid biomeGrid)
{
ChunkData c = Bukkit.createChunkData(world);
for(int i = 0; i < 16; i++)
{
for(int j = 0; j < 16; j++)
{
int h = 0;
if(j == i || j + i == 16)
{
c.setBlock(i, h, j, BlockDataTools.getBlockData("BLUE_TERRACOTTA"));
}
else
{
c.setBlock(i, h, j, BlockDataTools.getBlockData("WHITE_TERRACOTTA"));
}
}
}
return c;
}
@Override
public ChunkData generateChunkData(World world, Random no, int x, int z, BiomeGrid biomeGrid)
{
@@ -251,8 +277,19 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
PrecisionStopwatch s = PrecisionStopwatch.start();
RNG random = new RNG(world.getSeed());
init(world, random.nextParallelRNG(0));
ChunkData c = Bukkit.createChunkData(world);
onGenerate(random, x, z, c, biomeGrid);
if(!pregenDone && fastPregen)
{
c = generateChunkFastPregen(world, no, x, z, biomeGrid);
}
else
{
onGenerate(random, x, z, c, biomeGrid);
}
metrics.getTotal().put(s.getMilliseconds());
generated++;
long hits = CNG.hits;

View File

@@ -12,6 +12,7 @@ import com.volmit.iris.Iris;
import com.volmit.iris.IrisContext;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.object.atomics.AtomicRegionData;
import com.volmit.iris.util.BiomeResult;
import com.volmit.iris.util.CNG;
import com.volmit.iris.util.KMap;
@@ -145,4 +146,26 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
CNG.creates = 0;
onHotload();
}
public long guessMemoryUsage()
{
long bytes = 1024 * 1024 * (8 + (getThreads() / 4));
for(AtomicRegionData i : parallaxMap.getLoadedRegions().values())
{
bytes += i.guessMemoryUsage();
}
for(AtomicRegionData i : ceilingParallaxMap.getLoadedRegions().values())
{
bytes += i.guessMemoryUsage();
}
bytes += parallaxMap.getLoadedChunks().size() * 256 * 4 * 460;
bytes += ceilingParallaxMap.getLoadedChunks().size() * 256 * 4 * 460;
bytes += getSliverBuffer() * 220;
bytes += 752 * Iris.data.getObjectLoader().getTotalStorage();
return bytes;
}
}

View File

@@ -34,9 +34,9 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false)
public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator implements IObjectPlacer
{
private KMap<ChunkPosition, AtomicSliver> sliverCache;
protected KMap<ChunkPosition, AtomicSliver> sliverCache;
protected AtomicWorldData parallaxMap;
private KMap<ChunkPosition, AtomicSliver> ceilingSliverCache;
protected KMap<ChunkPosition, AtomicSliver> ceilingSliverCache;
protected AtomicWorldData ceilingParallaxMap;
private MasterLock masterLock;
private ReentrantLock lock = new ReentrantLock();

View File

@@ -266,6 +266,14 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
}
}
if(onto.equals(Material.STONE) || onto.equals(Material.ANDESITE) || onto.equals(Material.GRANITE) || onto.equals(Material.DIORITE) || onto.equals(Material.BLACKSTONE) || onto.equals(Material.BASALT))
{
if(mat.equals(Material.POPPY) || mat.equals(Material.DANDELION) || mat.equals(Material.CORNFLOWER) || mat.equals(Material.ORANGE_TULIP) || mat.equals(Material.PINK_TULIP) || mat.equals(Material.RED_TULIP) || mat.equals(Material.WHITE_TULIP) || mat.equals(Material.FERN) || mat.equals(Material.LARGE_FERN) || mat.equals(Material.GRASS) || mat.equals(Material.TALL_GRASS))
{
return false;
}
}
if(onto.equals(Material.ACACIA_LEAVES) || onto.equals(Material.BIRCH_LEAVES) || onto.equals(Material.DARK_OAK_LEAVES) || onto.equals(Material.JUNGLE_LEAVES) || onto.equals(Material.OAK_LEAVES) || onto.equals(Material.SPRUCE_LEAVES))
{
if(!mat.isSolid())
@@ -293,7 +301,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
continue;
}
BlockData d = i.getBlockData(getMasterRandom().nextParallelRNG((int) (wx + wz + 38888 + biome.getRarity() + biome.getName().length() + j++)), wx, wz);
BlockData d = i.getBlockData(getMasterRandom().nextParallelRNG((int) (38888 + biome.getRarity() + biome.getName().length() + j++)), wx, wz);
if(d != null)
{