in analysis/gc-log/src/main/java/org/eclipse/jifa/gclog/parser/UnifiedG1OrGenerationalGCLogParser.java [124:168]
private static void parseYoungFullGC(AbstractGCLogParser parser, ParseRuleContext context, String title, String text) {
GCModel model = parser.getModel();
String[] parts = GCLogUtil.splitByBracket(text);
int causeIndex = 0;
GCEventType eventType = title.endsWith("Young") ? YOUNG_GC : FULL_GC;
GCEventBooleanType specialSituation = null;
if (parser.getMetadata().getCollector() == GCCollectorType.G1 && eventType == YOUNG_GC) {
switch (parts[0]) {
case "Concurrent Start":
specialSituation = GCEventBooleanType.INITIAL_MARK;
break;
case "Prepare Mixed":
specialSituation = GCEventBooleanType.PREPARE_MIXED;
break;
case "Mixed":
eventType = G1_MIXED_GC;
break;
}
causeIndex++;
}
GCCause cause = GCCause.getCause(parts[causeIndex]);
boolean end = text.endsWith("ms");
GCEvent event;
if (!end || (event = model.getLastEventOfGCID(context.get(GCID))) == null) {
event = new GCEvent();
event.setStartTime(context.get(UPTIME));
event.setEventType(eventType);
event.setCause(cause);
if (cause == GCCause.CMS_FINAL_REMARK) {
event.setTrue(GCEventBooleanType.IGNORE_PAUSE);
}
if (specialSituation != null) {
event.setTrue(specialSituation);
}
event.setGcid(context.get(GCID));
model.putEvent(event);
}
if (end) {
int tailBegin = text.lastIndexOf(' ');
tailBegin = text.lastIndexOf(' ', tailBegin - 1);
if (tailBegin > 0) {
parseCollectionAndDuration(event, context, text.substring(tailBegin + 1));
}
}
}