package com.hypixel.hytale.metrics; import com.hypixel.hytale.codec.Codec; import com.hypixel.hytale.codec.ExtraInfo; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.function.Function; import javax.annotation.Nonnull; import org.bson.BsonValue; public class ExecutorMetricsRegistry extends MetricsRegistry { public BsonValue encode(@Nonnull T t, ExtraInfo extraInfo) { return t.isInThread() ? super.encode(t, extraInfo) : CompletableFuture.supplyAsync(() -> super.encode(t, extraInfo), t).join(); } public ExecutorMetricsRegistry register(String id, @Nonnull Function func) { return (ExecutorMetricsRegistry)super.register(id, func); } public ExecutorMetricsRegistry register(String id, Function func, Codec codec) { return (ExecutorMetricsRegistry)super.register(id, func, codec); } public ExecutorMetricsRegistry register(String id, MetricsRegistry metricsRegistry) { return (ExecutorMetricsRegistry)super.register(id, metricsRegistry); } public ExecutorMetricsRegistry register(String id, Function func, Function> codecFunc) { return (ExecutorMetricsRegistry)super.register(id, func, codecFunc); } public interface ExecutorMetric extends Executor { boolean isInThread(); } }