From 42a94ab3d113dda4628c5e69a67266dc2d163926 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 28 May 2023 00:42:06 +0200 Subject: [PATCH] optimize registries after loading This could/should make performance better? --- .../registries/blocks/entites/BlockEntityTypeRegistry.kt | 2 +- .../registries/registries/registry/AbstractRegistry.kt | 2 ++ .../registries/registries/registry/BlockStateRegistry.kt | 4 ++++ .../data/registries/registries/registry/Registry.kt | 7 ++++++- .../registries/registry/ResourceLocationRegistry.kt | 5 +++++ .../java/de/bixilon/minosoft/recipes/RecipeRegistry.kt | 5 +++++ src/main/java/de/bixilon/minosoft/util/RegistriesUtil.kt | 8 ++++++++ 7 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/entites/BlockEntityTypeRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/entites/BlockEntityTypeRegistry.kt index 347fc9c8f..5a4382ff7 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/entites/BlockEntityTypeRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/entites/BlockEntityTypeRegistry.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.data.registries.registries.registry.Registry class BlockEntityTypeRegistry( parentRegistry: BlockEntityTypeRegistry? = null, ) : Registry>(parentRegistry, codec = BlockEntityType) { - private val blockTypeMap: MutableMap> = mutableMapOf() + private val blockTypeMap: MutableMap> = HashMap() operator fun get(block: Block): BlockEntityType<*>? { val parentRegistry = super.parent as BlockEntityTypeRegistry? diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt index c2177cdaa..9cf3dbfb7 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt @@ -48,4 +48,6 @@ interface AbstractRegistry : Iterable, Clearable, Parentable { return RegistryIterator(this) } + + fun optimize() = Unit } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt index 6c8b3eef3..c5c2f36fe 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt @@ -86,4 +86,8 @@ class BlockStateRegistry(var flattened: Boolean) : AbstractRegistry } override fun addItem(resourceLocation: ResourceLocation, id: Int?, data: JsonObject, registries: Registries?) = Broken() + + override fun optimize() { + idMap.trim() + } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt index cd60f3f6a..2c56d136d 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt @@ -36,7 +36,7 @@ open class Registry( ) : AbstractRegistry { protected val idValueMap: Int2ObjectOpenHashMap = Int2ObjectOpenHashMap() protected val valueIdMap: Object2IntOpenHashMap = Object2IntOpenHashMap() - protected val resourceLocationMap: MutableMap = mutableMapOf() + protected val resourceLocationMap: MutableMap = HashMap() override val size: Int get() { @@ -158,4 +158,9 @@ open class Registry( override fun noParentIterator(): Iterator { return resourceLocationMap.values.iterator() } + + override fun optimize() { + idValueMap.trim() + valueIdMap.trim() + } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt index 0a4c89c61..989008c7d 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt @@ -81,4 +81,9 @@ class ResourceLocationRegistry( override fun noParentIterator(): Iterator { return idValueMap.values.iterator() } + + override fun optimize() { + idValueMap.trim() + valueIdMap.trim() + } } diff --git a/src/main/java/de/bixilon/minosoft/recipes/RecipeRegistry.kt b/src/main/java/de/bixilon/minosoft/recipes/RecipeRegistry.kt index ff2328fd6..35a37cf2a 100644 --- a/src/main/java/de/bixilon/minosoft/recipes/RecipeRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/recipes/RecipeRegistry.kt @@ -81,4 +81,9 @@ class RecipeRegistry( recipeResourceLocationMap[recipe] = resourceLocation } } + + override fun optimize() { + idValueMap.trim() + valueIdMap.trim() + } } diff --git a/src/main/java/de/bixilon/minosoft/util/RegistriesUtil.kt b/src/main/java/de/bixilon/minosoft/util/RegistriesUtil.kt index 8fa822ca6..80778a195 100644 --- a/src/main/java/de/bixilon/minosoft/util/RegistriesUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/RegistriesUtil.kt @@ -81,6 +81,14 @@ object RegistriesUtil { worker.work(latch) } + fun Registries.optimize(latch: CountUpAndDownLatch) { + val worker = UnconditionalWorker() + for (field in types.values) { + worker += { field.get(this).unsafeCast>().optimize() } + } + worker.work(latch) + } + fun Registries.clear() { for (field in clearable) {