in application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/pages/GarbageCollectionsPage.java [582:675]
private void updateTable(IItemCollection gcs) {
Map<Object, GC> gcMap = new HashMap<>();
gcs.forEach(is -> {
IMemberAccessor<IQuantity, IItem> gcIdAccessor = JdkAttributes.GC_ID.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> durationAccessor = JfrAttributes.DURATION.getAccessor(is.getType());
IMemberAccessor<String, IItem> causeAccessor = JdkAttributes.GC_CAUSE.getAccessor(is.getType());
IMemberAccessor<String, IItem> nameAccessor = JdkAttributes.GC_NAME.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> longestPauseAccessor = JdkAttributes.GC_LONGEST_PAUSE
.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> sumPauseAccessor = JdkAttributes.GC_SUM_OF_PAUSES
.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> startTimeAccessor = JfrAttributes.START_TIME
.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> endTimeAccessor = JfrAttributes.END_TIME.getAccessor(is.getType());
is.forEach(item -> {
GC value = new GC(item, is.getType());
value.gcId = gcIdAccessor.getMember(item);
value.duration = durationAccessor.getMember(item);
value.gcCause = causeAccessor.getMember(item);
value.gcName = nameAccessor.getMember(item);
value.longestPause = longestPauseAccessor.getMember(item);
value.sumOfPauses = sumPauseAccessor.getMember(item);
value.startTime = startTimeAccessor.getMember(item);
value.endTime = endTimeAccessor.getMember(item);
logDuplicateGcId(gcMap.put(gcIdAccessor.getMember(item), value));
});
});
IItemCollection refItems = getDataSource().getItems().apply(JdkFilters.REFERENCE_STATISTICS);
refItems.forEach(is -> {
IMemberAccessor<IQuantity, IItem> gdIdAccessor = JdkAttributes.GC_ID.getAccessor(is.getType());
IMemberAccessor<String, IItem> typeAccessor = JdkAttributes.REFERENCE_STATISTICS_TYPE
.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> countAccessor = JdkAttributes.REFERENCE_STATISTICS_COUNT
.getAccessor(is.getType());
is.forEach(item -> {
GC gc = gcMap.get(gdIdAccessor.getMember(item));
if (gc != null) {
gc.setRefCount(typeAccessor.getMember(item), countAccessor.getMember(item));
}
});
});
IItemCollection heapItems = getDataSource().getItems().apply(JdkFilters.HEAP_SUMMARY);
heapItems.forEach(is -> {
IMemberAccessor<IQuantity, IItem> gcIdAccessor = JdkAttributes.GC_ID.getAccessor(is.getType());
IMemberAccessor<String, IItem> gcWhenAccessor = JdkAttributes.GC_WHEN.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> usedHeapAccessor = JdkAttributes.HEAP_USED.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> committedHeapAccessor = JdkAttributes.GC_HEAPSPACE_COMMITTED
.getAccessor(is.getType());
is.forEach(item -> {
GC gc = gcMap.get(gcIdAccessor.getMember(item));
if (gc != null) {
String when = gcWhenAccessor.getMember(item);
if ("Before GC".equals(when)) { //$NON-NLS-1$
gc.usedDelta = gc.usedDelta.subtract(usedHeapAccessor.getMember(item));
gc.committedDelta = gc.committedDelta.subtract(committedHeapAccessor.getMember(item));
} else {
gc.usedDelta = gc.usedDelta.add(usedHeapAccessor.getMember(item));
gc.committedDelta = gc.committedDelta.add(committedHeapAccessor.getMember(item));
}
}
});
});
IItemCollection metaspaceItems = getDataSource().getItems().apply(JdkFilters.METASPACE_SUMMARY);
metaspaceItems.forEach(is -> {
IMemberAccessor<IQuantity, IItem> gcIdAccessor = JdkAttributes.GC_ID.getAccessor(is.getType());
IMemberAccessor<String, IItem> gcWhenAccessor = JdkAttributes.GC_WHEN.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> usedMetaspaceAccessor = JdkAttributes.GC_METASPACE_USED
.getAccessor(is.getType());
IMemberAccessor<IQuantity, IItem> committedMetaspaceAccessor = JdkAttributes.GC_METASPACE_COMMITTED
.getAccessor(is.getType());
is.forEach(item -> {
GC gc = gcMap.get(gcIdAccessor.getMember(item));
if (gc != null && usedMetaspaceAccessor != null && committedMetaspaceAccessor != null
&& gcWhenAccessor != null) {
String when = gcWhenAccessor.getMember(item);
if ("Before GC".equals(when)) { //$NON-NLS-1$
gc.usedMetaspaceDelta = gc.usedMetaspaceDelta
.subtract(usedMetaspaceAccessor.getMember(item));
gc.committedMetaspaceDelta = gc.committedMetaspaceDelta
.subtract(committedMetaspaceAccessor.getMember(item));
} else {
gc.usedMetaspaceDelta = gc.usedMetaspaceDelta.add(usedMetaspaceAccessor.getMember(item));
gc.committedMetaspaceDelta = gc.committedMetaspaceDelta
.add(committedMetaspaceAccessor.getMember(item));
}
}
});
});
gcList.getViewer().setInput(gcMap.values().toArray());
}