AbstractBenchmarkCommand class

Пакет: com.hypixel.hytale.builtin.triggervolumes.command.benchmark

Файл: com/hypixel/hytale/builtin/triggervolumes/command/benchmark/AbstractBenchmarkCommand.java

extends: AbstractWorldCommand

Поля (19)

МодификаторыТипИмя
final String BENCH_PREFIX
ArrayList var1
int var10
double var10
HistoricMetric var11
long var12
double var12
double var14
double var14
int var16
TriggerVolumeManager var4
Ref var5
BoxShape var5
TransformComponent var6
VolumeEntry var6
Vector3d var7
int var8
double var8
int var9

Методы (9)

МодификаторыВозвратСигнатура
static int cleanupBenchmarkVolumesint cleanupBenchmarkVolumes(@Nonnull TriggerVolumeManager var0)
abstract cleanupBenchmarkVolumes cleanupBenchmarkVolumes(var4)
for for(String var5 : var1)
if if(var4 != null)
if if(var6 != null)
static double round2double round2(double var0)
static void spawnBoxvoid spawnBox(@Nonnull TriggerVolumeManager var0, @Nonnull World var1, @Nonnull String var2, @Nonnull Vector3d var3, int var4)
abstract abstract int spawnVolumesint spawnVolumes(@Nonnull CommandContext var1, @Nonnull TriggerVolumeManager var2, @Nonnull World var3, @Nonnull Vector3d var4, int var5, int var6)
abstract super super(var1, var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.command.benchmark;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.EntityTargetType;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.TriggerVolumesPlugin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.TriggerVolumeManager;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.VolumeEntry;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.shape.BoxShape;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.metrics.metric.HistoricMetric;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.DefaultArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractWorldCommand;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.commands.world.perf.WorldPerfCommand;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.EnumSet;
class="kw">import java.util.Locale;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class="kw">abstract class AbstractBenchmarkCommand class="kw">extends AbstractWorldCommand {
   class="kw">static class="kw">final String BENCH_PREFIX = "tvbench_";
   class="kw">private class="kw">static class="kw">final int MIN_SECONDS = 10;
   @Nonnull
   class="kw">protected class="kw">final RequiredArg<Integer> countArg = this.withRequiredArg("count", "server.commands.triggervolume.benchmark.count.desc", ArgTypes.INTEGER);
   @Nonnull
   class="kw">private class="kw">final DefaultArg<Integer> sizeArg = this.withDefaultArg("size", "server.commands.triggervolume.benchmark.size.desc", ArgTypes.INTEGER, 3, "3");
   @Nonnull
   class="kw">private class="kw">final DefaultArg<Integer> secondsArg = this.withDefaultArg(
      "seconds", "server.commands.triggervolume.benchmark.seconds.desc", ArgTypes.INTEGER, 12, "12"
   );

   class="kw">protected AbstractBenchmarkCommand(@Nonnull String var1, @Nonnull String var2) {
      super(var1, var2);
   }

   @Override
   class="kw">protected class="kw">final void execute(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Store<EntityStore> var3) {
      TriggerVolumeManager var4 = var3.getResource(TriggerVolumesPlugin.get().getManagerResourceType());
      if (var4 != null) {
         Ref var5 = var1.senderAsPlayerRef();
         if (var5 != null && var5.isValid()) {
            TransformComponent var6 = var3.getComponent(var5, TransformComponent.getComponentType());
            if (var6 != null) {
               Vector3d var7 = new Vector3d(var6.getPosition());
               int var8 = Math.max(0, this.countArg.get(var1));
               int var9 = Math.max(1, this.sizeArg.get(var1));
               int var10 = Math.max(10, this.secondsArg.get(var1));
               HistoricMetric var11 = var2.getBufferedTickLengthMetricSet();
               long var12 = var2.getTickStepNanos();
               double var14 = var11.getAverage(0);
               int var16 = this.spawnVolumes(var1, var4, var2, var7, var8, var9);
               var1.sendMessage(Message.translation("server.commands.triggervolume.benchmark.started").param("count", var16).param("seconds", var10));
               CompletableFuture.runAsync(
                  () -> {
                     double var8 = var11.getAverage(0);
                     double var10 = WorldPerfCommand.tpsFromDelta(var14, var12);
                     double var12 = WorldPerfCommand.tpsFromDelta(var8, var12);
                     double var14 = var10 > 0.0 ? (var10 - var12) / var10 * 100.0 : 0.0;
                     var1.sendMessage(
                        Message.translation("server.commands.triggervolume.benchmark.result")
                           .param("baselineTps", round2(var10))
                           .param("loadedTps", round2(var12))
                           .param("baselineMs", round2(var14 / 1000000.0))
                           .param("loadedMs", round2(var8 / 1000000.0))
                           .param("deltaMs", round2((var8 - var14) / 1000000.0))
                           .param("dropPercent", round2(var14))
                           .param("count", var16)
                     );
                     cleanupBenchmarkVolumes(var4);
                  },
                  CompletableFuture.delayedExecutor(var10, TimeUnit.SECONDS, var2)
               );
            }
         }
      }
   }

   class="kw">protected class="kw">abstract int spawnVolumes(
      @Nonnull CommandContext var1, @Nonnull TriggerVolumeManager var2, @Nonnull World var3, @Nonnull Vector3d var4, int var5, int var6
   );

   class="kw">protected class="kw">static void spawnBox(@Nonnull TriggerVolumeManager var0, @Nonnull World var1, @Nonnull String var2, @Nonnull Vector3d var3, int var4) {
      BoxShape var5 = new BoxShape(new Vector3d(-var4, -var4, -var4), new Vector3d(var4, var4, var4));
      VolumeEntry var6 = new VolumeEntry(
         var2, var1.getName().toLowerCase(Locale.ROOT), var3, var5, new ArrayList<>(), EnumSet.of(EntityTargetType.PLAYER), true
      );
      var0.register(var2, var6);
   }

   class="kw">static int cleanupBenchmarkVolumes(@Nonnull TriggerVolumeManager var0) {
      ArrayList var1 = new ArrayList<>();

      for (String var3 : var0.getVolumesMap().keySet()) {
         if (var3.startsWith("tvbench_")) {
            var1.add(var3);
         }
      }

      for (String var5 : var1) {
         var0.unregister(var5);
         var0.notifyViewersRemove(var5);
      }

      class="kw">return var1.size();
   }

   class="kw">private class="kw">static double round2(double var0) {
      class="kw">return Math.round(var0 * 100.0) / 100.0;
   }
}