package speiger.src.coreengine.utils.profiler; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.ObjIntConsumer; import speiger.src.coreengine.utils.helpers.TextUtil; public interface IProfiler { public String getName(); public IProfilerEntry getEntry(String name); public long getTicksRan(); public void enable(); public void disable(); public default void setState(boolean enabled) { if(enabled) { enable(); return; } disable(); } public boolean isEnabled(); public void addListener(ObjIntConsumer listener); public void removeListener(ObjIntConsumer listener); public IProfiler start(String name); public IProfiler start(Class clz); public IProfiler stop(); public IProfiler next(String name); public void onFrameEnded(boolean count); public static interface IProfilerEntry { public String getName(); public default String getPathName() { return getName(); } public long getMinTime(); public long getNanoTime(); public long getMaxTime(); public int getDebth(); public int getChildCount(); public IProfilerEntry getChild(int index); public IProfilerEntry getParent(); public IProfiler getOwner(); default long getTotalTime() { IProfilerEntry entry = this; while(entry.getParent() != null) { entry = entry.getParent(); } return entry.getNanoTime(); } public default List getData() { List list = new ArrayList(); long time = getNanoTime(); long totalTime = getTotalTime(); long used = 0L; for(int i = 0;i { String name; int color; long nanoTime; double effect; double totalEffect; public ProfilerData(String name, long time, double effect, double totalEffect) { this.name = name; color = TextUtil.getColorFromText(name); nanoTime = time; this.effect = effect; this.totalEffect = totalEffect; } @Override public int compareTo(ProfilerData o) { if(o.nanoTime > nanoTime) { return 1; } return o.nanoTime < nanoTime ? -1 : name.compareTo(o.name); } public String getName() { return name; } public int getColor() { return color; } public long getNanoTime() { return nanoTime; } public double getEffect() { return effect; } public double getTotalEffect() { return totalEffect; } } }