minecraft-src/net/minecraft/client/multiplayer/ChunkBatchSizeCalculator.java
2025-07-04 01:41:11 +03:00

33 lines
1.1 KiB
Java

package net.minecraft.client.multiplayer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.Util;
import net.minecraft.util.Mth;
@Environment(EnvType.CLIENT)
public class ChunkBatchSizeCalculator {
private static final int MAX_OLD_SAMPLES_WEIGHT = 49;
private static final int CLAMP_COEFFICIENT = 3;
private double aggregatedNanosPerChunk = 2000000.0;
private int oldSamplesWeight = 1;
private volatile long chunkBatchStartTime = Util.getNanos();
public void onBatchStart() {
this.chunkBatchStartTime = Util.getNanos();
}
public void onBatchFinished(int batchSize) {
if (batchSize > 0) {
double d = Util.getNanos() - this.chunkBatchStartTime;
double e = d / batchSize;
double f = Mth.clamp(e, this.aggregatedNanosPerChunk / 3.0, this.aggregatedNanosPerChunk * 3.0);
this.aggregatedNanosPerChunk = (this.aggregatedNanosPerChunk * this.oldSamplesWeight + f) / (this.oldSamplesWeight + 1);
this.oldSamplesWeight = Math.min(49, this.oldSamplesWeight + 1);
}
}
public float getDesiredChunksPerTick() {
return (float)(7000000.0 / this.aggregatedNanosPerChunk);
}
}