MetricsRegistry.java
net.minecraft.util.profiling.metrics.MetricsRegistry
信息
- 全限定名:net.minecraft.util.profiling.metrics.MetricsRegistry
- 类型:public class
- 包:net.minecraft.util.profiling.metrics
- 源码路径:src/main/java/net/minecraft/util/profiling/metrics/MetricsRegistry.java
- 起始行号:L10
- 职责:
TODO
字段/常量
-
INSTANCE- 类型:
MetricsRegistry - 修饰符:
public static final - 源码定位:
L11 - 说明:
TODO
- 类型:
-
measuredInstances- 类型:
WeakHashMap<ProfilerMeasured,Void> - 修饰符:
private final - 源码定位:
L12 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.util.profiling.metrics.MetricsRegistry.AggregatedMetricSampler- 类型:
class - 修饰符:
private static - 源码定位:
L45 - 说明:
TODO
- 类型:
构造器
private MetricsRegistry() @ L14
- 构造器名:MetricsRegistry
- 源码定位:L14
- 修饰符:private
参数:
- 无
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void add(ProfilerMeasured profilerMeasured) @ L17
- 方法名:add
- 源码定位:L17
- 返回类型:void
- 修饰符:public
参数:
- profilerMeasured: ProfilerMeasured
说明:
TODO
public List<MetricSampler> getRegisteredSamplers() @ L21
- 方法名:getRegisteredSamplers
- 源码定位:L21
- 返回类型:List
- 修饰符:public
参数:
- 无
说明:
TODO
private static List<MetricSampler> aggregateDuplicates(Map<String,List<MetricSampler>> potentialDuplicates) @ L30
- 方法名:aggregateDuplicates
- 源码定位:L30
- 返回类型:List
- 修饰符:private static
参数:
- potentialDuplicates: Map<String,List
>
说明:
TODO
代码
public class MetricsRegistry {
public static final MetricsRegistry INSTANCE = new MetricsRegistry();
private final WeakHashMap<ProfilerMeasured, Void> measuredInstances = new WeakHashMap<>();
private MetricsRegistry() {
}
public void add(ProfilerMeasured profilerMeasured) {
this.measuredInstances.put(profilerMeasured, null);
}
public List<MetricSampler> getRegisteredSamplers() {
Map<String, List<MetricSampler>> samplersByName = this.measuredInstances
.keySet()
.stream()
.flatMap(measuredInstance -> measuredInstance.profiledMetrics().stream())
.collect(Collectors.groupingBy(MetricSampler::getName));
return aggregateDuplicates(samplersByName);
}
private static List<MetricSampler> aggregateDuplicates(Map<String, List<MetricSampler>> potentialDuplicates) {
return potentialDuplicates.entrySet()
.stream()
.map(
entry -> {
String samplerName = entry.getKey();
List<MetricSampler> duplicateSamplers = entry.getValue();
return (MetricSampler)(duplicateSamplers.size() > 1
? new MetricsRegistry.AggregatedMetricSampler(samplerName, duplicateSamplers)
: duplicateSamplers.get(0));
}
)
.collect(Collectors.toList());
}
private static class AggregatedMetricSampler extends MetricSampler {
private final List<MetricSampler> delegates;
private AggregatedMetricSampler(String name, List<MetricSampler> delegates) {
super(name, delegates.get(0).getCategory(), () -> averageValueFromDelegates(delegates), () -> beforeTick(delegates), thresholdTest(delegates));
this.delegates = delegates;
}
private static MetricSampler.ThresholdTest thresholdTest(List<MetricSampler> delegates) {
return value -> delegates.stream().anyMatch(delegate -> delegate.thresholdTest != null ? delegate.thresholdTest.test(value) : false);
}
private static void beforeTick(List<MetricSampler> delegates) {
for (MetricSampler delegate : delegates) {
delegate.onStartTick();
}
}
private static double averageValueFromDelegates(List<MetricSampler> delegates) {
double aggregatedValue = 0.0;
for (MetricSampler delegate : delegates) {
aggregatedValue += delegate.getSampler().getAsDouble();
}
return aggregatedValue / delegates.size();
}
@Override
public boolean equals(@Nullable Object o) {
if (this == o) {
return true;
} else if (o == null || this.getClass() != o.getClass()) {
return false;
} else if (!super.equals(o)) {
return false;
} else {
MetricsRegistry.AggregatedMetricSampler that = (MetricsRegistry.AggregatedMetricSampler)o;
return this.delegates.equals(that.delegates);
}
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), this.delegates);
}
}
}引用的其他类
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: