From 5fe5a484a369c92fdfebed57ee20493257cad725 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 23 Feb 2024 16:45:01 -0500 Subject: [PATCH] Use fastutil maps for holder lookups in Forge registry --- .../perf/forge_registry_alloc/ForgeRegistryMixin.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_alloc/ForgeRegistryMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_alloc/ForgeRegistryMixin.java index 920136ae..bf045369 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_alloc/ForgeRegistryMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_alloc/ForgeRegistryMixin.java @@ -1,5 +1,6 @@ package org.embeddedt.modernfix.forge.mixin.perf.forge_registry_alloc; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.core.Holder; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -14,9 +15,11 @@ import java.util.Map; @Mixin(value = ForgeRegistry.class, remap = false) public abstract class ForgeRegistryMixin { - @Shadow @Final private Map> delegatesByName; + // Replace the backing maps with fastutil maps for a bit more speed, since value->holder lookups in particular + // are a bottleneck in many areas (e.g. render type lookup) + @Shadow @Final private Map> delegatesByName = new Object2ObjectOpenHashMap<>(); - @Shadow @Final private Map> delegatesByValue; + @Shadow @Final private Map> delegatesByValue = new Object2ObjectOpenHashMap<>(); /** * @author embeddedt