in Extremem/src/main/java/com/amazon/corretto/benchmark/extremem/HighResolutionTime.java [94:207]
public String toString(ExtrememThread t) {
final int NanosPerSecond = 1000000000;
final long SecondsPerHour = 60 * 60;
final long SecondsPerMinute = 60;
final int NanosPerMilliseconds = 1000000;
final int NanosPerMicroseconds = 1000;
long seconds = this.s;
int nanos = this.ns;
String result;
int sb_length;
if (seconds < 0) {
result = "-";
seconds = -seconds;
nanos = NanosPerSecond - nanos;
sb_length = 1;
} else {
result = "";
sb_length = 0;
}
int sb_capacity = Util.ephemeralStringBuilder(t, sb_length);
if (seconds >= SecondsPerHour) {
long hours = seconds / SecondsPerHour;
seconds %= SecondsPerHour;
int digits = Util.decimalDigits(hours);
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, digits);
sb_length += digits;
result = result + hours + "h ";
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, 2);
sb_length += 2;
}
if (seconds >= SecondsPerMinute) {
long minutes = seconds / SecondsPerMinute;
int digits = Util.decimalDigits(minutes);
result = result + minutes + "m ";
seconds %= SecondsPerMinute;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, digits);
sb_length += digits;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, 2);
sb_length += 2;
}
if (seconds > 0) {
int digits = Util.decimalDigits(seconds);
result = result + seconds + "s ";
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, digits);
sb_length += digits;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, 2);
sb_length += 2;
}
if (nanos >= NanosPerMilliseconds) {
int millis = nanos / NanosPerMilliseconds;
int digits = Util.decimalDigits(millis);
result = result + millis + "ms ";
nanos %= NanosPerMilliseconds;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, digits);
sb_length += digits;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, 3);
sb_length += 3;
}
if (nanos >= NanosPerMicroseconds) {
int us = nanos / NanosPerMicroseconds;
int digits = Util.decimalDigits(us);
result = result + us + "us ";
nanos %= NanosPerMicroseconds;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, digits);
sb_length += digits;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, 3);
sb_length += 3;
}
if (nanos > 0) {
int digits = Util.decimalDigits(nanos);
result = result + nanos + "ns ";
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, digits);
sb_length += digits;
sb_capacity = Util.ephemeralStringBuilderAppend(t, sb_length,
sb_capacity, 3);
sb_length += 3;
}
if (result.length() == 0) {
Util.abandonEphemeralStringBuilder(t, sb_length, sb_capacity);
// Allocate String so that it can be consistently garbage collected.
Util.ephemeralString(t, 2);
return new String("0s");
}
else {
// Assume compiler optimizes this (so there's not a String
// followed by a substring operation).
Util.ephemeralStringBuilderToString(t, sb_length - 1, sb_capacity);
return result.substring(0, result.length() - 1);
}
}