Skip to content

Commit 672ca92

Browse files
committed
Show time to bootstrap stage on Forge
1 parent 744622b commit 672ca92

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.embeddedt.modernfix.util;
2+
3+
import java.util.Locale;
4+
import java.util.concurrent.TimeUnit;
5+
6+
import static java.util.concurrent.TimeUnit.*;
7+
import static java.util.concurrent.TimeUnit.NANOSECONDS;
8+
9+
/**
10+
* All code here is derived from Guava's Stopwatch and Platform classes.
11+
* Too bad it's not a public method call indeed...
12+
*/
13+
public class TimeFormatter {
14+
static String formatCompact4Digits(double value) {
15+
return String.format(Locale.ROOT, "%.4g", value);
16+
}
17+
18+
public static String formatNanos(long nanos) {
19+
TimeUnit unit = chooseUnit(nanos);
20+
double value = (double) nanos / NANOSECONDS.convert(1, unit);
21+
22+
return formatCompact4Digits(value) + " " + abbreviate(unit);
23+
}
24+
25+
private static TimeUnit chooseUnit(long nanos) {
26+
if (DAYS.convert(nanos, NANOSECONDS) > 0) {
27+
return DAYS;
28+
}
29+
if (HOURS.convert(nanos, NANOSECONDS) > 0) {
30+
return HOURS;
31+
}
32+
if (MINUTES.convert(nanos, NANOSECONDS) > 0) {
33+
return MINUTES;
34+
}
35+
if (SECONDS.convert(nanos, NANOSECONDS) > 0) {
36+
return SECONDS;
37+
}
38+
if (MILLISECONDS.convert(nanos, NANOSECONDS) > 0) {
39+
return MILLISECONDS;
40+
}
41+
if (MICROSECONDS.convert(nanos, NANOSECONDS) > 0) {
42+
return MICROSECONDS;
43+
}
44+
return NANOSECONDS;
45+
}
46+
47+
private static String abbreviate(TimeUnit unit) {
48+
switch (unit) {
49+
case NANOSECONDS:
50+
return "ns";
51+
case MICROSECONDS:
52+
return "\u03bcs"; // μs
53+
case MILLISECONDS:
54+
return "ms";
55+
case SECONDS:
56+
return "s";
57+
case MINUTES:
58+
return "min";
59+
case HOURS:
60+
return "h";
61+
case DAYS:
62+
return "d";
63+
default:
64+
throw new AssertionError();
65+
}
66+
}
67+
}

forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapMixin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
import net.minecraft.server.Bootstrap;
44
import org.apache.logging.log4j.Logger;
55
import org.embeddedt.modernfix.forge.load.ModWorkManagerQueue;
6+
import org.embeddedt.modernfix.util.TimeFormatter;
67
import org.spongepowered.asm.mixin.Final;
78
import org.spongepowered.asm.mixin.Mixin;
89
import org.spongepowered.asm.mixin.Shadow;
910
import org.spongepowered.asm.mixin.injection.At;
1011
import org.spongepowered.asm.mixin.injection.Inject;
1112
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1213

14+
import java.lang.management.ManagementFactory;
15+
1316
@Mixin(Bootstrap.class)
1417
public class BootstrapMixin {
1518
@Shadow private static boolean isBootstrapped;
@@ -19,7 +22,7 @@ public class BootstrapMixin {
1922
@Inject(method = "bootStrap", at = @At("HEAD"))
2023
private static void doModernFixBootstrap(CallbackInfo ci) {
2124
if(!isBootstrapped) {
22-
LOGGER.info("ModernFix bootstrap");
25+
LOGGER.info("ModernFix reached bootstrap stage ({} after launch)", TimeFormatter.formatNanos(ManagementFactory.getRuntimeMXBean().getUptime() * 1000L));
2326
ModWorkManagerQueue.replace();
2427
}
2528
}

0 commit comments

Comments
 (0)