From 8a01ebea410bd7e81f88b7239277d618f7be17c2 Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 23 Aug 2019 06:04:13 +0200 Subject: [PATCH] profiler remembers requestee, and better rounding in scarpet --- .../java/carpet/commands/TickCommand.java | 4 +- .../java/carpet/helpers/BlockRotator.java | 3 +- src/main/java/carpet/logging/HUDLogger.java | 6 ++- src/main/java/carpet/logging/Logger.java | 11 +++--- .../java/carpet/script/value/EntityValue.java | 6 +++ .../carpet/script/value/NumericValue.java | 8 +++- .../java/carpet/utils/CarpetProfiler.java | 37 ++++++++++++------- 7 files changed, 50 insertions(+), 25 deletions(-) diff --git a/src/main/java/carpet/commands/TickCommand.java b/src/main/java/carpet/commands/TickCommand.java index 83854462..e15d8d26 100644 --- a/src/main/java/carpet/commands/TickCommand.java +++ b/src/main/java/carpet/commands/TickCommand.java @@ -130,13 +130,13 @@ public class TickCommand private static int healthReport(ServerCommandSource source, int ticks) { - CarpetProfiler.prepare_tick_report(source.getMinecraftServer(), ticks); + CarpetProfiler.prepare_tick_report(source, ticks); return 1; } private static int healthEntities(ServerCommandSource source, int ticks) { - CarpetProfiler.prepare_entity_report(source.getMinecraftServer(), ticks); + CarpetProfiler.prepare_entity_report(source, ticks); return 1; } diff --git a/src/main/java/carpet/helpers/BlockRotator.java b/src/main/java/carpet/helpers/BlockRotator.java index 4ac7b02d..2a3f8c47 100644 --- a/src/main/java/carpet/helpers/BlockRotator.java +++ b/src/main/java/carpet/helpers/BlockRotator.java @@ -21,6 +21,7 @@ import net.minecraft.block.RepeaterBlock; import net.minecraft.block.SlabBlock; import net.minecraft.block.StairsBlock; import net.minecraft.block.TrapdoorBlock; +import net.minecraft.block.dispenser.DispenserBehavior; import net.minecraft.block.dispenser.FallibleItemDispenserBehavior; import net.minecraft.block.enums.BlockHalf; import net.minecraft.block.enums.ComparatorMode; @@ -299,7 +300,7 @@ public class BlockRotator return false; } - public static class CactusDispenserBehaviour extends FallibleItemDispenserBehavior + public static class CactusDispenserBehaviour extends FallibleItemDispenserBehavior implements DispenserBehavior { @Override protected ItemStack dispenseSilently(BlockPointer source, ItemStack stack) diff --git a/src/main/java/carpet/logging/HUDLogger.java b/src/main/java/carpet/logging/HUDLogger.java index 0b2ba1ac..044fafa1 100644 --- a/src/main/java/carpet/logging/HUDLogger.java +++ b/src/main/java/carpet/logging/HUDLogger.java @@ -1,7 +1,9 @@ package carpet.logging; import carpet.utils.HUDController; +import net.minecraft.client.network.packet.TitleS2CPacket; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.BaseText; public class HUDLogger extends Logger @@ -14,13 +16,13 @@ public class HUDLogger extends Logger @Override public void removePlayer(String playerName) { - PlayerEntity player = playerFromName(playerName); + ServerPlayerEntity player = playerFromName(playerName); if (player != null) HUDController.clear_player(player); super.removePlayer(playerName); } @Override - public void sendPlayerMessage(PlayerEntity player, BaseText... messages) + public void sendPlayerMessage(ServerPlayerEntity player, BaseText... messages) { for (BaseText m:messages) HUDController.addMessage(player, m); } diff --git a/src/main/java/carpet/logging/Logger.java b/src/main/java/carpet/logging/Logger.java index baec2103..b320d537 100644 --- a/src/main/java/carpet/logging/Logger.java +++ b/src/main/java/carpet/logging/Logger.java @@ -2,6 +2,7 @@ package carpet.logging; import carpet.CarpetServer; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.BaseText; import java.util.Arrays; @@ -94,7 +95,7 @@ public class Logger { for (Map.Entry en : subscribedOnlinePlayers.entrySet()) { - PlayerEntity player = playerFromName(en.getKey()); + ServerPlayerEntity player = playerFromName(en.getKey()); if (player != null) { BaseText [] messages = messagePromise.get(en.getValue(),player); @@ -115,7 +116,7 @@ public class Logger Map cannedMessages = new HashMap<>(); for (Map.Entry en : subscribedOnlinePlayers.entrySet()) { - PlayerEntity player = playerFromName(en.getKey()); + ServerPlayerEntity player = playerFromName(en.getKey()); if (player != null) { String option = en.getValue(); @@ -137,7 +138,7 @@ public class Logger BaseText [] cannedMessages = null; for (Map.Entry en : subscribedOnlinePlayers.entrySet()) { - PlayerEntity player = playerFromName(en.getKey()); + ServerPlayerEntity player = playerFromName(en.getKey()); if (player != null) { if (cannedMessages == null) cannedMessages = messagePromise.get(); @@ -146,7 +147,7 @@ public class Logger } } - public void sendPlayerMessage(PlayerEntity player, BaseText ... messages) + public void sendPlayerMessage(ServerPlayerEntity player, BaseText ... messages) { Arrays.stream(messages).forEach(player::sendMessage); } @@ -154,7 +155,7 @@ public class Logger /** * Gets the {@code PlayerEntity} instance for a player given their UUID. Returns null if they are offline. */ - protected PlayerEntity playerFromName(String name) + protected ServerPlayerEntity playerFromName(String name) { return CarpetServer.minecraft_server.getPlayerManager().getPlayer(name); } diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index 48cf3ef1..0cb5eba7 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -9,6 +9,7 @@ import carpet.script.exception.InternalExpressionException; import carpet.settings.CarpetSettings; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.client.network.packet.EntityPassengersSetS2CPacket; import net.minecraft.client.network.packet.EntityPositionS2CPacket; import net.minecraft.client.network.packet.EntityVelocityUpdateS2CPacket; import net.minecraft.command.EntitySelector; @@ -583,6 +584,11 @@ public class EntityValue extends Value { e.startRiding(((EntityValue) v).getEntity(),true); } + if (e instanceof ServerPlayerEntity) + { + ((ServerPlayerEntity)e).networkHandler.sendPacket(new EntityPassengersSetS2CPacket(e)); + //... + } }); put("drop_passengers", (e, v) -> e.removeAllPassengers()); put("mount_passengers", (e, v) -> { diff --git a/src/main/java/carpet/script/value/NumericValue.java b/src/main/java/carpet/script/value/NumericValue.java index ddc3cbb8..c47c6ae0 100644 --- a/src/main/java/carpet/script/value/NumericValue.java +++ b/src/main/java/carpet/script/value/NumericValue.java @@ -55,9 +55,15 @@ public class NumericValue extends Value { return value; } + + public static long floor(double double_1) { + long int_1 = (long)double_1; + return double_1 < (double)int_1 ? int_1 - 1 : int_1; + } + public long getLong() { - return (long)(value+epsilon); + return floor((value+epsilon)); } @Override diff --git a/src/main/java/carpet/utils/CarpetProfiler.java b/src/main/java/carpet/utils/CarpetProfiler.java index d0bfe218..70bf4a63 100644 --- a/src/main/java/carpet/utils/CarpetProfiler.java +++ b/src/main/java/carpet/utils/CarpetProfiler.java @@ -4,6 +4,7 @@ import carpet.settings.CarpetSettings; import net.minecraft.entity.Entity; import net.minecraft.server.MinecraftServer; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.server.command.ServerCommandSource; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; @@ -15,6 +16,7 @@ import java.util.stream.Collectors; public class CarpetProfiler { private static final HashMap time_repo = new HashMap<>(); + private static ServerCommandSource currentRequester = null; public static int tick_health_requested = 0; private static int tick_health_elapsed = 0; private static TYPE test_type = TYPE.NONE; //1 for ticks, 2 for entities; @@ -80,7 +82,7 @@ public class CarpetProfiler world.isClient ? " (Client)" : ""); } - public static void prepare_tick_report(MinecraftServer server, int ticks) + public static void prepare_tick_report(ServerCommandSource source, int ticks) { //maybe add so it only spams the sending player, but honestly - all may want to see it time_repo.clear(); @@ -103,9 +105,10 @@ public class CarpetProfiler tick_health_elapsed = ticks; tick_health_requested = ticks; current_tick_start = 0L; + currentRequester = source; } - public static void prepare_entity_report(MinecraftServer server, int ticks) + public static void prepare_entity_report(ServerCommandSource source, int ticks) { //maybe add so it only spams the sending player, but honestly - all may want to see it time_repo.clear(); @@ -114,6 +117,7 @@ public class CarpetProfiler tick_health_elapsed = ticks; tick_health_requested = ticks; current_tick_start = 0L; + currentRequester = source; } public static ProfilerToken start_section(World world, String name, TYPE type) @@ -202,15 +206,18 @@ public class CarpetProfiler tick_health_elapsed = 0; tick_health_requested = 0; current_tick_start = 0L; + currentRequester = null; } public static void finalize_tick_report_for_time(MinecraftServer server) { //print stats + if (currentRequester == null) + return; long total_tick_time = time_repo.get("tick"); double divider = 1.0D / tick_health_requested / 1000000; - Messenger.print_server_message(server, ""); - Messenger.print_server_message(server, String.format("Average tick time: %.3fms", divider * total_tick_time)); + Messenger.m(currentRequester, "w "); + Messenger.m(currentRequester, String.format("gi Average tick time: %.3fms", divider * total_tick_time)); long accumulated = 0L; for (String section : GENERAL_SECTIONS) @@ -219,7 +226,7 @@ public class CarpetProfiler if (amount > 0.01) { accumulated += time_repo.get(section); - Messenger.print_server_message(server, String.format("%s: %.3fms", section, amount)); + Messenger.m(currentRequester, String.format("gi %s: %.3fms", section, amount)); } } @@ -239,7 +246,7 @@ public class CarpetProfiler { continue; } - Messenger.print_server_message(server, dimension + ":"); + Messenger.m(currentRequester, "gi "+dimension + ":"); for (String section : SECTIONS) { double amount = divider * time_repo.get(dimension + "." + section); @@ -247,26 +254,28 @@ public class CarpetProfiler { if (!(section.endsWith("(client)"))) accumulated += time_repo.get(dimension + "." + section); - Messenger.print_server_message(server, String.format(" - %s: %.3fms", section, amount)); + Messenger.m(currentRequester, String.format("gi - %s: %.3fms", section, amount)); } } } long rest = total_tick_time - accumulated; - Messenger.print_server_message(server, String.format("The Rest, whatever that might be: %.3fms", divider * rest)); + Messenger.m(currentRequester, String.format("gi The Rest, whatever that might be: %.3fms", divider * rest)); } public static void finalize_tick_report_for_entities(MinecraftServer server) { + if (currentRequester == null) + return; //print stats long total_tick_time = time_repo.get("tick"); double divider = 1.0D / tick_health_requested / 1000000; double divider_1 = 1.0D / (tick_health_requested - 1) / 1000000; - Messenger.print_server_message(server, ""); - Messenger.print_server_message(server, String.format("Average tick time: %.3fms", divider * total_tick_time)); + Messenger.m(currentRequester, "gi "); + Messenger.m(currentRequester, String.format("gi Average tick time: %.3fms", divider * total_tick_time)); time_repo.remove("tick"); - Messenger.print_server_message(server, "Top 10 counts:"); + Messenger.m(currentRequester, "gi Top 10 counts:"); int total = 0; for (Map.Entry entry : time_repo.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList())) { @@ -283,9 +292,9 @@ public class CarpetProfiler String dim = parts[1]; String name = parts[2]; int penalty = name.endsWith("(client)") ? 1 : 0; - Messenger.print_server_message(server, String.format(" - %s in %s: %.3f", name, dim, 1.0D * entry.getValue() / (tick_health_requested - penalty))); + Messenger.m(currentRequester, String.format("gi - %s in %s: %.1f", name, dim, 1.0D * entry.getValue() / (tick_health_requested - penalty))); } - Messenger.print_server_message(server, "Top 10 grossing:"); + Messenger.m(currentRequester, "gi Top 10 CPU hogs:"); total = 0; for (Map.Entry entry : time_repo.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList())) { @@ -302,7 +311,7 @@ public class CarpetProfiler String dim = parts[1]; String name = parts[2]; double applicableDivider = name.endsWith("(client)") ? divider : divider_1; - Messenger.print_server_message(server, String.format(" - %s in %s: %.3fms", name, dim, applicableDivider * entry.getValue())); + Messenger.m(currentRequester, String.format("gi - %s in %s: %.2fms", name, dim, applicableDivider * entry.getValue())); } } } \ No newline at end of file