Skip to content

Commit 201db41

Browse files
committed
Rewrite tracking code for game load/world join timing
1 parent 62ea11e commit 201db41

File tree

7 files changed

+42
-37
lines changed

7 files changed

+42
-37
lines changed

common/src/main/java/org/embeddedt/modernfix/ModernFixClient.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
import com.mojang.datafixers.util.Pair;
44
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
55
import net.minecraft.client.Minecraft;
6-
import net.minecraft.client.gui.screens.ConnectScreen;
7-
import net.minecraft.client.gui.screens.Screen;
8-
import net.minecraft.client.gui.screens.TitleScreen;
96
import net.minecraft.network.syncher.EntityDataAccessor;
107
import net.minecraft.network.syncher.SynchedEntityData;
118
import net.minecraft.server.MinecraftServer;
@@ -24,6 +21,7 @@
2421
import java.util.concurrent.CopyOnWriteArrayList;
2522

2623
public class ModernFixClient {
24+
public static ModernFixClient INSTANCE;
2725
public static long worldLoadStartTime;
2826
private static int numRenderTicks;
2927

@@ -39,6 +37,7 @@ public class ModernFixClient {
3937
public static List<ModernFixClientIntegration> CLIENT_INTEGRATIONS = new CopyOnWriteArrayList<>();
4038

4139
public ModernFixClient() {
40+
INSTANCE = this;
4241
// clear reserve as it's not needed
4342
Minecraft.reserve = new byte[0];
4443
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.branding.F3Screen")) {
@@ -60,16 +59,14 @@ public void resetWorldLoadStateMachine() {
6059
tagsUpdated = false;
6160
}
6261

63-
public void onScreenOpening(Screen openingScreen) {
64-
if(openingScreen instanceof ConnectScreen) {
65-
worldLoadStartTime = System.nanoTime();
66-
} else if (openingScreen instanceof TitleScreen && gameStartTimeSeconds < 0) {
67-
gameStartTimeSeconds = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f;
68-
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.GameLoad"))
69-
ModernFix.LOGGER.warn("Game took " + gameStartTimeSeconds + " seconds to start");
70-
ModernFixPlatformHooks.INSTANCE.onLaunchComplete();
71-
ClassInfoManager.clear();
72-
}
62+
public void onGameLaunchFinish() {
63+
if(gameStartTimeSeconds >= 0)
64+
return;
65+
gameStartTimeSeconds = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f;
66+
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.GameLoad"))
67+
ModernFix.LOGGER.warn("Game took " + gameStartTimeSeconds + " seconds to start");
68+
ModernFixPlatformHooks.INSTANCE.onLaunchComplete();
69+
ClassInfoManager.clear();
7370
}
7471

7572
public void onRecipesUpdated() {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.embeddedt.modernfix.common.mixin.feature.measure_time;
2+
3+
import net.minecraft.client.gui.screens.ConnectScreen;
4+
import org.embeddedt.modernfix.ModernFixClient;
5+
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
@Mixin(ConnectScreen.class)
12+
@ClientOnlyMixin
13+
public class ConnectScreenMixin {
14+
@Inject(method = "connect", at = @At("HEAD"))
15+
private void recordConnectStartTime(CallbackInfo ci) {
16+
ModernFixClient.worldLoadStartTime = System.nanoTime();
17+
}
18+
}

common/src/main/java/org/embeddedt/modernfix/common/mixin/feature/measure_time/MinecraftMixin.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,29 @@
22

33
import com.mojang.datafixers.util.Function4;
44
import net.minecraft.client.Minecraft;
5+
import net.minecraft.client.gui.screens.Overlay;
56
import net.minecraft.server.packs.resources.ResourceManager;
67
import net.minecraft.world.level.DataPackConfig;
78
import net.minecraft.core.RegistryAccess;
89
import net.minecraft.world.level.storage.WorldData;
910
import net.minecraft.world.level.storage.LevelStorageSource;
1011
import org.embeddedt.modernfix.ModernFix;
12+
import org.embeddedt.modernfix.ModernFixClient;
1113
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
14+
import org.jetbrains.annotations.Nullable;
1215
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.Shadow;
1317
import org.spongepowered.asm.mixin.injection.At;
1418
import org.spongepowered.asm.mixin.injection.Inject;
19+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1520
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1621

1722
import java.util.function.Function;
1823

1924
@Mixin(Minecraft.class)
2025
@ClientOnlyMixin
2126
public class MinecraftMixin {
27+
@Shadow @Nullable public Overlay overlay;
2228
private long datapackReloadStartTime;
2329

2430
@Inject(method = "makeServerStem", at = @At(value = "HEAD"))
@@ -31,4 +37,11 @@ private void recordReloadEnd(RegistryAccess.RegistryHolder p_238189_1_, Function
3137
float timeSpentReloading = ((float)(System.nanoTime() - datapackReloadStartTime) / 1000000000f);
3238
ModernFix.LOGGER.warn("Datapack reload took " + timeSpentReloading + " seconds.");
3339
}
40+
41+
@Inject(method = "tick", at = @At("HEAD"))
42+
private void onClientTick(CallbackInfo ci) {
43+
if(this.overlay == null) {
44+
ModernFixClient.INSTANCE.onGameLaunchFinish();
45+
}
46+
}
3447
}

fabric/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ dependencies {
3434

3535
modIncludeImplementation(fabricApi.module("fabric-api-base", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
3636
modIncludeImplementation(fabricApi.module("fabric-lifecycle-events-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
37-
modIncludeImplementation(fabricApi.module("fabric-screen-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
37+
modImplementation(fabricApi.module("fabric-screen-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
3838
modIncludeImplementation(fabricApi.module("fabric-command-api-v1", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
3939
modIncludeImplementation(fabricApi.module("fabric-models-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }
4040
modImplementation(fabricApi.module("fabric-resource-loader-v0", rootProject.fabric_api_version)) { exclude group: 'net.fabricmc', module: 'fabric-loader' }

fabric/src/main/java/org/embeddedt/modernfix/ModernFixClientFabric.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22

33
import net.fabricmc.api.ClientModInitializer;
44
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
5-
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
65
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
7-
import net.minecraft.client.Minecraft;
8-
9-
import java.util.concurrent.atomic.AtomicBoolean;
106

117
public class ModernFixClientFabric implements ClientModInitializer {
128
public static ModernFixClient commonMod;
@@ -16,16 +12,6 @@ public void onInitializeClient() {
1612
commonMod = new ModernFixClient();
1713

1814
ClientTickEvents.END_CLIENT_TICK.register((mc) -> commonMod.onRenderTickEnd());
19-
ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
20-
AtomicBoolean hasOpened = new AtomicBoolean(false);
21-
ScreenEvents.beforeTick(screen).register(screen1 -> {
22-
if(Minecraft.getInstance().getOverlay() != null)
23-
return;
24-
if(!hasOpened.getAndSet(true)) {
25-
commonMod.onScreenOpening(screen1);
26-
}
27-
});
28-
});
2915
ServerLifecycleEvents.SERVER_STARTED.register(server -> {
3016
commonMod.onServerStarted(server);
3117
});

fabric/src/main/resources/fabric.mod.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
],
3434
"depends": {
3535
"fabric-lifecycle-events-v1": "*",
36-
"fabric-screen-api-v1": "*",
3736
"fabric-command-api-v1": "*",
3837
"fabric-models-v0": "*",
3938
"minecraft": ">=1.16.2"

forge/src/main/java/org/embeddedt/modernfix/forge/init/ModernFixClientForge.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import net.minecraft.client.KeyMapping;
55
import net.minecraft.client.Minecraft;
66
import net.minecraft.client.gui.components.DebugScreenOverlay;
7-
import net.minecraftforge.client.event.GuiScreenEvent;
87
import net.minecraftforge.client.event.RecipesUpdatedEvent;
98
import net.minecraftforge.client.event.RenderGameOverlayEvent;
109
import net.minecraftforge.client.gui.ForgeIngameGui;
@@ -89,11 +88,4 @@ public void onRecipes(RecipesUpdatedEvent e) {
8988
public void onTags(TagsUpdatedEvent e) {
9089
commonMod.onTagsUpdated();
9190
}
92-
93-
@SubscribeEvent(priority = EventPriority.LOWEST)
94-
public void onScreen(GuiScreenEvent.InitGuiEvent.Pre event) {
95-
if(event.isCanceled())
96-
return;
97-
commonMod.onScreenOpening(event.getGui());
98-
}
9991
}

0 commit comments

Comments
 (0)