TracyZoneFiller.java

net.minecraft.util.profiling.TracyZoneFiller

信息

  • 全限定名:net.minecraft.util.profiling.TracyZoneFiller
  • 类型:public class
  • 包:net.minecraft.util.profiling
  • 源码路径:src/main/java/net/minecraft/util/profiling/TracyZoneFiller.java
  • 起始行号:L19
  • 实现:ProfilerFiller
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L20
    • 说明:

      TODO

  • STACK_WALKER

    • 类型: StackWalker
    • 修饰符: private static final
    • 源码定位: L21
    • 说明:

      TODO

  • activeZones

    • 类型: List<com.mojang.jtracy.Zone>
    • 修饰符: private final
    • 源码定位: L22
    • 说明:

      TODO

  • plots

    • 类型: Map<String,TracyZoneFiller.PlotAndValue>
    • 修饰符: private final
    • 源码定位: L23
    • 说明:

      TODO

  • name

    • 类型: String
    • 修饰符: private final
    • 源码定位: L24
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.util.profiling.TracyZoneFiller.PlotAndValue
    • 类型: class
    • 修饰符: private static final
    • 源码定位: L122
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

public void startTick() @ L26

  • 方法名:startTick
  • 源码定位:L26
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void endTick() @ L30

  • 方法名:endTick
  • 源码定位:L30
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void push(String name) @ L37

  • 方法名:push
  • 源码定位:L37
  • 返回类型:void
  • 修饰符:public

参数:

  • name: String

说明:

TODO

public void push(Supplier<String> name) @ L62

  • 方法名:push
  • 源码定位:L62
  • 返回类型:void
  • 修饰符:public

参数:

  • name: Supplier

说明:

TODO

public void pop() @ L67

  • 方法名:pop
  • 源码定位:L67
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void popPush(String name) @ L77

  • 方法名:popPush
  • 源码定位:L77
  • 返回类型:void
  • 修饰符:public

参数:

  • name: String

说明:

TODO

public void popPush(Supplier<String> name) @ L83

  • 方法名:popPush
  • 源码定位:L83
  • 返回类型:void
  • 修饰符:public

参数:

  • name: Supplier

说明:

TODO

public void markForCharting(MetricCategory category) @ L89

  • 方法名:markForCharting
  • 源码定位:L89
  • 返回类型:void
  • 修饰符:public

参数:

  • category: MetricCategory

说明:

TODO

public void incrementCounter(String name, int amount) @ L93

  • 方法名:incrementCounter
  • 源码定位:L93
  • 返回类型:void
  • 修饰符:public

参数:

  • name: String
  • amount: int

说明:

TODO

public void incrementCounter(Supplier<String> name, int amount) @ L98

  • 方法名:incrementCounter
  • 源码定位:L98
  • 返回类型:void
  • 修饰符:public

参数:

  • name: Supplier
  • amount: int

说明:

TODO

private com.mojang.jtracy.Zone activeZone() @ L103

  • 方法名:activeZone
  • 源码定位:L103
  • 返回类型:com.mojang.jtracy.Zone
  • 修饰符:private

参数:

说明:

TODO

public void addZoneText(String text) @ L107

  • 方法名:addZoneText
  • 源码定位:L107
  • 返回类型:void
  • 修饰符:public

参数:

  • text: String

说明:

TODO

public void addZoneValue(long value) @ L112

  • 方法名:addZoneValue
  • 源码定位:L112
  • 返回类型:void
  • 修饰符:public

参数:

  • value: long

说明:

TODO

public void setZoneColor(int color) @ L117

  • 方法名:setZoneColor
  • 源码定位:L117
  • 返回类型:void
  • 修饰符:public

参数:

  • color: int

说明:

TODO

代码

public class TracyZoneFiller implements ProfilerFiller {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final StackWalker STACK_WALKER = StackWalker.getInstance(Set.of(Option.RETAIN_CLASS_REFERENCE), 5);
    private final List<com.mojang.jtracy.Zone> activeZones = new ArrayList<>();
    private final Map<String, TracyZoneFiller.PlotAndValue> plots = new HashMap<>();
    private final String name = Thread.currentThread().getName();
 
    @Override
    public void startTick() {
    }
 
    @Override
    public void endTick() {
        for (TracyZoneFiller.PlotAndValue plotAndValue : this.plots.values()) {
            plotAndValue.set(0);
        }
    }
 
    @Override
    public void push(String name) {
        String function = "";
        String file = "";
        int line = 0;
        if (SharedConstants.IS_RUNNING_IN_IDE) {
            Optional<StackFrame> result = STACK_WALKER.walk(
                s -> s.filter(
                        framex -> framex.getDeclaringClass() != TracyZoneFiller.class
                            && framex.getDeclaringClass() != ProfilerFiller.CombinedProfileFiller.class
                    )
                    .findFirst()
            );
            if (result.isPresent()) {
                StackFrame frame = result.get();
                function = frame.getMethodName();
                file = frame.getFileName();
                line = frame.getLineNumber();
            }
        }
 
        com.mojang.jtracy.Zone zone = TracyClient.beginZone(name, function, file, line);
        this.activeZones.add(zone);
    }
 
    @Override
    public void push(Supplier<String> name) {
        this.push(name.get());
    }
 
    @Override
    public void pop() {
        if (this.activeZones.isEmpty()) {
            LOGGER.error("Tried to pop one too many times! Mismatched push() and pop()?");
        } else {
            com.mojang.jtracy.Zone zone = this.activeZones.removeLast();
            zone.close();
        }
    }
 
    @Override
    public void popPush(String name) {
        this.pop();
        this.push(name);
    }
 
    @Override
    public void popPush(Supplier<String> name) {
        this.pop();
        this.push(name.get());
    }
 
    @Override
    public void markForCharting(MetricCategory category) {
    }
 
    @Override
    public void incrementCounter(String name, int amount) {
        this.plots.computeIfAbsent(name, s -> new TracyZoneFiller.PlotAndValue(this.name + " " + name)).add(amount);
    }
 
    @Override
    public void incrementCounter(Supplier<String> name, int amount) {
        this.incrementCounter(name.get(), amount);
    }
 
    private com.mojang.jtracy.Zone activeZone() {
        return this.activeZones.getLast();
    }
 
    @Override
    public void addZoneText(String text) {
        this.activeZone().addText(text);
    }
 
    @Override
    public void addZoneValue(long value) {
        this.activeZone().addValue(value);
    }
 
    @Override
    public void setZoneColor(int color) {
        this.activeZone().setColor(color);
    }
 
    private static final class PlotAndValue {
        private final Plot plot;
        private int value;
 
        private PlotAndValue(String name) {
            this.plot = TracyClient.createPlot(name);
            this.value = 0;
        }
 
        void set(int value) {
            this.value = value;
            this.plot.setValue(value);
        }
 
        void add(int amount) {
            this.set(this.value + amount);
        }
    }
}

引用的其他类