package net.minecraft.util.profiling.jfr.parse; import com.mojang.datafixers.util.Pair; import java.time.Duration; import java.time.Instant; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import net.minecraft.util.profiling.jfr.serialize.JfrResultJsonSerializer; import net.minecraft.util.profiling.jfr.stats.ChunkGenStat; import net.minecraft.util.profiling.jfr.stats.ChunkIdentification; import net.minecraft.util.profiling.jfr.stats.CpuLoadStat; import net.minecraft.util.profiling.jfr.stats.IoSummary; import net.minecraft.util.profiling.jfr.stats.PacketIdentification; import net.minecraft.util.profiling.jfr.stats.StructureGenStat; import net.minecraft.util.profiling.jfr.stats.TickTimeStat; import net.minecraft.util.profiling.jfr.stats.TimedStatSummary; import net.minecraft.util.profiling.jfr.stats.GcHeapStat.Summary; import net.minecraft.world.level.chunk.status.ChunkStatus; import org.jetbrains.annotations.Nullable; public record JfrStatsResult( Instant recordingStarted, Instant recordingEnded, Duration recordingDuration, @Nullable Duration worldCreationDuration, List tickTimes, List cpuLoadStats, Summary heapSummary, net.minecraft.util.profiling.jfr.stats.ThreadAllocationStat.Summary threadAllocationSummary, IoSummary receivedPacketsSummary, IoSummary sentPacketsSummary, IoSummary writtenChunks, IoSummary readChunks, net.minecraft.util.profiling.jfr.stats.FileIOStat.Summary fileWrites, net.minecraft.util.profiling.jfr.stats.FileIOStat.Summary fileReads, List chunkGenStats, List structureGenStats ) { public List>> chunkGenSummary() { Map> map = (Map>)this.chunkGenStats .stream() .collect(Collectors.groupingBy(ChunkGenStat::status)); return map.entrySet() .stream() .map(entry -> Pair.of((ChunkStatus)entry.getKey(), TimedStatSummary.summary((List)entry.getValue()))) .sorted(Comparator.comparing(pair -> ((TimedStatSummary)pair.getSecond()).totalDuration()).reversed()) .toList(); } public String asJson() { return new JfrResultJsonSerializer().format(this); } }