Skip to content

Commit 3737e10

Browse files
committed
Sound Engine crash debugging
1 parent 845cdc5 commit 3737e10

File tree

3 files changed

+73
-1
lines changed

3 files changed

+73
-1
lines changed

platforms/common/src/main/java/dynamic_fps/impl/DynamicFPSMod.java

+15
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@
2525
import net.minecraft.client.Minecraft;
2626
import net.minecraft.client.gui.screens.LoadingOverlay;
2727
import net.minecraft.client.gui.screens.Screen;
28+
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
2829
import net.minecraft.network.chat.Component;
2930
import net.minecraft.resources.ResourceLocation;
31+
import net.minecraft.sounds.SoundEvents;
3032
import net.minecraft.sounds.SoundSource;
3133

3234
import org.jetbrains.annotations.Nullable;
@@ -66,6 +68,19 @@ public static void init() {
6668
Version version = platform.getModVersion(Constants.MOD_ID).orElseThrow();
6769

6870
Logging.getLogger().info("Dynamic FPS {} active on {}!", version, platform.getName());
71+
72+
// Thread.ofPlatform().name("worstie's-thread").start(DynamicFPSMod::playSoundOffthread);
73+
}
74+
75+
private static void playSoundOffthread() {
76+
try {
77+
Thread.sleep(5000);
78+
} catch (InterruptedException e) {
79+
Thread.interrupted();
80+
return;
81+
}
82+
83+
minecraft.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
6984
}
7085

7186
public static boolean disabledByUser() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package dynamic_fps.impl.mixin.debug;
2+
3+
import dynamic_fps.impl.util.Logging;
4+
import net.minecraft.client.Minecraft;
5+
import net.minecraft.client.sounds.SoundEngine;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Unique;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
12+
13+
@Mixin(SoundEngine.class)
14+
public class SoundEngineMixin {
15+
@Inject(method = "updateCategoryVolume", at = @At("HEAD"))
16+
private void updateCategoryVolume(CallbackInfo callbackInfo) {
17+
dynamic_fps$logOffThreadUsage("updateCategoryVolume");
18+
}
19+
20+
@Inject(method = "stop", at = @At("HEAD"))
21+
private void stop(CallbackInfo callbackInfo) {
22+
dynamic_fps$logOffThreadUsage("stop");
23+
}
24+
25+
@Inject(method = "stopAll", at = @At("HEAD"))
26+
private void stopAll(CallbackInfo callbackInfo) {
27+
dynamic_fps$logOffThreadUsage("stopAll");
28+
}
29+
30+
@Inject(method = "tickNonPaused", at = @At("HEAD"))
31+
private void tickNonPaused(CallbackInfo callbackInfo) {
32+
dynamic_fps$logOffThreadUsage("tickNonPaused");
33+
}
34+
35+
@Inject(method = "isActive", at = @At("HEAD"))
36+
private void isActive(CallbackInfoReturnable<Boolean> cir) {
37+
dynamic_fps$logOffThreadUsage("isActive");
38+
}
39+
40+
@Inject(method = "play", at = @At("HEAD"))
41+
private void play(CallbackInfo callbackInfo) {
42+
dynamic_fps$logOffThreadUsage("play");
43+
}
44+
45+
@Inject(method = "playDelayed", at = @At("HEAD"))
46+
private void playDelayed(CallbackInfo callbackInfo) {
47+
dynamic_fps$logOffThreadUsage("playDelayed");
48+
}
49+
50+
@Unique
51+
private void dynamic_fps$logOffThreadUsage(String method) {
52+
if (!Minecraft.getInstance().isSameThread()) {
53+
Logging.getLogger().warn("Potentially dangerous call to SoundEngine.{} from non-main thread!", method, new Throwable());
54+
}
55+
}
56+
}

platforms/common/src/main/resources/dynamic_fps-common.mixins.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"SoundEngineMixin",
1313
"ToastComponentMixin",
1414
"WindowMixin",
15-
"bugfix.BlockableEventLoopMixin"
15+
"bugfix.BlockableEventLoopMixin",
16+
"debug.SoundEngineMixin"
1617
],
1718
"mixins": [],
1819
"server": [],

0 commit comments

Comments
 (0)