From b00d2baf46accaeaae0a2f7ce677b54131891519 Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Tue, 4 Feb 2025 19:21:03 +0100 Subject: [PATCH] Improved thread stacktrace logging Closes #310 --- .../apiimpl/BatchingAccessImpl.java | 2 +- .../injection/mixins/core/MixinGlDebug.java | 21 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/net/raphimc/immediatelyfast/apiimpl/BatchingAccessImpl.java b/common/src/main/java/net/raphimc/immediatelyfast/apiimpl/BatchingAccessImpl.java index 1e0bf52..4a28871 100644 --- a/common/src/main/java/net/raphimc/immediatelyfast/apiimpl/BatchingAccessImpl.java +++ b/common/src/main/java/net/raphimc/immediatelyfast/apiimpl/BatchingAccessImpl.java @@ -63,7 +63,7 @@ private void warn() { ImmediatelyFast.LOGGER.error("A mod tried to use the ImmediatelyFast batching API, but it is no longer available in 1.21.2."); ImmediatelyFast.LOGGER.error("Mojang added basic batching into the DrawContext class. ImmediatelyFast now uses and extends this system, so this method is no longer needed."); ImmediatelyFast.LOGGER.error("To migrate your mod, simply remove all calls to the ImmediatelyFast batching API and make sure to use the DrawContext for your HUD rendering."); - Thread.dumpStack(); + ImmediatelyFast.LOGGER.error("Here is a stack trace to help you find the offending code:", new Exception()); } } diff --git a/common/src/main/java/net/raphimc/immediatelyfast/injection/mixins/core/MixinGlDebug.java b/common/src/main/java/net/raphimc/immediatelyfast/injection/mixins/core/MixinGlDebug.java index 76086a5..6a5c9c3 100644 --- a/common/src/main/java/net/raphimc/immediatelyfast/injection/mixins/core/MixinGlDebug.java +++ b/common/src/main/java/net/raphimc/immediatelyfast/injection/mixins/core/MixinGlDebug.java @@ -19,11 +19,14 @@ import net.minecraft.client.gl.GlDebug; import net.raphimc.immediatelyfast.ImmediatelyFast; +import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GLCapabilities; +import org.slf4j.Logger; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(GlDebug.class) public abstract class MixinGlDebug { @@ -31,11 +34,19 @@ public abstract class MixinGlDebug { @Unique private static long immediatelyFast$lastTime; - @Inject(method = "info", at = @At("RETURN")) - private static void printAdditionalInfo(CallbackInfo ci) { + @ModifyVariable(method = "enableDebug", at = @At("HEAD"), index = 1, argsOnly = true) + private static boolean enableSyncDebug(boolean sync) { + final GLCapabilities capabilities = GL.getCapabilities(); + return sync || (ImmediatelyFast.config.debug_only_print_additional_error_information && (capabilities.GL_KHR_debug || capabilities.GL_ARB_debug_output)); + } + + @Redirect(method = "info", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;info(Ljava/lang/String;Ljava/lang/Object;)V", remap = false)) + private static void appendStackTrace(Logger instance, String message, Object argument) { if (ImmediatelyFast.config.debug_only_print_additional_error_information && System.currentTimeMillis() - immediatelyFast$lastTime > 1000) { immediatelyFast$lastTime = System.currentTimeMillis(); - Thread.dumpStack(); + instance.info(message, argument, new Exception()); + } else { + instance.info(message, argument); } }