configurable cache sizes

This commit is contained in:
dfsek 2021-01-13 23:51:23 -07:00
parent 244f0fba11
commit 8fd3530653
6 changed files with 69 additions and 53 deletions

View File

@ -6,6 +6,7 @@ import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.samplers.Normalizer;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.biome.BiomeProvider;
import com.dfsek.terra.biome.palette.PaletteHolder;
import com.dfsek.terra.biome.palette.PaletteLayer;
import com.dfsek.terra.carving.CarverPalette;
@ -18,6 +19,7 @@ import com.dfsek.terra.config.loaders.config.NoiseBuilderLoader;
import com.dfsek.terra.config.loaders.config.OreConfigLoader;
import com.dfsek.terra.config.loaders.config.OreHolderLoader;
import com.dfsek.terra.config.loaders.config.TreeLayerLoader;
import com.dfsek.terra.config.loaders.config.biome.BiomeProviderBuilderLoader;
import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader;
import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader;
import com.dfsek.terra.config.loaders.palette.PaletteLayerLoader;
@ -53,6 +55,7 @@ public class GenericLoaders implements LoaderRegistrar {
.registerLoader(MaterialSet.class, new MaterialSetLoader())
.registerLoader(OreHolder.class, new OreHolderLoader())
.registerLoader(TerraFlora.Search.class, (t, o, l) -> TerraFlora.Search.valueOf(o.toString()))
.registerLoader(Normalizer.NormalType.class, (t, o, l) -> Normalizer.NormalType.valueOf(o.toString().toUpperCase()));
.registerLoader(Normalizer.NormalType.class, (t, o, l) -> Normalizer.NormalType.valueOf(o.toString().toUpperCase()))
.registerLoader(BiomeProvider.BiomeProviderBuilder.class, new BiomeProviderBuilderLoader(main));
}
}

View File

@ -2,6 +2,7 @@ package com.dfsek.terra.biome;
import com.dfsek.tectonic.exception.ConfigException;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.biome.pipeline.BiomeHolder;
import com.dfsek.terra.biome.pipeline.BiomePipeline;
@ -14,9 +15,13 @@ import org.jetbrains.annotations.NotNull;
import java.util.concurrent.ExecutionException;
public class StandardBiomeProvider implements BiomeProvider {
private final BiomePipeline pipeline;
private final LoadingCache<Vector2, BiomeHolder> holderCache = CacheBuilder.newBuilder()
.maximumSize(64)
private final LoadingCache<Vector2, BiomeHolder> holderCache;
private final LoadingCache<Vector2, TerraBiome> biomeCache;
private int resolution = 1;
protected StandardBiomeProvider(BiomePipeline pipeline, TerraPlugin main) {
holderCache = CacheBuilder.newBuilder()
.maximumSize(main == null ? 32 : main.getTerraConfig().getProviderCache())
.build(
new CacheLoader<Vector2, BiomeHolder>() {
@Override
@ -25,8 +30,8 @@ public class StandardBiomeProvider implements BiomeProvider {
}
}
);
private final LoadingCache<Vector2, TerraBiome> biomeCache = CacheBuilder.newBuilder()
.maximumSize(1024)
biomeCache = CacheBuilder.newBuilder()
.maximumSize(main == null ? 512 : main.getTerraConfig().getBiomeCache())
.build(
new CacheLoader<Vector2, TerraBiome>() {
@Override
@ -41,10 +46,6 @@ public class StandardBiomeProvider implements BiomeProvider {
}
}
);
private int resolution = 1;
protected StandardBiomeProvider(BiomePipeline pipeline) {
this.pipeline = pipeline;
}
@Override
@ -70,15 +71,17 @@ public class StandardBiomeProvider implements BiomeProvider {
public static final class StandardBiomeProviderBuilder implements BiomeProviderBuilder {
private final ExceptionalFunction<Long, BiomePipeline> pipelineBuilder;
private final TerraPlugin main;
public StandardBiomeProviderBuilder(ExceptionalFunction<Long, BiomePipeline> pipelineBuilder) {
public StandardBiomeProviderBuilder(ExceptionalFunction<Long, BiomePipeline> pipelineBuilder, TerraPlugin main) {
this.pipelineBuilder = pipelineBuilder;
this.main = main;
}
@Override
public StandardBiomeProvider build(long seed) {
try {
return new StandardBiomeProvider(pipelineBuilder.apply(seed));
return new StandardBiomeProvider(pipelineBuilder.apply(seed), main);
} catch(ConfigException e) {
throw new RuntimeException(e);
}

View File

@ -13,7 +13,6 @@ import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.api.world.palette.Palette;
import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.biome.BiomeProvider;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.exception.FileMissingException;
@ -29,7 +28,6 @@ import com.dfsek.terra.config.files.FolderLoader;
import com.dfsek.terra.config.files.Loader;
import com.dfsek.terra.config.files.ZIPLoader;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.config.loaders.config.biome.BiomeProviderBuilderLoader;
import com.dfsek.terra.config.templates.AbstractableTemplate;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate;
@ -258,8 +256,7 @@ public class ConfigPack implements LoaderRegistrar {
.registerLoader(Tree.class, treeRegistry)
.registerLoader(StructureScript.class, scriptRegistry)
.registerLoader(TerraStructure.class, structureRegistry)
.registerLoader(LootTable.class, lootRegistry)
.registerLoader(BiomeProvider.BiomeProviderBuilder.class, new BiomeProviderBuilderLoader(this));
.registerLoader(LootTable.class, lootRegistry);
}
public ScriptRegistry getScriptRegistry() {

View File

@ -37,15 +37,23 @@ public class PluginConfig implements ConfigTemplate {
@Value("cache.carver")
@Default
private int carverCache = 512;
private int carverCache = 256;
@Value("cache.structure")
@Default
private int structureCache = 128;
private int structureCache = 32;
@Value("cache.sampler")
@Default
private int samplerCache = 512;
private int samplerCache = 64;
@Value("cache.biome")
@Default
private int biomeCache = 512;
@Value("cache.biome-provider")
@Default
private int providerCache = 32;
@Value("dump-default")
@Default
@ -107,4 +115,12 @@ public class PluginConfig implements ConfigTemplate {
public int getMaxRecursion() {
return maxRecursion;
}
public int getBiomeCache() {
return biomeCache;
}
public int getProviderCache() {
return providerCache;
}
}

View File

@ -4,8 +4,8 @@ import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.noise.samplers.FastNoiseLite;
import com.dfsek.terra.api.math.noise.samplers.NoiseSampler;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.biome.BiomeProvider;
import com.dfsek.terra.biome.StandardBiomeProvider;
@ -17,9 +17,9 @@ import com.dfsek.terra.biome.pipeline.mutator.SmoothMutator;
import com.dfsek.terra.biome.pipeline.source.RandomSource;
import com.dfsek.terra.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.loaders.Types;
import com.dfsek.terra.config.loaders.config.NoiseBuilderLoader;
import com.dfsek.terra.debug.Debug;
import com.dfsek.terra.generation.config.NoiseBuilder;
import net.jafama.FastMath;
@ -29,16 +29,10 @@ import java.util.Map;
@SuppressWarnings("unchecked")
public class BiomeProviderBuilderLoader implements TypeLoader<BiomeProvider.BiomeProviderBuilder> {
private final ConfigPack pack;
private final TerraPlugin main;
public BiomeProviderBuilderLoader(ConfigPack pack) {
this.pack = pack;
}
private static NoiseSampler whiteNoise(int seed) {
FastNoiseLite noiseLite = new FastNoiseLite(seed);
noiseLite.setNoiseType(FastNoiseLite.NoiseType.WhiteNoise);
return noiseLite;
public BiomeProviderBuilderLoader(TerraPlugin main) {
this.main = main;
}
@Override
@ -52,6 +46,7 @@ public class BiomeProviderBuilderLoader implements TypeLoader<BiomeProvider.Biom
List<Map<String, Object>> stages = (List<Map<String, Object>>) map.get("pipeline");
BiomePipeline.BiomePipelineBuilder pipelineBuilder = new BiomePipeline.BiomePipelineBuilder(2);
for(Map<String, Object> stage : stages) {
for(Map.Entry<String, Object> entry : stage.entrySet()) {
Map<String, Object> mutator = (Map<String, Object>) entry.getValue();
@ -77,7 +72,9 @@ public class BiomeProviderBuilderLoader implements TypeLoader<BiomeProvider.Biom
} else throw new LoadException("No such mutator \"" + entry.getKey() + "\"");
}
}
return pipelineBuilder.build(new RandomSource(sourceBiomes, sourceNoise));
});
BiomePipeline pipeline = pipelineBuilder.build(new RandomSource(sourceBiomes, sourceNoise));
Debug.info("Biome Pipeline scale factor: " + pipeline.getSize());
return pipeline;
}, main);
}
}

View File

@ -79,7 +79,7 @@ public class BiomeTest {
.build(source);
System.out.println("Size: " + pipeline.getSize());
return pipeline;
}).build(0);
}, null).build(0);
int size = 1000;