From f0d044a49f5714a6d5c0f5ba66b9ee181c17ceec Mon Sep 17 00:00:00 2001 From: gnembon Date: Sun, 4 Apr 2021 22:32:34 -0300 Subject: [PATCH] added scarpet to the carpet profiler --- src/main/java/carpet/commands/ScriptCommand.java | 6 +++++- .../java/carpet/script/CarpetEventServer.java | 3 +++ .../java/carpet/script/CarpetScriptHost.java | 16 +++++++++++++--- .../java/carpet/script/CarpetScriptServer.java | 13 ++++++++----- .../carpet/script/command/CommandArgument.java | 6 +++++- src/main/java/carpet/utils/CarpetProfiler.java | 4 +++- 6 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/main/java/carpet/commands/ScriptCommand.java b/src/main/java/carpet/commands/ScriptCommand.java index 75030545..83449f9f 100644 --- a/src/main/java/carpet/commands/ScriptCommand.java +++ b/src/main/java/carpet/commands/ScriptCommand.java @@ -13,6 +13,7 @@ import carpet.script.exception.CarpetExpressionException; import carpet.script.value.FunctionValue; import carpet.script.value.Value; import carpet.settings.SettingsManager; +import carpet.utils.CarpetProfiler; import carpet.utils.Messenger; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.StringArgumentType; @@ -396,6 +397,7 @@ public class ScriptCommand { try { + CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet ace", CarpetProfiler.TYPE.GENERAL); host.setChatErrorSnooper(source); long start = System.nanoTime(); Value result = call.get(); @@ -412,7 +414,9 @@ public class ScriptCommand metric = "s"; } Messenger.m(source, "wi = ", "wb "+result.getString(), "gi ("+time+metric+")"); - return (int)result.readInteger(); + int intres = (int)result.readInteger(); + CarpetProfiler.end_current_section(currentSection); + return intres; } catch (CarpetExpressionException e) { diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index f017f574..3c1c084d 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -14,6 +14,7 @@ import carpet.script.value.StringValue; import carpet.script.value.Value; import carpet.script.value.ValueConversions; import carpet.settings.ParsedRule; +import carpet.utils.CarpetProfiler; import carpet.utils.Messenger; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.block.BlockState; @@ -204,6 +205,7 @@ public class CarpetEventServer { if (callList.size() > 0) { + CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet events", CarpetProfiler.TYPE.GENERAL); List argv = argumentSupplier.get(); // empty for onTickDone ServerCommandSource source; try @@ -225,6 +227,7 @@ public class CarpetEventServer if (!call.execute(source, argv)) fails.add(call); } for (Callback call : fails) callList.remove(call); + CarpetProfiler.end_current_section(currentSection); } } diff --git a/src/main/java/carpet/script/CarpetScriptHost.java b/src/main/java/carpet/script/CarpetScriptHost.java index b6dc0e85..223521da 100644 --- a/src/main/java/carpet/script/CarpetScriptHost.java +++ b/src/main/java/carpet/script/CarpetScriptHost.java @@ -18,6 +18,7 @@ import carpet.script.value.MapValue; import carpet.script.value.NumericValue; import carpet.script.value.StringValue; import carpet.script.value.Value; +import carpet.utils.CarpetProfiler; import carpet.utils.Messenger; import com.google.gson.JsonElement; @@ -127,6 +128,7 @@ public class CarpetScriptHost extends ScriptHost private static int execute(CommandContext ctx, String hostName, FunctionArgument funcSpec, List paramNames) throws CommandSyntaxException { + CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet command", CarpetProfiler.TYPE.GENERAL); CarpetScriptHost cHost = CarpetServer.scriptServer.modules.get(hostName).retrieveOwnForExecution(ctx.getSource()); List argNames = funcSpec.function.getArguments(); if ((argNames.size()-funcSpec.args.size()) != paramNames.size()) @@ -140,7 +142,9 @@ public class CarpetScriptHost extends ScriptHost Value response = cHost.handleCommand(ctx.getSource(), funcSpec.function, args); // will skip prints for new //if (!response.isNull()) Messenger.m(ctx.getSource(), "gi " + response.getString()); - return (int) response.readInteger(); + int intres = (int) response.readInteger(); + CarpetProfiler.end_current_section(currentSection); + return intres; } public LiteralArgumentBuilder addPathToCommand( @@ -210,12 +214,15 @@ public class CarpetScriptHost extends ScriptHost return s -> { try { + CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet command", CarpetProfiler.TYPE.GENERAL); CarpetScriptHost cHost = null; cHost = CarpetServer.scriptServer.modules.get(hostName).retrieveOwnForExecution(s); Value response = cHost.handleCommand(s, fun, Collections.singletonList( (s.getEntity() instanceof ServerPlayerEntity)?new EntityValue(s.getEntity()):Value.NULL) ); - return response.getBoolean(); + boolean res = response.getBoolean(); + CarpetProfiler.end_current_section(currentSection); + return res; } catch (CommandSyntaxException e) { @@ -546,7 +553,10 @@ public class CarpetScriptHost extends ScriptHost { try { - return callLegacy(source, call, coords, arg); + CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet legacy", CarpetProfiler.TYPE.GENERAL); + Value res = callLegacy(source, call, coords, arg); + CarpetProfiler.end_current_section(currentSection); + return res; } catch (CarpetExpressionException exc) { diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java index d8dfbd35..b74ef32b 100644 --- a/src/main/java/carpet/script/CarpetScriptServer.java +++ b/src/main/java/carpet/script/CarpetScriptServer.java @@ -1,19 +1,15 @@ package carpet.script; import carpet.CarpetSettings; -import carpet.script.argument.FunctionArgument; import carpet.script.bundled.BundledModule; import carpet.CarpetServer; import carpet.script.bundled.FileModule; import carpet.script.bundled.Module; -import carpet.script.command.CommandToken; import carpet.script.exception.InvalidCallbackException; import carpet.script.value.FunctionValue; -import carpet.script.value.StringValue; import carpet.script.value.Value; +import carpet.utils.CarpetProfiler; import carpet.utils.Messenger; -import com.mojang.brigadier.arguments.StringArgumentType; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.tree.CommandNode; @@ -229,6 +225,7 @@ public class CarpetScriptServer public boolean addScriptHost(ServerCommandSource source, String name, Function commandValidator, boolean perPlayer, boolean autoload, boolean isRuleApp) { + CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet loading", CarpetProfiler.TYPE.GENERAL); if (commandValidator == null) commandValidator = p -> true; long start = System.nanoTime(); name = name.toLowerCase(Locale.ROOT); @@ -301,6 +298,7 @@ public class CarpetScriptServer FunctionValue onStart = newHost.getFunction("__on_start"); if (onStart != null) newHost.callNow(onStart, Collections.emptyList()); } + CarpetProfiler.end_current_section(currentSection); long end = System.nanoTime(); CarpetSettings.LOG.info("App "+name+" loaded in "+(end-start)/1000000+" ms"); return true; @@ -412,11 +410,16 @@ public class CarpetScriptServer public void tick() { + CarpetProfiler.ProfilerToken token; + token = CarpetProfiler.start_section(null, "Scarpet schedule", CarpetProfiler.TYPE.GENERAL); events.tick(); + CarpetProfiler.end_current_section(token); + token = CarpetProfiler.start_section(null, "Scarpet app data", CarpetProfiler.TYPE.GENERAL); for (CarpetScriptHost host : modules.values()) { host.tick(); } + CarpetProfiler.end_current_section(token); } public void onClose() diff --git a/src/main/java/carpet/script/command/CommandArgument.java b/src/main/java/carpet/script/command/CommandArgument.java index b2e02272..f3d58934 100644 --- a/src/main/java/carpet/script/command/CommandArgument.java +++ b/src/main/java/carpet/script/command/CommandArgument.java @@ -14,6 +14,7 @@ import carpet.script.value.NumericValue; import carpet.script.value.StringValue; import carpet.script.value.Value; import carpet.script.value.ValueConversions; +import carpet.utils.CarpetProfiler; import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; import com.mojang.brigadier.arguments.ArgumentType; @@ -365,6 +366,7 @@ public abstract class CommandArgument { if (customSuggester != null) { + CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet command", CarpetProfiler.TYPE.GENERAL); Map params = new HashMap<>(); for(ParsedCommandNode pnode : context.getNodes()) { @@ -379,7 +381,9 @@ public abstract class CommandArgument args.addAll(customSuggester.args); Value response = host.handleCommand(context.getSource(), customSuggester.function, args); if (!(response instanceof ListValue)) throw error("Custom suggester should return a list of options"+" for custom type "+suffix); - return ((ListValue) response).getItems().stream().map(Value::getString).collect(Collectors.toList()); + Collection res = ((ListValue) response).getItems().stream().map(Value::getString).collect(Collectors.toList()); + CarpetProfiler.end_current_section(currentSection); + return res; } if (needsMatching) return examples; //return Lists.newArrayList(""); diff --git a/src/main/java/carpet/utils/CarpetProfiler.java b/src/main/java/carpet/utils/CarpetProfiler.java index 01a51d1f..53ba857e 100644 --- a/src/main/java/carpet/utils/CarpetProfiler.java +++ b/src/main/java/carpet/utils/CarpetProfiler.java @@ -31,7 +31,9 @@ public class CarpetProfiler private static int tick_health_elapsed = 0; private static TYPE test_type = TYPE.NONE; //1 for ticks, 2 for entities; private static long current_tick_start = 0; - private static final String[] GENERAL_SECTIONS = {"Network", "Autosave", "Async Tasks", "Datapacks",}; + private static final String[] GENERAL_SECTIONS = {"Network", "Autosave", "Async Tasks", "Datapacks", + "Scarpet ace", "Scarpet legacy", "Scarpet events", "Scarpet schedule", + "Scarpet command", "Scarpet loading", "Scarpet app data"}; private static final String[] SECTIONS = { "Spawning and Random Ticks", "Ticket Manager","Unloading", "Blocks", "Entities", "Block Entities",