Code/net/minecraft/util/profiling/jfr/stats/ThreadAllocationStat.java

39 lines
1.8 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.util.profiling.jfr.stats;
import com.google.common.base.MoreObjects;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
import jdk.jfr.consumer.RecordedEvent;
import jdk.jfr.consumer.RecordedThread;
public record ThreadAllocationStat(Instant timestamp, String threadName, long totalBytes) {
private static final String UNKNOWN_THREAD = "unknown";
public static ThreadAllocationStat from(RecordedEvent p_185804_) {
RecordedThread recordedthread = p_185804_.getThread("thread");
String s = recordedthread == null ? "unknown" : MoreObjects.firstNonNull(recordedthread.getJavaName(), "unknown");
return new ThreadAllocationStat(p_185804_.getStartTime(), s, p_185804_.getLong("allocated"));
}
public static ThreadAllocationStat.Summary summary(List<ThreadAllocationStat> p_185798_) {
Map<String, Double> map = new TreeMap<>();
Map<String, List<ThreadAllocationStat>> map1 = p_185798_.stream().collect(Collectors.groupingBy(p_185796_ -> p_185796_.threadName));
map1.forEach((p_185801_, p_185802_) -> {
if (p_185802_.size() >= 2) {
ThreadAllocationStat threadallocationstat = p_185802_.get(0);
ThreadAllocationStat threadallocationstat1 = p_185802_.get(p_185802_.size() - 1);
long i = Duration.between(threadallocationstat.timestamp, threadallocationstat1.timestamp).getSeconds();
long j = threadallocationstat1.totalBytes - threadallocationstat.totalBytes;
map.put(p_185801_, (double)j / i);
}
});
return new ThreadAllocationStat.Summary(map);
}
public record Summary(Map<String, Double> allocationsPerSecondByThread) {
}
}