44 lines
1.4 KiB
Java
44 lines
1.4 KiB
Java
package com.mojang.blaze3d.platform;
|
|
|
|
import java.lang.invoke.MethodHandle;
|
|
import java.lang.invoke.MethodHandles;
|
|
import java.lang.invoke.MethodHandles.Lookup;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Method;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import org.jetbrains.annotations.Nullable;
|
|
import org.lwjgl.system.Pointer;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class DebugMemoryUntracker {
|
|
@Nullable
|
|
private static final MethodHandle UNTRACK = GLX.make(() -> {
|
|
try {
|
|
Lookup lookup = MethodHandles.lookup();
|
|
Class<?> class_ = Class.forName("org.lwjgl.system.MemoryManage$DebugAllocator");
|
|
Method method = class_.getDeclaredMethod("untrack", long.class);
|
|
method.setAccessible(true);
|
|
Field field = Class.forName("org.lwjgl.system.MemoryUtil$LazyInit").getDeclaredField("ALLOCATOR");
|
|
field.setAccessible(true);
|
|
Object object = field.get(null);
|
|
return class_.isInstance(object) ? lookup.unreflect(method) : null;
|
|
} catch (NoSuchMethodException | NoSuchFieldException | IllegalAccessException | ClassNotFoundException var5) {
|
|
throw new RuntimeException(var5);
|
|
}
|
|
});
|
|
|
|
public static void untrack(long memAddr) {
|
|
if (UNTRACK != null) {
|
|
try {
|
|
UNTRACK.invoke(memAddr);
|
|
} catch (Throwable var3) {
|
|
throw new RuntimeException(var3);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void untrack(Pointer pointer) {
|
|
untrack(pointer.address());
|
|
}
|
|
}
|