Skip to content

Commit a7d1773

Browse files
committed
Merge branch 'dev/1.21.5' into dev/1.21.6
2 parents 3e43b77 + 7684ab5 commit a7d1773

File tree

3 files changed

+79
-8
lines changed

3 files changed

+79
-8
lines changed
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package com.ishland.c2me.base.common.threadstate;
22

3+
import com.ishland.c2me.base.common.util.TimeUtil;
34
import net.minecraft.server.world.ServerWorld;
45
import net.minecraft.util.math.ChunkPos;
56
import net.minecraft.world.chunk.ChunkStatus;
67

7-
public record SyncLoadWork(ServerWorld world, ChunkPos chunkPos, ChunkStatus targetStatus, boolean create) implements RunningWork {
8+
public record SyncLoadWork(ServerWorld world, ChunkPos chunkPos, ChunkStatus targetStatus, boolean create, long startTime) implements RunningWork {
9+
10+
public SyncLoadWork(ServerWorld world, ChunkPos chunkPos, ChunkStatus targetStatus, boolean create) {
11+
this(world, chunkPos, targetStatus, create, System.nanoTime());
12+
}
813

914
@Override
1015
public String toString() {
11-
return String.format("Sync load chunk %s to status %s in world %s (create=%s)", chunkPos, targetStatus, world.getRegistryKey().getValue(), create);
16+
return String.format("Sync load chunk %s to status %s in world %s (create=%s) (%s elapsed)",
17+
chunkPos, targetStatus, world.getRegistryKey().getValue(), create, TimeUtil.formatElapsedTime(System.nanoTime() - startTime));
1218
}
1319

1420
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.ishland.c2me.base.common.util;
2+
3+
import java.util.Locale;
4+
import java.util.concurrent.TimeUnit;
5+
6+
public class TimeUtil {
7+
8+
public static String formatElapsedTime(long nanos) {
9+
if (nanos < 0) {
10+
return nanos + " ns";
11+
}
12+
if (nanos == 0) {
13+
return "0 ns";
14+
}
15+
16+
TimeUnit unit = chooseUnit(nanos);
17+
double value = (double) nanos / TimeUnit.NANOSECONDS.convert(1, unit);
18+
19+
return formatCompact4Digits(value) + " " + abbreviate(unit);
20+
}
21+
22+
static String formatCompact4Digits(double value) {
23+
return String.format(Locale.ROOT, "%.4g", value);
24+
}
25+
26+
private static TimeUnit chooseUnit(long nanos) {
27+
if (TimeUnit.DAYS.convert(nanos, TimeUnit.NANOSECONDS) > 0) {
28+
return TimeUnit.DAYS;
29+
}
30+
if (TimeUnit.HOURS.convert(nanos, TimeUnit.NANOSECONDS) > 0) {
31+
return TimeUnit.HOURS;
32+
}
33+
if (TimeUnit.MINUTES.convert(nanos, TimeUnit.NANOSECONDS) > 0) {
34+
return TimeUnit.MINUTES;
35+
}
36+
if (TimeUnit.SECONDS.convert(nanos, TimeUnit.NANOSECONDS) > 0) {
37+
return TimeUnit.SECONDS;
38+
}
39+
if (TimeUnit.MILLISECONDS.convert(nanos, TimeUnit.NANOSECONDS) > 0) {
40+
return TimeUnit.MILLISECONDS;
41+
}
42+
if (TimeUnit.MICROSECONDS.convert(nanos, TimeUnit.NANOSECONDS) > 0) {
43+
return TimeUnit.MICROSECONDS;
44+
}
45+
return TimeUnit.NANOSECONDS;
46+
}
47+
48+
private static String abbreviate(TimeUnit unit) {
49+
return switch (unit) {
50+
case NANOSECONDS -> "ns";
51+
case MICROSECONDS -> "\u03bcs"; // μs
52+
case MILLISECONDS -> "ms";
53+
case SECONDS -> "s";
54+
case MINUTES -> "min";
55+
case HOURS -> "h";
56+
case DAYS -> "d";
57+
default -> throw new AssertionError();
58+
};
59+
}
60+
61+
}

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/threadstate/ChunkTaskWork.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,42 @@
11
package com.ishland.c2me.rewrites.chunksystem.common.threadstate;
22

33
import com.ishland.c2me.base.common.threadstate.RunningWork;
4+
import com.ishland.c2me.base.common.util.TimeUtil;
45
import com.ishland.c2me.base.mixin.access.IThreadedAnvilChunkStorage;
56
import com.ishland.c2me.rewrites.chunksystem.common.ChunkLoadingContext;
67
import com.ishland.c2me.rewrites.chunksystem.common.NewChunkStatus;
78
import net.minecraft.server.world.ServerWorld;
89
import net.minecraft.util.math.ChunkPos;
910

10-
public record ChunkTaskWork(ServerWorld world, ChunkPos chunkPos, NewChunkStatus status, boolean isUpgrade) implements RunningWork {
11+
public record ChunkTaskWork(ServerWorld world, ChunkPos chunkPos, NewChunkStatus status, boolean isUpgrade, long startTime) implements RunningWork {
1112

1213
public ChunkTaskWork(ChunkLoadingContext context, NewChunkStatus status, boolean isUpgrade) {
1314
this(
1415
((IThreadedAnvilChunkStorage) context.tacs()).getWorld(),
1516
context.holder().getKey(),
1617
status,
17-
isUpgrade
18+
isUpgrade,
19+
System.nanoTime()
1820
);
1921
}
2022

2123
@Override
2224
public String toString() {
2325
if (isUpgrade) {
2426
return String.format(
25-
"Upgrading chunk %s to %s in world %s",
27+
"Upgrading chunk %s to %s in world %s (%s elapsed)",
2628
chunkPos,
2729
status,
28-
world.getRegistryKey().getValue()
30+
world.getRegistryKey().getValue(),
31+
TimeUtil.formatElapsedTime(System.nanoTime() - startTime)
2932
);
3033
} else {
3134
return String.format(
32-
"Downgrading chunk %s from %s in world %s",
35+
"Downgrading chunk %s from %s in world %s (%s elapsed)",
3336
chunkPos,
3437
status,
35-
world.getRegistryKey().getValue()
38+
world.getRegistryKey().getValue(),
39+
TimeUtil.formatElapsedTime(System.nanoTime() - startTime)
3640
);
3741
}
3842
}

0 commit comments

Comments
 (0)