Essentials/Essentials/src/main/java/com/earth2me/essentials/ExecuteTimer.java

73 lines
1.9 KiB
Java
Raw Normal View History

package com.earth2me.essentials;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
2015-04-15 06:06:16 +02:00
public class ExecuteTimer {
private final transient List<ExecuteRecord> times;
private final transient DecimalFormat decimalFormat = new DecimalFormat("#0.000", DecimalFormatSymbols.getInstance(Locale.US));
2015-04-15 06:06:16 +02:00
public ExecuteTimer() {
times = new ArrayList<>();
2015-04-15 06:06:16 +02:00
}
2015-04-15 06:06:16 +02:00
public void start() {
times.clear();
mark("start");
2015-04-15 06:06:16 +02:00
}
2015-04-15 06:06:16 +02:00
public void mark(final String label) {
if (!times.isEmpty() || "start".equals(label)) {
times.add(new ExecuteRecord(label, System.nanoTime()));
}
}
2015-04-15 06:06:16 +02:00
public String end() {
final StringBuilder output = new StringBuilder();
output.append("execution time: ");
String mark;
long time0 = 0;
long time1 = 0;
long time2 = 0;
double duration;
2020-10-03 19:46:05 +02:00
for (final ExecuteRecord pair : times) {
2015-06-03 22:11:56 +02:00
mark = pair.getMark();
time2 = pair.getTime();
2015-04-15 06:06:16 +02:00
if (time1 > 0) {
duration = (time2 - time1) / 1000000.0;
output.append(mark).append(": ").append(decimalFormat.format(duration)).append("ms - ");
} else {
time0 = time2;
}
time1 = time2;
}
duration = (time1 - time0) / 1000000.0;
output.append("Total: ").append(decimalFormat.format(duration)).append("ms");
times.clear();
return output.toString();
}
2015-04-15 06:06:16 +02:00
private static class ExecuteRecord {
private final String mark;
private final long time;
2020-10-03 19:46:05 +02:00
ExecuteRecord(final String mark, final long time) {
2015-04-15 06:06:16 +02:00
this.mark = mark;
this.time = time;
}
2015-04-15 06:06:16 +02:00
public String getMark() {
return mark;
}
2015-04-15 06:06:16 +02:00
public long getTime() {
return time;
}
}
2020-10-03 19:46:05 +02:00
}