From 8c34c0de50f9241f3e630a69bfee9ad44b229dc7 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 2 Feb 2026 20:50:21 -0500 Subject: [PATCH] Dump stats on permanently loaded baked models to debug log --- .../ForgeHooksClientMixin.java | 4 ++ .../DynamicBakedModelProvider.java | 45 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java index 09398c75..31879cff 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ForgeHooksClientMixin.java @@ -12,6 +12,7 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoader; import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.dynamicresources.DynamicBakedModelProvider; import org.embeddedt.modernfix.forge.dynresources.ModelBakeEventHelper; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -62,5 +63,8 @@ public class ForgeHooksClientMixin { ModernFix.LOGGER.warn(" {}: {}", entry.getKey(), entry.getValue().toString()); }); } + if (bakeEvent.getModels() instanceof DynamicBakedModelProvider dynamicProvider) { + dynamicProvider.dumpStats(); + } } } diff --git a/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java b/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java index 288b4028..fec582d4 100644 --- a/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java +++ b/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicBakedModelProvider.java @@ -2,6 +2,8 @@ package org.embeddedt.modernfix.dynamicresources; import com.google.common.collect.ImmutableSet; import com.mojang.math.Transformation; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.ItemOverrides; @@ -248,4 +250,47 @@ public class DynamicBakedModelProvider implements Map, Object2IntOpenHashMap> byClassAndNamespace = new Object2ObjectOpenHashMap<>(); + Object2IntOpenHashMap> totalsByClass = new Object2IntOpenHashMap<>(); + synchronized (permanentOverrides) { + for (var entry : permanentOverrides.entrySet()) { + var model = entry.getValue(); + if (model == null) { + continue; + } + totalsByClass.addTo(model.getClass(), 1); + var byNamespace = byClassAndNamespace.computeIfAbsent(model.getClass(), $ -> new Object2IntOpenHashMap<>()); + byNamespace.addTo(entry.getKey().getNamespace(), 1); + } + } + ModernFix.LOGGER.debug("Loaded {} permanent overrides", permanentOverrides.size()); + byClassAndNamespace.entrySet().stream().sorted((a, b) -> + Integer.compare( + totalsByClass.getInt(b.getKey()), + totalsByClass.getInt(a.getKey()) + )) + .forEach(classEntry -> { + var byNamespace = classEntry.getValue(); + int totalModels = totalsByClass.getInt(classEntry.getKey()); + ModernFix.LOGGER.debug( + "{}: {} models", + classEntry.getKey().getName(), + totalModels + ); + + // sort namespaces by count (descending) + byNamespace.object2IntEntrySet().stream() + .sorted((a, b) -> + Integer.compare(b.getIntValue(), a.getIntValue())) + .forEach(nsEntry -> { + ModernFix.LOGGER.debug( + " {}: {}", + nsEntry.getKey(), + nsEntry.getIntValue() + ); + }); + }); + } }