JfrStatsParser.java
net.minecraft.util.profiling.jfr.parse.JfrStatsParser
信息
- 全限定名:net.minecraft.util.profiling.jfr.parse.JfrStatsParser
- 类型:public class
- 包:net.minecraft.util.profiling.jfr.parse
- 源码路径:src/main/java/net/minecraft/util/profiling/jfr/parse/JfrStatsParser.java
- 起始行号:L33
- 职责:
TODO
字段/常量
-
recordingStarted- 类型:
Instant - 修饰符:
private - 源码定位:
L34 - 说明:
TODO
- 类型:
-
recordingEnded- 类型:
Instant - 修饰符:
private - 源码定位:
L35 - 说明:
TODO
- 类型:
-
chunkGenStats- 类型:
List<ChunkGenStat> - 修饰符:
private final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
structureGenStats- 类型:
List<StructureGenStat> - 修饰符:
private final - 源码定位:
L37 - 说明:
TODO
- 类型:
-
cpuLoadStat- 类型:
List<CpuLoadStat> - 修饰符:
private final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
receivedPackets- 类型:
Map<PacketIdentification,JfrStatsParser.MutableCountAndSize> - 修饰符:
private final - 源码定位:
L39 - 说明:
TODO
- 类型:
-
sentPackets- 类型:
Map<PacketIdentification,JfrStatsParser.MutableCountAndSize> - 修饰符:
private final - 源码定位:
L40 - 说明:
TODO
- 类型:
-
readChunks- 类型:
Map<ChunkIdentification,JfrStatsParser.MutableCountAndSize> - 修饰符:
private final - 源码定位:
L41 - 说明:
TODO
- 类型:
-
writtenChunks- 类型:
Map<ChunkIdentification,JfrStatsParser.MutableCountAndSize> - 修饰符:
private final - 源码定位:
L42 - 说明:
TODO
- 类型:
-
fileWrites- 类型:
List<FileIOStat> - 修饰符:
private final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
fileReads- 类型:
List<FileIOStat> - 修饰符:
private final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
garbageCollections- 类型:
int - 修饰符:
private - 源码定位:
L45 - 说明:
TODO
- 类型:
-
gcTotalDuration- 类型:
Duration - 修饰符:
private - 源码定位:
L46 - 说明:
TODO
- 类型:
-
gcHeapStats- 类型:
List<GcHeapStat> - 修饰符:
private final - 源码定位:
L47 - 说明:
TODO
- 类型:
-
threadAllocationStats- 类型:
List<ThreadAllocationStat> - 修饰符:
private final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
fps- 类型:
List<FpsStat> - 修饰符:
private final - 源码定位:
L49 - 说明:
TODO
- 类型:
-
serverTickTimes- 类型:
List<TickTimeStat> - 修饰符:
private final - 源码定位:
L50 - 说明:
TODO
- 类型:
-
worldCreationDuration- 类型:
Duration - 修饰符:
private - 源码定位:
L51 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.util.profiling.jfr.parse.JfrStatsParser.MutableCountAndSize- 类型:
class - 修饰符:
public static final - 源码定位:
L193 - 说明:
TODO
- 类型:
构造器
private JfrStatsParser(Stream<RecordedEvent> events) @ L53
- 构造器名:JfrStatsParser
- 源码定位:L53
- 修饰符:private
参数:
- events: Stream
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static JfrStatsResult parse(Path path) @ L57
- 方法名:parse
- 源码定位:L57
- 返回类型:JfrStatsResult
- 修饰符:public static
参数:
- path: Path
说明:
TODO
private JfrStatsResult results() @ L89
- 方法名:results
- 源码定位:L89
- 返回类型:JfrStatsResult
- 修饰符:private
参数:
- 无
说明:
TODO
private void capture(Stream<RecordedEvent> events) @ L112
- 方法名:capture
- 源码定位:L112
- 返回类型:void
- 修饰符:private
参数:
- events: Stream
说明:
TODO
private void incrementPacket(RecordedEvent event, int packetSize, Map<PacketIdentification,JfrStatsParser.MutableCountAndSize> packets) @ L173
- 方法名:incrementPacket
- 源码定位:L173
- 返回类型:void
- 修饰符:private
参数:
- event: RecordedEvent
- packetSize: int
- packets: Map<PacketIdentification,JfrStatsParser.MutableCountAndSize>
说明:
TODO
private void incrementChunk(RecordedEvent event, int chunkSize, Map<ChunkIdentification,JfrStatsParser.MutableCountAndSize> packets) @ L177
- 方法名:incrementChunk
- 源码定位:L177
- 返回类型:void
- 修饰符:private
参数:
- event: RecordedEvent
- chunkSize: int
- packets: Map<ChunkIdentification,JfrStatsParser.MutableCountAndSize>
说明:
TODO
private void appendFileIO(RecordedEvent event, List<FileIOStat> stats, String sizeField) @ L181
- 方法名:appendFileIO
- 源码定位:L181
- 返回类型:void
- 修饰符:private
参数:
- event: RecordedEvent
- stats: List
- sizeField: String
说明:
TODO
private static <T> IoSummary<T> collectIoStats(Duration recordingDuration, Map<T,JfrStatsParser.MutableCountAndSize> packetStats) @ L185
- 方法名:collectIoStats
- 源码定位:L185
- 返回类型:
IoSummary - 修饰符:private static
参数:
- recordingDuration: Duration
- packetStats: Map<T,JfrStatsParser.MutableCountAndSize>
说明:
TODO
代码
public class JfrStatsParser {
private Instant recordingStarted = Instant.EPOCH;
private Instant recordingEnded = Instant.EPOCH;
private final List<ChunkGenStat> chunkGenStats = new ArrayList<>();
private final List<StructureGenStat> structureGenStats = new ArrayList<>();
private final List<CpuLoadStat> cpuLoadStat = new ArrayList<>();
private final Map<PacketIdentification, JfrStatsParser.MutableCountAndSize> receivedPackets = new HashMap<>();
private final Map<PacketIdentification, JfrStatsParser.MutableCountAndSize> sentPackets = new HashMap<>();
private final Map<ChunkIdentification, JfrStatsParser.MutableCountAndSize> readChunks = new HashMap<>();
private final Map<ChunkIdentification, JfrStatsParser.MutableCountAndSize> writtenChunks = new HashMap<>();
private final List<FileIOStat> fileWrites = new ArrayList<>();
private final List<FileIOStat> fileReads = new ArrayList<>();
private int garbageCollections;
private Duration gcTotalDuration = Duration.ZERO;
private final List<GcHeapStat> gcHeapStats = new ArrayList<>();
private final List<ThreadAllocationStat> threadAllocationStats = new ArrayList<>();
private final List<FpsStat> fps = new ArrayList<>();
private final List<TickTimeStat> serverTickTimes = new ArrayList<>();
private @Nullable Duration worldCreationDuration = null;
private JfrStatsParser(Stream<RecordedEvent> events) {
this.capture(events);
}
public static JfrStatsResult parse(Path path) {
try {
JfrStatsResult var4;
try (final RecordingFile recordingFile = new RecordingFile(path)) {
Iterator<RecordedEvent> iterator = new Iterator<RecordedEvent>() {
@Override
public boolean hasNext() {
return recordingFile.hasMoreEvents();
}
public RecordedEvent next() {
if (!this.hasNext()) {
throw new NoSuchElementException();
} else {
try {
return recordingFile.readEvent();
} catch (IOException var2) {
throw new UncheckedIOException(var2);
}
}
}
};
Stream<RecordedEvent> events = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 1297), false);
var4 = new JfrStatsParser(events).results();
}
return var4;
} catch (IOException var7) {
throw new UncheckedIOException(var7);
}
}
private JfrStatsResult results() {
Duration recordingDuration = Duration.between(this.recordingStarted, this.recordingEnded);
return new JfrStatsResult(
this.recordingStarted,
this.recordingEnded,
recordingDuration,
this.worldCreationDuration,
this.fps,
this.serverTickTimes,
this.cpuLoadStat,
GcHeapStat.summary(recordingDuration, this.gcHeapStats, this.gcTotalDuration, this.garbageCollections),
ThreadAllocationStat.summary(this.threadAllocationStats),
collectIoStats(recordingDuration, this.receivedPackets),
collectIoStats(recordingDuration, this.sentPackets),
collectIoStats(recordingDuration, this.writtenChunks),
collectIoStats(recordingDuration, this.readChunks),
FileIOStat.summary(recordingDuration, this.fileWrites),
FileIOStat.summary(recordingDuration, this.fileReads),
this.chunkGenStats,
this.structureGenStats
);
}
private void capture(Stream<RecordedEvent> events) {
events.forEach(event -> {
if (event.getEndTime().isAfter(this.recordingEnded) || this.recordingEnded.equals(Instant.EPOCH)) {
this.recordingEnded = event.getEndTime();
}
if (event.getStartTime().isBefore(this.recordingStarted) || this.recordingStarted.equals(Instant.EPOCH)) {
this.recordingStarted = event.getStartTime();
}
String s0$ = event.getEventType().getName();
switch (s0$) {
case "minecraft.ChunkGeneration":
this.chunkGenStats.add(ChunkGenStat.from(event));
break;
case "minecraft.StructureGeneration":
this.structureGenStats.add(StructureGenStat.from(event));
break;
case "minecraft.LoadWorld":
this.worldCreationDuration = event.getDuration();
break;
case "minecraft.ClientFps":
this.fps.add(FpsStat.from(event, "fps"));
break;
case "minecraft.ServerTickTime":
this.serverTickTimes.add(TickTimeStat.from(event));
break;
case "minecraft.PacketReceived":
this.incrementPacket(event, event.getInt("bytes"), this.receivedPackets);
break;
case "minecraft.PacketSent":
this.incrementPacket(event, event.getInt("bytes"), this.sentPackets);
break;
case "minecraft.ChunkRegionRead":
this.incrementChunk(event, event.getInt("bytes"), this.readChunks);
break;
case "minecraft.ChunkRegionWrite":
this.incrementChunk(event, event.getInt("bytes"), this.writtenChunks);
break;
case "jdk.ThreadAllocationStatistics":
this.threadAllocationStats.add(ThreadAllocationStat.from(event));
break;
case "jdk.GCHeapSummary":
this.gcHeapStats.add(GcHeapStat.from(event));
break;
case "jdk.CPULoad":
this.cpuLoadStat.add(CpuLoadStat.from(event));
break;
case "jdk.FileWrite":
this.appendFileIO(event, this.fileWrites, "bytesWritten");
break;
case "jdk.FileRead":
this.appendFileIO(event, this.fileReads, "bytesRead");
break;
case "jdk.GarbageCollection":
this.garbageCollections++;
this.gcTotalDuration = this.gcTotalDuration.plus(event.getDuration());
}
});
}
private void incrementPacket(RecordedEvent event, int packetSize, Map<PacketIdentification, JfrStatsParser.MutableCountAndSize> packets) {
packets.computeIfAbsent(PacketIdentification.from(event), ignored -> new JfrStatsParser.MutableCountAndSize()).increment(packetSize);
}
private void incrementChunk(RecordedEvent event, int chunkSize, Map<ChunkIdentification, JfrStatsParser.MutableCountAndSize> packets) {
packets.computeIfAbsent(ChunkIdentification.from(event), ignored -> new JfrStatsParser.MutableCountAndSize()).increment(chunkSize);
}
private void appendFileIO(RecordedEvent event, List<FileIOStat> stats, String sizeField) {
stats.add(new FileIOStat(event.getDuration(), event.getString("path"), event.getLong(sizeField)));
}
private static <T> IoSummary<T> collectIoStats(Duration recordingDuration, Map<T, JfrStatsParser.MutableCountAndSize> packetStats) {
List<Pair<T, IoSummary.CountAndSize>> summaryStats = packetStats.entrySet()
.stream()
.map(e -> Pair.of(e.getKey(), e.getValue().toCountAndSize()))
.toList();
return new IoSummary<>(recordingDuration, summaryStats);
}
public static final class MutableCountAndSize {
private long count;
private long totalSize;
public void increment(int bytes) {
this.totalSize += bytes;
this.count++;
}
public IoSummary.CountAndSize toCountAndSize() {
return new IoSummary.CountAndSize(this.count, this.totalSize);
}
}
}引用的其他类
-
- 引用位置:
构造调用/返回值 - 关联成员:
JfrStatsResult()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
ChunkGenStat.from()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
ChunkIdentification.from()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
CpuLoadStat.from()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用/构造调用 - 关联成员:
FileIOStat(), FileIOStat.summary()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
FpsStat.from()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
GcHeapStat.from(), GcHeapStat.summary()
- 引用位置:
-
- 引用位置:
方法调用/构造调用/返回值 - 关联成员:
CountAndSize(), IoSummary.CountAndSize()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
PacketIdentification.from()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
StructureGenStat.from()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
ThreadAllocationStat.from(), ThreadAllocationStat.summary()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
TickTimeStat.from()
- 引用位置: