ChunkBatchSizeCalculator.java
net.minecraft.client.multiplayer.ChunkBatchSizeCalculator
信息
- 全限定名:net.minecraft.client.multiplayer.ChunkBatchSizeCalculator
- 类型:public class
- 包:net.minecraft.client.multiplayer
- 源码路径:src/main/java/net/minecraft/client/multiplayer/ChunkBatchSizeCalculator.java
- 起始行号:L9
- 职责:
TODO
字段/常量
-
MAX_OLD_SAMPLES_WEIGHT- 类型:
int - 修饰符:
private static final - 源码定位:
L10 - 说明:
TODO
- 类型:
-
CLAMP_COEFFICIENT- 类型:
int - 修饰符:
private static final - 源码定位:
L11 - 说明:
TODO
- 类型:
-
aggregatedNanosPerChunk- 类型:
double - 修饰符:
private - 源码定位:
L12 - 说明:
TODO
- 类型:
-
oldSamplesWeight- 类型:
int - 修饰符:
private - 源码定位:
L13 - 说明:
TODO
- 类型:
-
chunkBatchStartTime- 类型:
long - 修饰符:
private volatile - 源码定位:
L14 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public void onBatchStart() @ L16
- 方法名:onBatchStart
- 源码定位:L16
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void onBatchFinished(int batchSize) @ L20
- 方法名:onBatchFinished
- 源码定位:L20
- 返回类型:void
- 修饰符:public
参数:
- batchSize: int
说明:
TODO
public float getDesiredChunksPerTick() @ L30
- 方法名:getDesiredChunksPerTick
- 源码定位:L30
- 返回类型:float
- 修饰符:public
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.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 batchDuration = Util.getNanos() - this.chunkBatchStartTime;
double nanosPerChunk = batchDuration / batchSize;
double clampedNanosPerChunk = Mth.clamp(nanosPerChunk, this.aggregatedNanosPerChunk / 3.0, this.aggregatedNanosPerChunk * 3.0);
this.aggregatedNanosPerChunk = (this.aggregatedNanosPerChunk * this.oldSamplesWeight + clampedNanosPerChunk) / (this.oldSamplesWeight + 1);
this.oldSamplesWeight = Math.min(49, this.oldSamplesWeight + 1);
}
}
public float getDesiredChunksPerTick() {
return (float)(7000000.0 / this.aggregatedNanosPerChunk);
}
}