From 02d931104076fce62089c7f1ffabb2bd8336907f Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 12 Feb 2023 09:38:32 -0500 Subject: [PATCH] Minor performance improvements to model handling --- .../modernfix/dedup/IdentifierCaches.java | 1 + .../ModelBakeryMixin.java | 26 ------------ .../PropertyMixin.java | 40 +++++++++++++++++++ src/main/resources/modernfix.mixins.json | 1 + 4 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/PropertyMixin.java diff --git a/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java b/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java index b34ef714..e69b36d5 100644 --- a/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java +++ b/src/main/java/org/embeddedt/modernfix/dedup/IdentifierCaches.java @@ -6,6 +6,7 @@ import org.embeddedt.modernfix.ModernFix; public class IdentifierCaches { public static final DeduplicationCache NAMESPACES = new DeduplicationCache<>(); public static final DeduplicationCache PATH = new DeduplicationCache<>(); + public static final DeduplicationCache PROPERTY = new DeduplicationCache<>(); public static void printDebug() { ModernFix.LOGGER.info("[[[ Identifier de-duplication statistics ]]]"); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/ModelBakeryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/ModelBakeryMixin.java index 6ef210e0..ea76dd83 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/ModelBakeryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/ModelBakeryMixin.java @@ -1,22 +1,15 @@ package org.embeddedt.modernfix.mixin.perf.parallelize_model_loading; -import com.google.common.base.Stopwatch; -import com.google.common.collect.Sets; import com.mojang.datafixers.util.Pair; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BlockModelShapes; import net.minecraft.client.renderer.model.*; -import net.minecraft.client.renderer.model.multipart.Selector; -import net.minecraft.client.renderer.texture.SpriteMap; import net.minecraft.profiler.IProfiler; import net.minecraft.resources.IResource; import net.minecraft.resources.IResourceManager; import net.minecraft.state.StateContainer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Util; -import net.minecraft.util.math.vector.TransformationMatrix; import net.minecraft.util.registry.Registry; import net.minecraftforge.fml.loading.progress.StartupMessageManager; import org.embeddedt.modernfix.ModernFix; @@ -26,13 +19,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; - -import javax.annotation.Nullable; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -40,25 +28,11 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedDeque; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Collector; -import java.util.stream.Collectors; import java.util.stream.Stream; @Mixin(ModelBakery.class) public abstract class ModelBakeryMixin { - @Shadow protected abstract BlockModel loadBlockModel(ResourceLocation location) throws IOException; - - @Shadow @Final private Map unbakedCache; - @Shadow @Final public static ModelResourceLocation MISSING_MODEL_LOCATION; - - @Shadow public abstract IUnbakedModel getModel(ResourceLocation modelLocation); - - @Shadow @Final private Map topLevelModels; @Shadow @Final protected IResourceManager resourceManager; private Map>> deserializedBlockstateCache = null; diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/PropertyMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/PropertyMixin.java new file mode 100644 index 00000000..a48b903e --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/parallelize_model_loading/PropertyMixin.java @@ -0,0 +1,40 @@ +package org.embeddedt.modernfix.mixin.perf.parallelize_model_loading; + +import net.minecraft.state.Property; +import org.embeddedt.modernfix.dedup.IdentifierCaches; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(Property.class) +public class PropertyMixin { + + @Shadow @Mutable + @Final private String name; + + @Shadow private Integer hashCode; + + @Shadow @Final private Class clazz; + + @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/state/Property;name:Ljava/lang/String;")) + private void internName(Property instance, String name) { + this.name = IdentifierCaches.PROPERTY.deduplicate(name); + } + /** + * @author embeddedt + * @reason compare hashcodes if generated, use reference equality for speed + */ + @Overwrite + public boolean equals(Object p_equals_1_) { + if (this == p_equals_1_) { + return true; + } else if (!(p_equals_1_ instanceof Property)) { + return false; + } else { + Property property = (Property)p_equals_1_; + /* reference equality is safe here because of deduplication */ + return this.clazz == property.getValueClass() && this.name == property.getName(); + } + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 84103317..80dd81d8 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -42,6 +42,7 @@ "perf.parallelize_model_loading.SelectorMixin", "perf.parallelize_model_loading.TransformationMatrixMixin", "perf.parallelize_model_loading.BooleanPropertyMixin", + "perf.parallelize_model_loading.PropertyMixin", "perf.async_jei.IngredientListElementFactoryMixin", "perf.async_jei.ClientLifecycleHandlerMixin", "perf.async_jei.JeiStarterMixin",