mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-14 11:45:52 -07:00
@@ -158,10 +158,4 @@ public interface Plugin extends CommandExecutor {
|
||||
* @return Logger associated with this server
|
||||
*/
|
||||
public Logger getLogger();
|
||||
|
||||
public long getTiming(Event.Type type);
|
||||
|
||||
public void incTiming(Event.Type type, long delta);
|
||||
|
||||
public void resetTimings();
|
||||
}
|
||||
|
@@ -276,4 +276,11 @@ public interface PluginManager {
|
||||
* @return Set containing all current registered permissions
|
||||
*/
|
||||
public Set<Permission> getPermissions();
|
||||
|
||||
/**
|
||||
* Returns whether or not timing code should be used for event calls
|
||||
*
|
||||
* @return True if event timings are to be used
|
||||
*/
|
||||
public boolean useTimings();
|
||||
}
|
||||
|
@@ -33,6 +33,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
private final Map<Boolean, Set<Permission>> defaultPerms = new LinkedHashMap<Boolean, Set<Permission>>();
|
||||
private final Map<String, Map<Permissible, Boolean>> permSubs = new HashMap<String, Map<Permissible, Boolean>>();
|
||||
private final Map<Boolean, Map<Permissible, Boolean>> defSubs = new HashMap<Boolean, Map<Permissible, Boolean>>();
|
||||
private boolean useTimings = false;
|
||||
|
||||
public SimplePluginManager(Server instance, SimpleCommandMap commandMap) {
|
||||
server = instance;
|
||||
@@ -323,9 +324,7 @@ public final class SimplePluginManager implements PluginManager {
|
||||
}
|
||||
|
||||
try {
|
||||
long start = System.nanoTime();
|
||||
registration.callEvent(event);
|
||||
registration.getPlugin().incTiming(event.getType(), System.nanoTime() - start);
|
||||
} catch (AuthorNagException ex) {
|
||||
Plugin plugin = registration.getPlugin();
|
||||
|
||||
@@ -393,7 +392,11 @@ public final class SimplePluginManager implements PluginManager {
|
||||
throw new IllegalPluginAccessException("Plugin attempted to register " + type + " while not enabled");
|
||||
}
|
||||
|
||||
getEventListeners(type.getEventClass()).register(new RegisteredListener(listener, plugin.getPluginLoader().createExecutor(type, listener), priority.getNewPriority(), plugin));
|
||||
if (useTimings) {
|
||||
getEventListeners(type.getEventClass()).register(new TimedRegisteredListener(listener, plugin.getPluginLoader().createExecutor(type, listener), priority.getNewPriority(), plugin));
|
||||
} else {
|
||||
getEventListeners(type.getEventClass()).register(new RegisteredListener(listener, plugin.getPluginLoader().createExecutor(type, listener), priority.getNewPriority(), plugin));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -422,7 +425,12 @@ public final class SimplePluginManager implements PluginManager {
|
||||
throw new IllegalPluginAccessException("Plugin attempted to register " + type + " while not enabled");
|
||||
}
|
||||
|
||||
getEventListeners(type.getEventClass()).register(new RegisteredListener(listener, executor, priority.getNewPriority(), plugin));
|
||||
if (useTimings) {
|
||||
getEventListeners(type.getEventClass()).register(new TimedRegisteredListener(listener, executor, priority.getNewPriority(), plugin));
|
||||
}
|
||||
else {
|
||||
getEventListeners(type.getEventClass()).register(new RegisteredListener(listener, executor, priority.getNewPriority(), plugin));
|
||||
}
|
||||
}
|
||||
|
||||
public void registerEvents(Listener listener, Plugin plugin) {
|
||||
@@ -445,7 +453,11 @@ public final class SimplePluginManager implements PluginManager {
|
||||
throw new IllegalPluginAccessException("Plugin attempted to register " + event + " while not enabled");
|
||||
}
|
||||
|
||||
getEventListeners(event).register(new RegisteredListener(listener, executor, priority, plugin));
|
||||
if (useTimings) {
|
||||
getEventListeners(event).register(new TimedRegisteredListener(listener, executor, priority, plugin));
|
||||
} else {
|
||||
getEventListeners(event).register(new RegisteredListener(listener, executor, priority, plugin));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -606,4 +618,17 @@ public final class SimplePluginManager implements PluginManager {
|
||||
public Set<Permission> getPermissions() {
|
||||
return new HashSet<Permission>(permissions.values());
|
||||
}
|
||||
|
||||
public boolean useTimings() {
|
||||
return useTimings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether or not per event timing code should be used
|
||||
*
|
||||
* @param use True if per event timing code should be used
|
||||
*/
|
||||
public void useTimings(boolean use) {
|
||||
useTimings = use;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,77 @@
|
||||
package org.bukkit.plugin;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.EventException;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
/**
|
||||
* Extends RegisteredListener to include timing information
|
||||
*/
|
||||
public class TimedRegisteredListener extends RegisteredListener {
|
||||
private int count;
|
||||
private long totalTime;
|
||||
private Event event;
|
||||
private boolean multiple = false;
|
||||
|
||||
public TimedRegisteredListener(final Listener pluginListener, final EventExecutor eventExecutor, final EventPriority eventPriority, final Plugin registeredPlugin) {
|
||||
super(pluginListener, eventExecutor, eventPriority, registeredPlugin);
|
||||
}
|
||||
|
||||
public void callEvent(Event event) throws EventException {
|
||||
count++;
|
||||
if (this.event == null) {
|
||||
this.event = event;
|
||||
}
|
||||
else if (!this.event.getClass().equals(event.getClass())) {
|
||||
multiple = true;
|
||||
}
|
||||
long start = System.nanoTime();
|
||||
super.callEvent(event);
|
||||
totalTime += System.nanoTime() - start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the call count and total time for this listener
|
||||
*/
|
||||
public void reset() {
|
||||
count = 0;
|
||||
totalTime = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the total times this listener has been called
|
||||
*
|
||||
* @return Times this listener has been called
|
||||
*/
|
||||
public int getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the total time calls to this listener have taken
|
||||
*
|
||||
* @return Total time for all calls of this listener
|
||||
*/
|
||||
public long getTotalTime() {
|
||||
return totalTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first event this listener handled
|
||||
*
|
||||
* @return An event handled by this RegisteredListener
|
||||
*/
|
||||
public Event getEvent() {
|
||||
return event;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets whether this listener has handled multiple events
|
||||
*
|
||||
* @return True if this listener has handled multiple events
|
||||
*/
|
||||
public boolean hasMultiple() {
|
||||
return multiple;
|
||||
}
|
||||
}
|
@@ -45,7 +45,6 @@ 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];
|
||||
private PluginLogger logger = null;
|
||||
|
||||
public JavaPlugin() {}
|
||||
@@ -374,18 +373,6 @@ public abstract class JavaPlugin implements Plugin {
|
||||
return logger;
|
||||
}
|
||||
|
||||
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];
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getDescription().getFullName();
|
||||
|
@@ -992,6 +992,7 @@ public class JavaPluginLoader implements PluginLoader {
|
||||
}
|
||||
|
||||
public Map<Class<? extends Event>, Set<RegisteredListener>> createRegisteredListeners(Listener listener, final Plugin plugin) {
|
||||
boolean useTimings = server.getPluginManager().useTimings();
|
||||
Map<Class<? extends Event>, Set<RegisteredListener>> ret = new HashMap<Class<? extends Event>, Set<RegisteredListener>>();
|
||||
Method[] methods;
|
||||
try {
|
||||
@@ -1016,7 +1017,7 @@ public class JavaPluginLoader implements PluginLoader {
|
||||
eventSet = new HashSet<RegisteredListener>();
|
||||
ret.put(eventClass, eventSet);
|
||||
}
|
||||
eventSet.add(new RegisteredListener(listener, new EventExecutor() {
|
||||
EventExecutor executor = new EventExecutor() {
|
||||
public void execute(Listener listener, Event event) throws EventException {
|
||||
try {
|
||||
if (!eventClass.isAssignableFrom(event.getClass())) {
|
||||
@@ -1027,7 +1028,12 @@ public class JavaPluginLoader implements PluginLoader {
|
||||
throw new EventException(t);
|
||||
}
|
||||
}
|
||||
}, eh.priority(), plugin));
|
||||
};
|
||||
if (useTimings) {
|
||||
eventSet.add(new TimedRegisteredListener(listener, executor, eh.priority(), plugin));
|
||||
} else {
|
||||
eventSet.add(new RegisteredListener(listener, executor, eh.priority(), plugin));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user