in analysis/gc-log/src/main/java/org/eclipse/jifa/gclog/event/GCEvent.java [297:333]
public double getPause() {
if (pause == Constant.UNKNOWN_DOUBLE) {
switch (eventType.getPause()) {
case PAUSE:
// In most cases, duration is more accurate than cputime because of rounding error.
// In very rare cases, cputime may be significantly larger than duration. In these cases
// cputime is more accurate value.
if (cpuTime != null) {
if (getDuration() != Constant.UNKNOWN_DOUBLE &&
Math.abs(cpuTime.getReal() - getDuration()) > GCTRACETIME_TRACECPUTIME_CLOSE_THRESHOLD) {
pause = getCpuTime().getReal();
} else {
pause = getDuration();
}
} else {
pause = getDuration();
}
break;
case CONCURRENT:
pause = 0;
break;
case PARTIAL:
pause = 0;
if (phases != null) {
for (GCEvent phase : phases) {
if (phase.getEventType().getPause() == GCPause.PAUSE && phase.getEventLevel() == PHASE) {
pause += phase.getPause();
}
}
}
break;
default:
throw new ShouldNotReachHereException();
}
}
return pause;
}