54 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.util.profiling.jfr.stats;
 | |
| 
 | |
| import com.mojang.datafixers.util.Pair;
 | |
| import java.time.Duration;
 | |
| import java.util.Comparator;
 | |
| import java.util.List;
 | |
| 
 | |
| public final class IoSummary<T> {
 | |
| 	private final IoSummary.CountAndSize totalCountAndSize;
 | |
| 	private final List<Pair<T, IoSummary.CountAndSize>> largestSizeContributors;
 | |
| 	private final Duration recordingDuration;
 | |
| 
 | |
| 	public IoSummary(Duration recordingDuration, List<Pair<T, IoSummary.CountAndSize>> entries) {
 | |
| 		this.recordingDuration = recordingDuration;
 | |
| 		this.totalCountAndSize = (IoSummary.CountAndSize)entries.stream()
 | |
| 			.map(Pair::getSecond)
 | |
| 			.reduce(new IoSummary.CountAndSize(0L, 0L), IoSummary.CountAndSize::add);
 | |
| 		this.largestSizeContributors = entries.stream().sorted(Comparator.comparing(Pair::getSecond, IoSummary.CountAndSize.SIZE_THEN_COUNT)).limit(10L).toList();
 | |
| 	}
 | |
| 
 | |
| 	public double getCountsPerSecond() {
 | |
| 		return (double)this.totalCountAndSize.totalCount / this.recordingDuration.getSeconds();
 | |
| 	}
 | |
| 
 | |
| 	public double getSizePerSecond() {
 | |
| 		return (double)this.totalCountAndSize.totalSize / this.recordingDuration.getSeconds();
 | |
| 	}
 | |
| 
 | |
| 	public long getTotalCount() {
 | |
| 		return this.totalCountAndSize.totalCount;
 | |
| 	}
 | |
| 
 | |
| 	public long getTotalSize() {
 | |
| 		return this.totalCountAndSize.totalSize;
 | |
| 	}
 | |
| 
 | |
| 	public List<Pair<T, IoSummary.CountAndSize>> largestSizeContributors() {
 | |
| 		return this.largestSizeContributors;
 | |
| 	}
 | |
| 
 | |
| 	public record CountAndSize(long totalCount, long totalSize) {
 | |
| 		static final Comparator<IoSummary.CountAndSize> SIZE_THEN_COUNT = Comparator.comparing(IoSummary.CountAndSize::totalSize)
 | |
| 			.thenComparing(IoSummary.CountAndSize::totalCount)
 | |
| 			.reversed();
 | |
| 
 | |
| 		IoSummary.CountAndSize add(IoSummary.CountAndSize countAndSize) {
 | |
| 			return new IoSummary.CountAndSize(this.totalCount + countAndSize.totalCount, this.totalSize + countAndSize.totalSize);
 | |
| 		}
 | |
| 
 | |
| 		public float averageSize() {
 | |
| 			return (float)this.totalSize / (float)this.totalCount;
 | |
| 		}
 | |
| 	}
 | |
| }
 |