Render task handler name tracking
This commit is contained in:
+1
-1
@@ -90,7 +90,7 @@ public class ClientPluginChannelApi
|
||||
|
||||
LOGGER.info("Server level key received: [" + msg.levelKey + "].");
|
||||
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() ->
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("ClientPluginChannelApi onLevelInitMessage", () ->
|
||||
{
|
||||
IClientLevelWrapper clientLevel = MC.getWrappedClientLevel(true);
|
||||
IServerKeyedClientLevel existingKeyedClientLevel = KEYED_CLIENT_LEVEL_MANAGER.getServerKeyedLevel();
|
||||
|
||||
+2
-2
@@ -129,7 +129,7 @@ public class LodBufferContainer implements AutoCloseable
|
||||
|
||||
|
||||
// upload on MC's render thread
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() ->
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("LodBufferContainer Upload", () ->
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -291,7 +291,7 @@ public class LodBufferContainer implements AutoCloseable
|
||||
{
|
||||
this.buffersUploaded = false;
|
||||
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() ->
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("LodBufferContainer Close", () ->
|
||||
{
|
||||
for (IVertexBufferWrapper buffer : this.vbos)
|
||||
{
|
||||
|
||||
+86
-15
@@ -7,6 +7,8 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
import com.seibel.distanthorizons.core.util.TimerUtil;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Timer;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
@@ -47,23 +49,17 @@ public class RenderThreadTaskHandler
|
||||
//==============//
|
||||
//region
|
||||
|
||||
public void queueRunningOnRenderThread(Runnable renderCall)
|
||||
public void queueRunningOnRenderThread(String name, Runnable renderCall)
|
||||
{
|
||||
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
||||
RENDER_THREAD_RUNNABLE_QUEUE.add(() -> this.createRenderThreadRunnable(renderCall, stackTrace));
|
||||
}
|
||||
private void createRenderThreadRunnable(Runnable renderCall, StackTraceElement[] stackTrace)
|
||||
{
|
||||
try
|
||||
// don't get the stacktrace on release to reduce GC pressure
|
||||
StackTraceElement[] stackTrace = null;
|
||||
if (ModInfo.IS_DEV_BUILD)
|
||||
{
|
||||
renderCall.run();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
RuntimeException error = new RuntimeException("Uncaught Exception during GL call execution:", e);
|
||||
error.setStackTrace(stackTrace);
|
||||
LOGGER.error("[" + Thread.currentThread().getName() + "] ran into an unexpected error running a GL call, Error: ["+ e.getMessage() +"].", error);
|
||||
stackTrace = Thread.currentThread().getStackTrace();
|
||||
}
|
||||
|
||||
QueuedRunnable runnable = new QueuedRunnable(name, renderCall, stackTrace);
|
||||
RENDER_THREAD_RUNNABLE_QUEUE.add(runnable);
|
||||
}
|
||||
|
||||
//endregion
|
||||
@@ -136,7 +132,82 @@ public class RenderThreadTaskHandler
|
||||
MC.executeOnRenderThread(() -> this.runRenderThreadTasks(1_000));
|
||||
}
|
||||
|
||||
//end region
|
||||
//endregion
|
||||
|
||||
|
||||
|
||||
//================//
|
||||
// helper classes //
|
||||
//================//
|
||||
//region
|
||||
|
||||
private static class QueuedRunnable implements Runnable
|
||||
{
|
||||
/** used to easily track what's being done on the render thread */
|
||||
public final String name;
|
||||
public final Runnable renderCall;
|
||||
/** will be null on release build to reduce GC pressure */
|
||||
@Nullable
|
||||
public final StackTraceElement[] stackTrace;
|
||||
|
||||
|
||||
|
||||
//=============//
|
||||
// constructor //
|
||||
//=============//
|
||||
//region
|
||||
|
||||
public QueuedRunnable(String name, Runnable renderCall, @Nullable StackTraceElement[] stackTrace)
|
||||
{
|
||||
this.name = name;
|
||||
this.renderCall = renderCall;
|
||||
this.stackTrace = stackTrace;
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
|
||||
|
||||
//=========//
|
||||
// running //
|
||||
//=========//
|
||||
//region
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
this.renderCall.run();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
RuntimeException error = new RuntimeException("Uncaught Exception during GL call execution. StackTrace: ["+(this.stackTrace != null ? "Present" : "Missing")+"] Error: ["+e.getMessage()+"]", e);
|
||||
if (this.stackTrace != null)
|
||||
{
|
||||
error.setStackTrace(this.stackTrace);
|
||||
}
|
||||
LOGGER.error("[" + Thread.currentThread().getName() + "] ran into an unexpected error running a GL call, Error: ["+ e.getMessage() +"].", error);
|
||||
}
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
|
||||
|
||||
//================//
|
||||
// base overrides //
|
||||
//================//
|
||||
//region
|
||||
|
||||
@Override
|
||||
public String toString() { return this.name; }
|
||||
|
||||
//endregion
|
||||
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -346,7 +346,7 @@ public class RenderableBoxGroup
|
||||
@Override
|
||||
public void close()
|
||||
{
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() ->
|
||||
RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("RenderBoxGroup Close", () ->
|
||||
{
|
||||
this.vertexBufferContainer.close();
|
||||
this.altVertexBufferContainer.close();
|
||||
|
||||
Reference in New Issue
Block a user