minecraft-src/net/minecraft/util/profiling/jfr/stats/FileIOStat.java
2025-07-04 01:41:11 +03:00

36 lines
1.3 KiB
Java

package net.minecraft.util.profiling.jfr.stats;
import com.mojang.datafixers.util.Pair;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.jetbrains.annotations.Nullable;
public record FileIOStat(Duration duration, @Nullable String path, long bytes) {
public static FileIOStat.Summary summary(Duration duration, List<FileIOStat> stats) {
long l = stats.stream().mapToLong(fileIOStat -> fileIOStat.bytes).sum();
return new FileIOStat.Summary(
l,
(double)l / duration.getSeconds(),
stats.size(),
(double)stats.size() / duration.getSeconds(),
(Duration)stats.stream().map(FileIOStat::duration).reduce(Duration.ZERO, Duration::plus),
((Map)stats.stream()
.filter(fileIOStat -> fileIOStat.path != null)
.collect(Collectors.groupingBy(fileIOStat -> fileIOStat.path, Collectors.summingLong(fileIOStat -> fileIOStat.bytes))))
.entrySet()
.stream()
.sorted(Entry.comparingByValue().reversed())
.map(entry -> Pair.of((String)entry.getKey(), (Long)entry.getValue()))
.limit(10L)
.toList()
);
}
public record Summary(
long totalBytes, double bytesPerSecond, long counts, double countsPerSecond, Duration timeSpentInIO, List<Pair<String, Long>> topTenContributorsByTotalBytes
) {
}
}