mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-09 17:57:34 +01:00
Added timings command.
By: Tahg <tahgtahv@gmail.com>
This commit is contained in:
parent
05581b02a4
commit
387d09faa1
@ -54,6 +54,7 @@ public class SimpleCommandMap implements CommandMap {
|
||||
register("bukkit", new VersionCommand("version"));
|
||||
register("bukkit", new ReloadCommand("reload"));
|
||||
register("bukkit", new PluginsCommand("plugins"));
|
||||
register("bukkit", new TimingsCommand("timings"));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -96,7 +97,7 @@ public class SimpleCommandMap implements CommandMap {
|
||||
/**
|
||||
* Registers a command with the given name is possible, otherwise uses fallbackPrefix to create a unique name if its not an alias
|
||||
*
|
||||
* @param name the name of the command, without the '/'-prefix.
|
||||
* @param label the name of the command, without the '/'-prefix.
|
||||
* @param fallbackPrefix a prefix which is prepended to the command with a ':' one or more times to make the command unique
|
||||
* @param command the command to register
|
||||
* @return true if command was registered with the passed in label, false otherwise.
|
||||
|
@ -0,0 +1,73 @@
|
||||
package org.bukkit.command.defaults;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
|
||||
public class TimingsCommand extends Command {
|
||||
public TimingsCommand(String name) {
|
||||
super(name);
|
||||
this.description = "Records timings for all plugin events";
|
||||
this.usageMessage = "/timings <function>";
|
||||
this.setPermission("bukkit.command.timings");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String currentAlias, String[] args) {
|
||||
if (!testPermission(sender)) return true;
|
||||
if (args.length != 1) return false;
|
||||
|
||||
boolean seperate = "seperate".equals(args[0]);
|
||||
if ("reset".equals(args[0])) {
|
||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
plugin.resetTimings();
|
||||
}
|
||||
sender.sendMessage("Timings reset");
|
||||
}
|
||||
else if("merged".equals(args[0]) || seperate) {
|
||||
|
||||
int index = 0;
|
||||
int pluginIdx = 0;
|
||||
File timingFolder = new File("timings");
|
||||
timingFolder.mkdirs();
|
||||
File timings = new File(timingFolder, "timings.txt");
|
||||
File names = null;
|
||||
while (timings.exists()) timings = new File(timingFolder, "timinigs" + (++index) + ".txt");
|
||||
try {
|
||||
PrintStream fileTimings = new PrintStream(timings);
|
||||
PrintStream fileNames = null;
|
||||
if (seperate) {
|
||||
names = new File(timingFolder, "names" + index + ".txt");
|
||||
fileNames = new PrintStream(names);
|
||||
}
|
||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
pluginIdx++;
|
||||
long totalTime = 0;
|
||||
if (seperate) {
|
||||
fileNames.println(pluginIdx + " " + plugin.getDescription().getFullName());
|
||||
fileTimings.println("Plugin " + pluginIdx);
|
||||
}
|
||||
else fileTimings.println(plugin.getDescription().getFullName());
|
||||
for (Event.Type type : Event.Type.values()) {
|
||||
long time = plugin.getTiming(type);
|
||||
totalTime += time;
|
||||
if (time > 0) {
|
||||
fileTimings.println(" " + type.name() + " " + time);
|
||||
}
|
||||
}
|
||||
fileTimings.println(" Total time " + totalTime + " (" + totalTime / 1000000000 + "s)");
|
||||
}
|
||||
sender.sendMessage("Timings written to " + timings.getPath());
|
||||
if (seperate) sender.sendMessage("Names written to " + names.getPath());
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -6,6 +6,7 @@ import java.io.InputStream;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.util.config.Configuration;
|
||||
|
||||
@ -147,4 +148,10 @@ public interface Plugin extends CommandExecutor {
|
||||
* @return ChunkGenerator for use in the default world generation
|
||||
*/
|
||||
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id);
|
||||
|
||||
public long getTiming(Event.Type type);
|
||||
|
||||
public void incTiming(Event.Type type, long delta);
|
||||
|
||||
public void resetTimings();
|
||||
}
|
||||
|
@ -336,7 +336,9 @@ public final class SimplePluginManager implements PluginManager {
|
||||
if (eventListeners != null) {
|
||||
for (RegisteredListener registration : eventListeners) {
|
||||
try {
|
||||
long start = System.nanoTime();
|
||||
registration.callEvent(event);
|
||||
registration.getPlugin().incTiming(event.getType(), System.nanoTime() - start);
|
||||
} catch (AuthorNagException ex) {
|
||||
Plugin plugin = registration.getPlugin();
|
||||
|
||||
|
@ -20,6 +20,7 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
@ -43,6 +44,7 @@ public abstract class JavaPlugin implements Plugin {
|
||||
private EbeanServer ebean = null;
|
||||
private FileConfiguration newConfig = null;
|
||||
private File configFile = null;
|
||||
private long[] timings = new long[Event.Type.values().length];
|
||||
|
||||
public JavaPlugin() {}
|
||||
|
||||
@ -367,4 +369,16 @@ public abstract class JavaPlugin implements Plugin {
|
||||
public String toString() {
|
||||
return getDescription().getFullName();
|
||||
}
|
||||
|
||||
public long getTiming(Event.Type type) {
|
||||
return timings[type.ordinal()];
|
||||
}
|
||||
|
||||
public void incTiming(Event.Type type, long delta) {
|
||||
timings[type.ordinal()] += delta;
|
||||
}
|
||||
|
||||
public void resetTimings() {
|
||||
timings = new long[Event.Type.values().length];
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user