State enum

Пакет: com.hypixel.hytale.builtin.hytalegenerator.engine.performanceinstruments

Файл: com/hypixel/hytale/builtin/hytalegenerator/engine/performanceinstruments/HierarchicalTimingProfiler.java

Поля (1)

МодификаторыТипИмя
NOT_STARTED, STARTED, COMPLETED

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.engine.performanceinstruments;

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.LoggerUtil;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;

class="kw">public class HierarchicalTimingProfiler {
   class="kw">private int sampleCount;
   @Nonnull
   class="kw">private HierarchicalTimingProfiler.Probe totalProbe;
   class="kw">private String header;

   class="kw">public HierarchicalTimingProfiler(@Nonnull String var1) {
      this.header = var1;
      this.sampleCount = 0;
      this.totalProbe = null;
   }

   class="kw">public void takeSample(@Nonnull HierarchicalTimingProfiler.Probe var1, boolean var2) {
      if (var2) {
         if (this.totalProbe == null) {
            this.totalProbe = var1;
            this.sampleCount++;
         } else if (!var1.isCompatibleForAddition(this.totalProbe)) {
            LoggerUtil.getLogger().warning("Discarded a probe because of mismatched structures.");
            assert false;
         } else {
            this.sampleCount++;
            this.totalProbe.add(var1);
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      StringBuilder var1 = new StringBuilder();
      var1.append("Performance Report\n");
      var1.append("Sample Count: ").append(this.sampleCount).append("\n");
      var1.append(this.header).append("\n");
      var1.append(this.toString(0, this.totalProbe));
      class="kw">return var1.toString();
   }

   @Nonnull
   class="kw">private String toString(int var1, @Nonnull HierarchicalTimingProfiler.Probe var2) {
      long var3 = var2.getTotalTime_ns() / this.sampleCount;
      StringBuilder var5 = new StringBuilder();
      var5.append("\t".repeat(var1));
      var5.append(var2.getName()).append(": ");
      var5.append(LoggerUtil.nsToMsDecimal(var3)).append(" ms");
      var5.append("\n");
      List var6 = var2.getProbes();

      for (int var7 = 0; var7 < var6.size(); var7++) {
         var5.append(this.toString(var1 + 1, var6.get(var7)));
      }

      class="kw">return var5.toString();
   }

   class="kw">public class="kw">static class Probe {
      @Nonnull
      class="kw">private class="kw">final String name;
      class="kw">private long startTime;
      class="kw">private long totalTime_ns;
      class="kw">private HierarchicalTimingProfiler.Probe.State state;
      class="kw">private List<HierarchicalTimingProfiler.Probe> probes;

      class="kw">public Probe(@Nonnull String var1) {
         this.name = var1;
         this.state = HierarchicalTimingProfiler.Probe.State.NOT_STARTED;
         this.probes = new ArrayList<>(1);
      }

      @Nonnull
      class="kw">public HierarchicalTimingProfiler.Probe start(boolean var1) {
         if (!var1) {
            class="kw">return this;
         }

         this.startTime = System.nanoTime();
         this.state = HierarchicalTimingProfiler.Probe.State.STARTED;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public HierarchicalTimingProfiler.Probe stop(boolean var1) {
         if (!var1) {
            class="kw">return this;
         }

         assert this.state == HierarchicalTimingProfiler.Probe.State.STARTED;
         this.state = HierarchicalTimingProfiler.Probe.State.COMPLETED;
         this.totalTime_ns = System.nanoTime() - this.startTime;
         class="kw">return this;
      }

      class="kw">public long getTotalTime_ns() {
         assert this.state == HierarchicalTimingProfiler.Probe.State.COMPLETED;
         class="kw">return this.totalTime_ns;
      }

      @Nonnull
      class="kw">public String getName() {
         class="kw">return this.name;
      }

      @Nonnull
      class="kw">public List<HierarchicalTimingProfiler.Probe> getProbes() {
         class="kw">return this.probes;
      }

      @Nonnull
      class="kw">public HierarchicalTimingProfiler.Probe createProbe(@Nonnull String var1) {
         HierarchicalTimingProfiler.Probe var2 = new HierarchicalTimingProfiler.Probe(var1);
         this.probes.add(var2);
         class="kw">return var2;
      }

      class="kw">public boolean isCompatibleForAddition(@Nonnull HierarchicalTimingProfiler.Probe var1) {
         if (this.probes.size() == var1.probes.size() && this.name.equals(var1.name)) {
            for (int var2 = 0; var2 < this.probes.size(); var2++) {
               if (!this.probes.get(var2).isCompatibleForAddition(var1.probes.get(var2))) {
                  class="kw">return false;
               }
            }

            class="kw">return true;
         } else {
            class="kw">return false;
         }
      }

      class="kw">public void add(@Nonnull HierarchicalTimingProfiler.Probe var1) {
         assert this.state == HierarchicalTimingProfiler.Probe.State.COMPLETED;
         assert this.isCompatibleForAddition(var1);
         this.totalTime_ns = this.totalTime_ns + var1.getTotalTime_ns();

         for (int var2 = 0; var2 < this.probes.size(); var2++) {
            this.probes.get(var2).add(var1.probes.get(var2));
         }
      }

      class="kw">private enum State {
         NOT_STARTED,
         STARTED,
         COMPLETED;

         State() {
         }
      }
   }
}