minecraft-src/net/minecraft/TracingExecutor.java
2025-07-04 02:49:36 +03:00

58 lines
1.5 KiB
Java

package net.minecraft;
import com.mojang.jtracy.TracyClient;
import com.mojang.jtracy.Zone;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
public record TracingExecutor(ExecutorService service) implements Executor {
public Executor forName(String name) {
if (SharedConstants.IS_RUNNING_IN_IDE) {
return runnable -> this.service.execute(() -> {
Thread thread = Thread.currentThread();
String string2 = thread.getName();
thread.setName(name);
try (Zone zone = TracyClient.beginZone(name, SharedConstants.IS_RUNNING_IN_IDE)) {
runnable.run();
} finally {
thread.setName(string2);
}
});
} else {
return (Executor)(TracyClient.isAvailable() ? runnable -> this.service.execute(() -> {
try (Zone zone = TracyClient.beginZone(name, SharedConstants.IS_RUNNING_IN_IDE)) {
runnable.run();
}
}) : this.service);
}
}
public void execute(Runnable runnable) {
this.service.execute(wrapUnnamed(runnable));
}
public void shutdownAndAwait(long timeout, TimeUnit unit) {
this.service.shutdown();
boolean bl;
try {
bl = this.service.awaitTermination(timeout, unit);
} catch (InterruptedException var6) {
bl = false;
}
if (!bl) {
this.service.shutdownNow();
}
}
private static Runnable wrapUnnamed(Runnable task) {
return !TracyClient.isAvailable() ? task : () -> {
try (Zone zone = TracyClient.beginZone("task", SharedConstants.IS_RUNNING_IN_IDE)) {
task.run();
}
};
}
}