--- old/application/org.openjdk.jmc.flightrecorder.ui/defaultPages.xml 2018-09-07 14:33:30.389504290 -0400
+++ new/application/org.openjdk.jmc.flightrecorder.ui/defaultPages.xml 2018-09-07 14:33:30.306504561 -0400
@@ -681,12 +681,30 @@
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- old/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/common/DataPageToolkit.java 2018-09-07 14:33:30.705503258 -0400
+++ new/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/common/DataPageToolkit.java 2018-09-07 14:33:30.620503535 -0400
@@ -845,6 +845,10 @@
? JdkAttributes.CLASS_DEFINING_CLASSLOADER_STRING : a)
.map(a -> a.equals(JdkAttributes.CLASS_INITIATING_CLASSLOADER)
? JdkAttributes.CLASS_INITIATING_CLASSLOADER_STRING : a)
+ .map(a -> a.equals(JdkAttributes.PARENT_CLASSLOADER)
+ ? JdkAttributes.PARENT_CLASSLOADER_STRING : a)
+ .map(a -> a.equals(JdkAttributes.CLASSLOADER)
+ ? JdkAttributes.CLASSLOADER_STRING : a)
.filter(a -> a.equals(JfrAttributes.EVENT_TYPE) || (a.getContentType() instanceof RangeContentType)
|| (a.getContentType().getPersister() != null))
.distinct();
--- old/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/messages/internal/Messages.java 2018-09-07 14:33:31.029502200 -0400
+++ new/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/messages/internal/Messages.java 2018-09-07 14:33:30.944502477 -0400
@@ -61,6 +61,10 @@
public static String ClassLoadingPage_AGGR_CLASSES_UNLOADED_BY_CLASSLOADER;
public static String ClassLoadingPage_AGGR_CLASSES_UNLOADED_BY_CLASSLOADER_DESC;
public static String ClassLoadingPage_AGGR_CLASSES_UNLOADED_DESC;
+ public static String ClassLoadingPage_CLASS_LOADER_TAB;
+ public static String ClassLoadingPage_CLASS_LOADER_STATISTICS_ACTION;
+ public static String ClassLoadingPage_CLASS_LOADER_STATISTICS_LIST_SELECTION;
+ public static String ClassLoadingPage_CLASS_LOADER_STATISTICS_TAB_TITLE;
public static String ClassLoadingPage_CLASS_LOADING_ACTION;
public static String ClassLoadingPage_CLASS_LOADING_ACTION_DESC;
public static String ClassLoadingPage_CLASS_LOADING_HISTOGRAM_SELECTION;
@@ -71,6 +75,9 @@
public static String ClassLoadingPage_CLASS_UNLOADING_ACTION_DESC;
public static String ClassLoadingPage_CLASS_UNLOADING_LIST_SELECTION;
public static String ClassLoadingPage_CLASS_UNLOADING_TAB_TITLE;
+ public static String ClassLoadingPage_CLASS_DEFINE_ACTION;
+ public static String ClassLoadingPage_CLASS_DEFINE_LIST_SELECTION;
+ public static String ClassLoadingPage_CLASS_DEFINE_TAB_TITLE;
public static String ClassLoadingPage_PAGE_NAME;
public static String ClassLoadingPage_ROW_CLASSES_LOADED;
public static String ClassLoadingPage_ROW_CLASSES_UNLOADED;
--- old/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/pages/ClassLoadingPage.java 2018-09-07 14:33:31.340501184 -0400
+++ new/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/pages/ClassLoadingPage.java 2018-09-07 14:33:31.255501461 -0400
@@ -32,10 +32,16 @@
*/
package org.openjdk.jmc.flightrecorder.ui.pages;
+
+import static org.openjdk.jmc.common.item.ItemQueryBuilder.fromWhere;
+
import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -50,10 +56,11 @@
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
-
+import org.openjdk.jmc.common.IMCClassLoader;
import org.openjdk.jmc.common.IState;
import org.openjdk.jmc.common.IWritableState;
import org.openjdk.jmc.common.item.Aggregators;
+import org.openjdk.jmc.common.item.IAggregator;
import org.openjdk.jmc.common.item.IAttribute;
import org.openjdk.jmc.common.item.IItemCollection;
import org.openjdk.jmc.common.item.IItemFilter;
@@ -131,6 +138,8 @@
private static final ItemHistogramBuilder CLASSLOADER_HISTOGRAM = new ItemHistogramBuilder();
private static final ItemListBuilder CLASS_LOADING_LIST = new ItemListBuilder();
private static final ItemListBuilder CLASS_UNLOADING_LIST = new ItemListBuilder();
+ private static final ItemListBuilder CLASS_DEFINE_LIST = new ItemListBuilder();
+ private static final ItemListBuilder CLASS_LOADER_STATISTICS_LIST = new ItemListBuilder();
private static final Map LEGEND_ITEMS = new LinkedHashMap<>();
private static final String LOADED_COUNT = "loadedCount"; //$NON-NLS-1$
private static final String UNLOADED_COUNT = "unloadedCount"; //$NON-NLS-1$
@@ -154,11 +163,27 @@
CLASS_LOADING_LIST.addColumn(JfrAttributes.DURATION);
CLASS_LOADING_LIST.addColumn(JfrAttributes.END_TIME);
CLASS_LOADING_LIST.addColumn(JfrAttributes.EVENT_THREAD);
+
CLASS_UNLOADING_LIST.addColumn(JfrAttributes.EVENT_TIMESTAMP);
CLASS_UNLOADING_LIST.addColumn(JfrAttributes.EVENT_THREAD);
CLASS_UNLOADING_LIST.addColumn(JdkAttributes.CLASS_UNLOADED);
CLASS_UNLOADING_LIST.addColumn(JdkAttributes.CLASS_DEFINING_CLASSLOADER);
-
+
+ CLASS_DEFINE_LIST.addColumn(JfrAttributes.START_TIME);
+ CLASS_DEFINE_LIST.addColumn(JdkAttributes.CLASS_DEFINING_CLASSLOADER);
+ CLASS_DEFINE_LIST.addColumn(JdkAttributes.CLASS_DEFINED);
+ CLASS_DEFINE_LIST.addColumn(JfrAttributes.EVENT_THREAD);
+
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.ANONYMOUS_BLOCK_SIZE);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.ANONYMOUS_CHUNK_SIZE);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.ANONYMOUS_CLASS_COUNT);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.BLOCK_SIZE);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.CHUNK_SIZE);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.CLASS_COUNT);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.CLASS_LOADER_DATA);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.PARENT_CLASSLOADER);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JdkAttributes.CLASSLOADER);
+ CLASS_LOADER_STATISTICS_LIST.addColumn(JfrAttributes.START_TIME);
// FIXME: Need to make a label provider for this
// FIXME: Want to have this in the same order
@@ -173,8 +198,12 @@
private final ChartCanvas classLoadingChart;
private final ItemList classLoadingTable;
private final ItemList classUnloadingTable;
+ private final ItemList classDefineTable;
+ private final ItemList classLoaderStatisticsTable;
private FilterComponent classLoadingFilter;
private FilterComponent classUnloadingFilter;
+ private FilterComponent classDefineFilter;
+ private FilterComponent classLoaderStatisticsFilter;
private final SashForm sash;
private final IPageContainer pageContainer;
private IItemCollection selectionItems;
@@ -192,6 +221,7 @@
private final List allChartSeriesActions = Stream
.concat(Stream.of(classLoadAction, classUnloadAction), statsActions).collect(Collectors.toList());
private CTabFolder tabFolder;
+ private CTabFolder classloaderFolder;
private XYChart chart;
private IRange timeRange;
private FlavorSelector flavorSelector;
@@ -220,7 +250,9 @@
JfrAttributes.LIFETIME, Messages.ClassLoadingPage_CLASS_LOADING_TIMELINE_SELECTION,
classLoadingChart.getContextMenu());
- classloaderHistogram = CLASSLOADER_HISTOGRAM.buildWithoutBorder(sash,
+ classloaderFolder = new CTabFolder(sash, SWT.NONE);
+
+ classloaderHistogram = CLASSLOADER_HISTOGRAM.buildWithoutBorder(classloaderFolder,
JdkAttributes.CLASS_DEFINING_CLASSLOADER, TableSettings.forState(state.getChild(HISTOGRAM)));
classloaderHistogramFilter = FilterComponent.createFilterComponent(classloaderHistogram, null,
getDataSource().getItems().apply(JdkFilters.CLASS_LOAD_OR_UNLOAD),
@@ -236,9 +268,38 @@
classLoaderHistogramMm.add(classloaderHistogramFilter.getShowFilterAction());
classLoaderHistogramMm.add(classloaderHistogramFilter.getShowSearchAction());
classloaderHistogramFilter.loadState(state.getChild(HISTOGRAM_FILTER));
+ DataPageToolkit.addTabItem(classloaderFolder, classloaderHistogramFilter.getComponent(),
+ Messages.ClassLoadingPage_CLASS_LOADER_TAB);
ItemHistogramWithInput.chain(classloaderHistogram, this::updateTables);
+ classLoaderStatisticsTable = CLASS_LOADER_STATISTICS_LIST.buildWithoutBorder(classloaderFolder,
+ TableSettings.forState(state.getChild(CLASS_LOADER_STATISTICS_TABLE)));
+ classLoaderStatisticsTable.getManager().getViewer().addSelectionChangedListener(e -> {
+ // The standard aggregators will skip the null classloader, so we need to do this manually.
+ IItemCollection selection = ItemCollectionToolkit.build(classLoaderStatisticsTable.getSelection().get());
+ Stream stream = ItemCollectionToolkit.values(selection, JdkAttributes.CLASSLOADER).get().distinct();
+ Set selected = stream.collect(Collectors.toSet());
+ IItemFilter selectionFilter = ItemFilters.and(ItemFilters.or(JdkFilters.CLASS_LOAD_OR_UNLOAD,
+ JdkFilters.CLASS_DEFINE), ItemFilters.memberOf(JdkAttributes.CLASS_DEFINING_CLASSLOADER, selected));
+ IItemCollection filteredItems = getDataSource().getItems().apply(selectionFilter);
+ pageContainer.showSelection(filteredItems);
+ updateTables(filteredItems);
+ });
+ classLoaderStatisticsFilter = FilterComponent.createFilterComponent(classLoaderStatisticsTable, null,
+ getDataSource().getItems().apply(JdkFilters.CLASS_LOADER_STATISTICS),
+ pageContainer.getSelectionStore()::getSelections, this::onClassLoaderStatisticsFilterChange);
+ MCContextMenuManager classLoaderStatisticsTableMm = MCContextMenuManager
+ .create(classLoaderStatisticsTable.getManager().getViewer().getControl());
+ ColumnMenusFactory.addDefaultMenus(classLoaderStatisticsTable.getManager(), classLoaderStatisticsTableMm);
+ SelectionStoreActionToolkit.addSelectionStoreActions(pageContainer.getSelectionStore(), classLoaderStatisticsTable,
+ Messages.ClassLoadingPage_CLASS_LOADER_STATISTICS_LIST_SELECTION, classLoaderStatisticsTableMm);
+ classLoaderStatisticsTableMm.add(classLoaderStatisticsFilter.getShowFilterAction());
+ classLoaderStatisticsTableMm.add(classLoaderStatisticsFilter.getShowSearchAction());
+ classLoaderStatisticsFilter.loadState(state.getChild(CLASS_LOADER_STATISTICS_FILTER));
+ DataPageToolkit.addTabItem(classloaderFolder, classLoaderStatisticsFilter.getComponent(),
+ Messages.ClassLoadingPage_CLASS_LOADER_STATISTICS_TAB_TITLE);
+
tabFolder = new CTabFolder(sash, SWT.NONE);
classLoadingTable = CLASS_LOADING_LIST.buildWithoutBorder(tabFolder,
@@ -258,6 +319,24 @@
classLoadingFilter.loadState(state.getChild(CLASS_LOADING_FILTER));
DataPageToolkit.addTabItem(tabFolder, classLoadingFilter.getComponent(),
Messages.ClassLoadingPage_CLASS_LOADING_TAB_TITLE);
+
+ classDefineTable = CLASS_DEFINE_LIST.buildWithoutBorder(tabFolder,
+ TableSettings.forState(state.getChild(CLASS_DEFINE_TABLE)));
+ classDefineTable.getManager().getViewer().addSelectionChangedListener(e -> pageContainer
+ .showSelection(ItemCollectionToolkit.build(classDefineTable.getSelection().get())));
+ classDefineFilter = FilterComponent.createFilterComponent(classDefineTable, null,
+ getDataSource().getItems().apply(JdkFilters.CLASS_DEFINE),
+ pageContainer.getSelectionStore()::getSelections, this::onClassDefineFilterChange);
+ MCContextMenuManager classDefineTableMm = MCContextMenuManager
+ .create(classDefineTable.getManager().getViewer().getControl());
+ ColumnMenusFactory.addDefaultMenus(classDefineTable.getManager(), classDefineTableMm);
+ SelectionStoreActionToolkit.addSelectionStoreActions(pageContainer.getSelectionStore(), classDefineTable,
+ Messages.ClassLoadingPage_CLASS_DEFINE_LIST_SELECTION, classDefineTableMm);
+ classDefineTableMm.add(classDefineFilter.getShowFilterAction());
+ classDefineTableMm.add(classDefineFilter.getShowSearchAction());
+ classDefineFilter.loadState(state.getChild(CLASS_DEFINE_FILTER));
+ DataPageToolkit.addTabItem(tabFolder, classDefineFilter.getComponent(),
+ Messages.ClassLoadingPage_CLASS_DEFINE_TAB_TITLE);
classUnloadingTable = CLASS_UNLOADING_LIST.buildWithoutBorder(tabFolder,
TableSettings.forState(state.getChild(CLASS_UNLOADING_TABLE)));
@@ -278,6 +357,7 @@
Messages.ClassLoadingPage_CLASS_UNLOADING_TAB_TITLE);
tabFolder.setSelection(tabFolderIndex);
+ classloaderFolder.setSelection(tabFolderIndex);
PersistableSashForm.loadState(sash, state.getChild(SASH));
flavorSelector = FlavorSelector.itemsWithTimerange(form, TABLE_FILTER, getDataSource().getItems(),
@@ -287,21 +367,31 @@
onHistogramFilterChange(histogramFilter);
onClassLoadFilterChange(classLoadTableFilter);
onClassUnloadFilterChange(classUnloadTableFilter);
+ onClassDefineFilterChange(classDefineTableFilter);
+ onClassLoaderStatisticsFilterChange(classLoaderStatisticsTableFilter);
classloaderHistogram.getManager().setSelectionState(histogramSelection);
classLoadingTable.getManager().setSelectionState(classLoadingTableSelection);
classUnloadingTable.getManager().setSelectionState(classUnloadingTableSelection);
+ classDefineTable.getManager().setSelectionState(classDefineTableSelection);
+ classLoaderStatisticsTable.getManager().setSelectionState(classLoaderStatisticsTableSelection);
}
private void onHistogramFilterChange(IItemFilter filter) {
classloaderHistogramFilter.filterChangeHelper(filter, classloaderHistogram,
- getDataSource().getItems().apply(JdkFilters.CLASS_LOAD_OR_UNLOAD));
+ getDataSource().getItems().apply(ItemFilters.or(JdkFilters.CLASS_LOAD_OR_UNLOAD, JdkFilters.CLASS_DEFINE)));
if (classLoadingFilter != null) {
classLoadingFilter.notifyListener();
}
if (classUnloadingFilter != null) {
classUnloadingFilter.notifyListener();
}
+ if (classDefineFilter != null) {
+ classDefineFilter.notifyListener();
+ }
+ if (classLoaderStatisticsFilter != null) {
+ classLoaderStatisticsFilter.notifyListener();
+ }
histogramFilter = filter;
}
@@ -316,16 +406,32 @@
getDataSource().getItems().apply(JdkFilters.CLASS_UNLOAD));
classUnloadTableFilter = filter;
}
-
+
+ private void onClassDefineFilterChange(IItemFilter filter) {
+ classDefineFilter.filterChangeHelper(filter, classDefineTable,
+ getDataSource().getItems().apply(JdkFilters.CLASS_DEFINE));
+ classDefineTableFilter = filter;
+ }
+
+ private void onClassLoaderStatisticsFilterChange(IItemFilter filter) {
+ classLoaderStatisticsFilter.filterChangeHelper(filter, classLoaderStatisticsTable,
+ getDataSource().getItems().apply(JdkFilters.CLASS_LOADER_STATISTICS));
+ classLoaderStatisticsTableFilter = filter;
+ }
+
@Override
public void saveTo(IWritableState state) {
PersistableSashForm.saveState(sash, state.createChild(SASH));
classloaderHistogram.getManager().getSettings().saveState(state.createChild(HISTOGRAM));
classLoadingTable.getManager().getSettings().saveState(state.createChild(CLASS_LOADING_TABLE));
classUnloadingTable.getManager().getSettings().saveState(state.createChild(CLASS_UNLOADING_TABLE));
+ classDefineTable.getManager().getSettings().saveState(state.createChild(CLASS_DEFINE_TABLE));
+ classLoaderStatisticsTable.getManager().getSettings().saveState(state.createChild(CLASS_LOADER_STATISTICS_TABLE));
classloaderHistogramFilter.saveState(state.createChild(HISTOGRAM_FILTER));
classLoadingFilter.saveState(state.createChild(CLASS_LOADING_FILTER));
classUnloadingFilter.saveState(state.createChild(CLASS_UNLOADING_FILTER));
+ classDefineFilter.saveState(state.createChild(CLASS_DEFINE_FILTER));
+ classLoaderStatisticsFilter.saveState(state.createChild(CLASS_LOADER_STATISTICS_FILTER));
ActionToolkit.saveCheckState(state.createChild(CHART), allChartSeriesActions.stream());
saveToLocal();
@@ -335,6 +441,8 @@
histogramSelection = classloaderHistogram.getManager().getSelectionState();
classLoadingTableSelection = classLoadingTable.getManager().getSelectionState();
classUnloadingTableSelection = classUnloadingTable.getManager().getSelectionState();
+ classDefineTableSelection = classDefineTable.getManager().getSelectionState();
+ classLoaderStatisticsTableSelection = classLoaderStatisticsTable.getManager().getSelectionState();
tabFolderIndex = tabFolder.getSelectionIndex();
flavorSelectorState = flavorSelector.getFlavorSelectorState();
}
@@ -395,9 +503,11 @@
}
private void updateTables(IItemCollection selectedItems) {
- if (classLoadingTable != null && classUnloadingTable != null) {
+ if (classLoadingTable != null && classUnloadingTable != null && classDefineTable != null
+ && classLoaderStatisticsTable != null) {
classLoadingTable.show(selectedItems.apply(JdkQueries.CLASS_LOAD.getFilter()));
classUnloadingTable.show(selectedItems.apply(JdkQueries.CLASS_UNLOAD.getFilter()));
+ classDefineTable.show(selectedItems.apply(JdkQueries.CLASS_DEFINE.getFilter()));
}
}
@@ -417,8 +527,12 @@
private static final String HISTOGRAM_FILTER = "histogramFilter"; //$NON-NLS-1$
private static final String CLASS_LOADING_TABLE = "classLoadingTable"; //$NON-NLS-1$
private static final String CLASS_UNLOADING_TABLE = "classUnloadingTable"; //$NON-NLS-1$
+ private static final String CLASS_DEFINE_TABLE = "classDefineTable"; //$NON-NLS-1$
+ private static final String CLASS_LOADER_STATISTICS_TABLE = "classLoaderStatisticsTable"; //$NON-NLS-1$
private static final String CLASS_LOADING_FILTER = "classLoadingFilter"; //$NON-NLS-1$
private static final String CLASS_UNLOADING_FILTER = "classUnloadingFilter"; //$NON-NLS-1$
+ private static final String CLASS_DEFINE_FILTER = "classDefineFilter"; //$NON-NLS-1$
+ private static final String CLASS_LOADER_STATISTICS_FILTER = "classLoaderStatisticsFilter"; //$NON-NLS-1$
private static final String CHART = "chart"; //$NON-NLS-1$
@Override
@@ -429,9 +543,13 @@
private SelectionState histogramSelection;
private SelectionState classLoadingTableSelection;
private SelectionState classUnloadingTableSelection;
+ private SelectionState classDefineTableSelection;
+ private SelectionState classLoaderStatisticsTableSelection;
private IItemFilter histogramFilter;
private IItemFilter classLoadTableFilter;
private IItemFilter classUnloadTableFilter;
+ private IItemFilter classDefineTableFilter;
+ private IItemFilter classLoaderStatisticsTableFilter;
private int tabFolderIndex = 0;
private IRange timelineRange;
private FlavorSelectorState flavorSelectorState;
--- old/application/org.openjdk.jmc.flightrecorder.ui/src/main/resources/org/openjdk/jmc/flightrecorder/ui/messages/internal/messages.properties 2018-09-07 14:33:31.655500155 -0400
+++ new/application/org.openjdk.jmc.flightrecorder.ui/src/main/resources/org/openjdk/jmc/flightrecorder/ui/messages/internal/messages.properties 2018-09-07 14:33:31.570500433 -0400
@@ -62,16 +62,23 @@
ClassLoadingPage_AGGR_CLASSES_LOADED_BY_CLASSLOADER_DESC=The number of classes loaded by this class loader
ClassLoadingPage_AGGR_CLASSES_UNLOADED_BY_CLASSLOADER=Classes Unloaded
ClassLoadingPage_AGGR_CLASSES_UNLOADED_BY_CLASSLOADER_DESC=The number of classes loaded by this class loader
+ClassLoadingPage_CLASS_LOADER_TAB = Class Loaders
ClassLoadingPage_CLASS_LOADING_ACTION=Class Loading
ClassLoadingPage_CLASS_LOADING_ACTION_DESC=Number of classes loaded during the interval
ClassLoadingPage_CLASS_LOADING_HISTOGRAM_SELECTION=Class Loading Histogram Selection
ClassLoadingPage_CLASS_LOADING_LIST_SELECTION=Class Loading List Selection
ClassLoadingPage_CLASS_LOADING_TAB_TITLE=Class Loading
ClassLoadingPage_CLASS_LOADING_TIMELINE_SELECTION=Class Loading Timeline Selection
+ClassLoadingPage_CLASS_LOADER_STATISTICS_ACTION=Class Loader Statistics
+ClassLoadingPage_CLASS_LOADER_STATISTICS_LIST_SELECTION=Class Loader Statistics List Selection
+ClassLoadingPage_CLASS_LOADER_STATISTICS_TAB_TITLE=Class Loader Statistics
ClassLoadingPage_CLASS_UNLOADING_ACTION=Class Unloading
ClassLoadingPage_CLASS_UNLOADING_ACTION_DESC=Number of classes unloaded during the interval
ClassLoadingPage_CLASS_UNLOADING_LIST_SELECTION=Class Unloading List Selection
ClassLoadingPage_CLASS_UNLOADING_TAB_TITLE=Class Unloading
+ClassLoadingPage_CLASS_DEFINE_ACTION=Class Defining
+ClassLoadingPage_CLASS_DEFINE_LIST_SELECTION=Class Defining List Selection
+ClassLoadingPage_CLASS_DEFINE_TAB_TITLE=Class Defining
ClassLoadingPage_ROW_CLASSES_LOADED=Classes Loaded
ClassLoadingPage_ROW_CLASSES_UNLOADED=Classes Unloaded
ClassLoadingPage_PAGE_NAME=Class Loading
--- old/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkAttributes.java 2018-09-07 14:33:31.967499136 -0400
+++ new/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkAttributes.java 2018-09-07 14:33:31.885499404 -0400
@@ -712,6 +712,10 @@
Messages.getString(Messages.ATTR_CLASS_DEFINING_CLASSLOADER), CLASS);
private static final IAttribute CLASS_INITIATING_CLASSLOADER_V0 = attr("initiatingClassLoader", //$NON-NLS-1$
Messages.getString(Messages.ATTR_CLASS_INITIATING_CLASSLOADER), CLASS);
+ private static final IAttribute PARENT_CLASSLOADER_V0 = attr("parentClassLoader", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_PARENT_CLASSLOADER), CLASS);
+ private static final IAttribute CLASSLOADER_V0 = attr("classLoader", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_CLASSLOADER), CLASS);
public static final IAttribute CLASS_DEFINING_CLASSLOADER = Attribute
.canonicalize(new Attribute("definingClassLoader", //$NON-NLS-1$
@@ -751,6 +755,44 @@
return null;
}
});
+ public static final IAttribute PARENT_CLASSLOADER = Attribute
+ .canonicalize(new Attribute("parentClassLoader", //$NON-NLS-1$
+ Messages.getString(Messages.ATTR_PARENT_CLASSLOADER), null, CLASS_LOADER) {
+ @Override
+ public IMemberAccessor customAccessor(IType type) {
+ // V1 is handled by the standard accessor
+ final IMemberAccessor accessorV0 = PARENT_CLASSLOADER_V0.getAccessor(type);
+ if (accessorV0 != null) {
+ return new IMemberAccessor() {
+ @Override
+ public IMCClassLoader getMember(U i) {
+ IMCType type = accessorV0.getMember(i);
+ return new MCClassLoader(type, null);
+ }
+ };
+ }
+ return null;
+ }
+ });
+ public static final IAttribute CLASSLOADER = Attribute
+ .canonicalize(new Attribute("classLoader", //$NON-NLS-1$
+ Messages.getString(Messages.ATTR_CLASSLOADER), null, CLASS_LOADER) {
+ @Override
+ public IMemberAccessor customAccessor(IType type) {
+ // V1 is handled by the standard accessor
+ final IMemberAccessor accessorV0 = CLASSLOADER_V0.getAccessor(type);
+ if (accessorV0 != null) {
+ return new IMemberAccessor() {
+ @Override
+ public IMCClassLoader getMember(U i) {
+ IMCType type = accessorV0.getMember(i);
+ return new MCClassLoader(type, null);
+ }
+ };
+ }
+ return null;
+ }
+ });
public static final IAttribute CLASS_DEFINING_CLASSLOADER_STRING = Attribute
.canonicalize(new Attribute("defininingClassLoader.string", //$NON-NLS-1$
Messages.getString(Messages.ATTR_CLASS_DEFINING_CLASSLOADER), null, PLAIN_TEXT) {
@@ -781,11 +823,58 @@
};
}
});
+ public static final IAttribute PARENT_CLASSLOADER_STRING = Attribute
+ .canonicalize(new Attribute("parentClassLoader.string", //$NON-NLS-1$
+ Messages.getString(Messages.ATTR_PARENT_CLASSLOADER), null, PLAIN_TEXT) {
+ @Override
+ public IMemberAccessor customAccessor(IType type) {
+ final IMemberAccessor accessor = PARENT_CLASSLOADER.getAccessor(type);
+ return accessor == null ? null : new IMemberAccessor() {
+ @Override
+ public String getMember(U i) {
+ IMCClassLoader cl = accessor.getMember(i);
+ return cl == null ? null : FormatToolkit.getHumanReadable(cl);
+ }
+ };
+ }
+ });
+
+ public static final IAttribute CLASSLOADER_STRING = Attribute
+ .canonicalize(new Attribute("classLoader.string", //$NON-NLS-1$
+ Messages.getString(Messages.ATTR_CLASSLOADER), null, PLAIN_TEXT) {
+ @Override
+ public IMemberAccessor customAccessor(IType type) {
+ final IMemberAccessor accessor = CLASSLOADER.getAccessor(type);
+ return accessor == null ? null : new IMemberAccessor() {
+ @Override
+ public String getMember(U i) {
+ IMCClassLoader cl = accessor.getMember(i);
+ return cl == null ? null : FormatToolkit.getHumanReadable(cl);
+ }
+ };
+ }
+ });
public static final IAttribute CLASS_LOADED = attr("loadedClass", //$NON-NLS-1$
Messages.getString(Messages.ATTR_CLASS_LOADED), CLASS);
public static final IAttribute CLASS_UNLOADED = attr("unloadedClass", //$NON-NLS-1$
Messages.getString(Messages.ATTR_CLASS_UNLOADED), CLASS);
+ public static final IAttribute CLASS_DEFINED = attr("definedClass", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_CLASS_DEFINED), CLASS);
+ public static final IAttribute ANONYMOUS_BLOCK_SIZE = attr("anonymousBlockSize", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_ANONYMOUS_BLOCK_SIZE), MEMORY);
+ public static final IAttribute ANONYMOUS_CHUNK_SIZE = attr("anonymousChunkSize", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_ANONYMOUS_CHUNK_SIZE), MEMORY);
+ public static final IAttribute ANONYMOUS_CLASS_COUNT = attr("anonymousClassCount", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_ANONYMOUS_CLASS_COUNT), NUMBER);
+ public static final IAttribute BLOCK_SIZE = attr("blockSize", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_BLOCK_SIZE), MEMORY);
+ public static final IAttribute CHUNK_SIZE = attr("chunkSize", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_CHUNK_SIZE), MEMORY);
+ public static final IAttribute CLASS_COUNT = attr("classCount", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_CLASS_COUNT), NUMBER);
+ public static final IAttribute CLASS_LOADER_DATA = attr("classLoaderData", // $NON-NLS-1$
+ Messages.getString(Messages.ATTR_CLASSLOADER_DATA), ADDRESS);
public static final IAttribute COMPILER_COMPILATION_ID = attr("compileId", //$NON-NLS-1$
Messages.getString(Messages.ATTR_COMPILER_COMPILATION_ID), NUMBER);
--- old/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkFilters.java 2018-09-07 14:33:32.283498104 -0400
+++ new/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkFilters.java 2018-09-07 14:33:32.199498379 -0400
@@ -86,8 +86,11 @@
public static final IItemFilter THROWABLES_STATISTICS = ItemFilters.type(JdkTypeIDs.THROWABLES_STATISTICS);
public static final IItemFilter CLASS_UNLOAD = ItemFilters.type(JdkTypeIDs.CLASS_UNLOAD);
public static final IItemFilter CLASS_LOAD_STATISTICS = ItemFilters.type(JdkTypeIDs.CLASS_LOAD_STATISTICS);
+ public static final IItemFilter CLASS_LOADER_STATISTICS = ItemFilters.type(JdkTypeIDs.CLASS_LOADER_STATISTICS);
public static final IItemFilter CLASS_LOAD = ItemFilters.type(JdkTypeIDs.CLASS_LOAD);
public static final IItemFilter CLASS_LOAD_OR_UNLOAD = ItemFilters.or(CLASS_LOAD, CLASS_UNLOAD);
+ public static final IItemFilter CLASS_DEFINE = ItemFilters.type(JdkTypeIDs.CLASS_DEFINE);
+ public static final IItemFilter CLASS_LOADER_EVENTS = ItemFilters.or(CLASS_LOAD, CLASS_UNLOAD, CLASS_DEFINE, CLASS_LOADER_STATISTICS);
public static final IItemFilter MONITOR_ENTER = ItemFilters.type(JdkTypeIDs.MONITOR_ENTER);
public static final IItemFilter FILE_OR_SOCKET_IO = ItemFilters.type(JdkTypeIDs.SOCKET_READ,
JdkTypeIDs.SOCKET_WRITE, JdkTypeIDs.FILE_READ, JdkTypeIDs.FILE_WRITE);
--- old/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkQueries.java 2018-09-07 14:33:32.579497138 -0400
+++ new/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkQueries.java 2018-09-07 14:33:32.499497399 -0400
@@ -55,6 +55,7 @@
import static org.openjdk.jmc.flightrecorder.jdk.JdkAttributes.CLASSLOADER_UNLOADED_COUNT;
import static org.openjdk.jmc.flightrecorder.jdk.JdkAttributes.CLASS_DEFINING_CLASSLOADER;
import static org.openjdk.jmc.flightrecorder.jdk.JdkAttributes.CLASS_INITIATING_CLASSLOADER;
+import static org.openjdk.jmc.flightrecorder.jdk.JdkAttributes.CLASS_DEFINED;
import static org.openjdk.jmc.flightrecorder.jdk.JdkAttributes.CLASS_LOADED;
import static org.openjdk.jmc.flightrecorder.jdk.JdkAttributes.CLASS_UNLOADED;
import static org.openjdk.jmc.flightrecorder.jdk.JdkAttributes.COMMAND_LINE;
@@ -143,6 +144,9 @@
public static final IItemQuery CLASS_LOAD = fromWhere(JdkFilters.CLASS_LOAD)
.select(CLASS_LOADED, CLASS_DEFINING_CLASSLOADER, CLASS_INITIATING_CLASSLOADER, EVENT_THREAD, DURATION)
.build();
+ public static final IItemQuery CLASS_DEFINE = fromWhere(JdkFilters.CLASS_DEFINE)
+ .select(CLASS_DEFINED, CLASS_DEFINING_CLASSLOADER)
+ .build();
public static final IItemQuery CLASS_LOAD_STATISTICS = fromWhere(JdkFilters.CLASS_LOAD_STATISTICS)
.select(CLASSLOADER_LOADED_COUNT, CLASSLOADER_UNLOADED_COUNT).build();
public static final IItemQuery CLASS_UNLOAD = fromWhere(JdkFilters.CLASS_UNLOAD)
--- old/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkTypeIDs.java 2018-09-07 14:33:32.890496122 -0400
+++ new/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/JdkTypeIDs.java 2018-09-07 14:33:32.805496400 -0400
@@ -63,6 +63,7 @@
public static final String ALLOC_INSIDE_TLAB = PREFIX + "ObjectAllocationInNewTLAB";
public static final String ALLOC_OUTSIDE_TLAB = PREFIX + "ObjectAllocationOutsideTLAB";
public static final String VM_INFO = PREFIX + "JVMInformation";
+ public static final String CLASS_DEFINE = PREFIX + "ClassDefine";
public static final String CLASS_LOAD = PREFIX + "ClassLoad";
public static final String CLASS_UNLOAD = PREFIX + "ClassUnload";
public static final String CLASS_LOAD_STATISTICS = PREFIX + "ClassLoadingStatistics";
--- old/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/messages/internal/Messages.java 2018-09-07 14:33:33.186495155 -0400
+++ new/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/jdk/messages/internal/Messages.java 2018-09-07 14:33:33.102495430 -0400
@@ -156,18 +156,27 @@
public static final String ATTR_ALLOCATION_CLASS = "ATTR_ALLOCATION_CLASS"; //$NON-NLS-1$
public static final String ATTR_ALLOCATION_CLASS_DESC = "ATTR_ALLOCATION_CLASS_DESC"; //$NON-NLS-1$
public static final String ATTR_ALLOCATION_SIZE = "ATTR_ALLOCATION_SIZE"; //$NON-NLS-1$
+ public static final String ATTR_ANONYMOUS_BLOCK_SIZE = "ATTR_ANONYMOUS_BLOCK_SIZE"; //$NON-NLS-1$
+ public static final String ATTR_ANONYMOUS_CHUNK_SIZE = "ATTR_ANONYMOUS_CHUNK_SIZE"; //$NON-NLS-1$
+ public static final String ATTR_ANONYMOUS_CLASS_COUNT = "ATTR_ANONYMOUS_CLASS_COUNT"; //$NON-NLS-1$
+ public static final String ATTR_BLOCK_SIZE = "ATTR_BLOCK_SIZE"; //$NON-NLS-1$
public static final String ATTR_BLOCKING = "ATTR_BLOCKING"; //$NON-NLS-1$
public static final String ATTR_BLOCKING_DESC = "ATTR_BLOCKING_DESC"; //$NON-NLS-1$
public static final String ATTR_CALLER = "ATTR_CALLER"; //$NON-NLS-1$
public static final String ATTR_CALLER_DESC = "ATTR_CALLER_DESC"; //$NON-NLS-1$
+ public static final String ATTR_CHUNK_SIZE = "ATTR_CHUNK_SIZE"; //$NON-NLS-1$
+ public static final String ATTR_CLASSLOADER = "ATTR_CLASSLOADER"; //$NON-NLS-1$
+ public static final String ATTR_CLASSLOADER_DATA = "ATTR_CLASSLOADER_DATA"; //$NON-NLS-1$
public static final String ATTR_CLASSLOADER_LOADED_COUNT = "ATTR_CLASSLOADER_LOADED_COUNT"; //$NON-NLS-1$
public static final String ATTR_CLASSLOADER_LOADED_COUNT_DESC = "ATTR_CLASSLOADER_LOADED_COUNT_DESC"; //$NON-NLS-1$
public static final String ATTR_CLASSLOADER_UNLOADED_COUNT = "ATTR_CLASSLOADER_UNLOADED_COUNT"; //$NON-NLS-1$
public static final String ATTR_CLASSLOADER_UNLOADED_COUNT_DESC = "ATTR_CLASSLOADER_UNLOADED_COUNT_DESC"; //$NON-NLS-1$
public static final String ATTR_CLASS_DEFINING_CLASSLOADER = "ATTR_CLASS_DEFINING_CLASSLOADER"; //$NON-NLS-1$
public static final String ATTR_CLASS_INITIATING_CLASSLOADER = "ATTR_CLASS_INITIATING_CLASSLOADER"; //$NON-NLS-1$
+ public static final String ATTR_CLASS_COUNT = "ATTR_CLASS_COUNT"; //$NON-NLS-1$
public static final String ATTR_CLASS_LOADED = "ATTR_CLASS_LOADED"; //$NON-NLS-1$
public static final String ATTR_CLASS_UNLOADED = "ATTR_CLASS_UNLOADED"; //$NON-NLS-1$
+ public static final String ATTR_CLASS_DEFINED = "ATTR_CLASS_DEFINED"; //$NON-NLS-1$
public static final String ATTR_CODE_HEAP = "ATTR_CODE_HEAP"; //$NON-NLS-1$
public static final String ATTR_COMMAND_LINE = "ATTR_COMMAND_LINE"; //$NON-NLS-1$
public static final String ATTR_COMMITTED_TOP = "ATTR_COMMITTED_TOP"; //$NON-NLS-1$
@@ -290,6 +299,7 @@
public static final String ATTR_IO_FILE_READ_EOF_DESC = "ATTR_IO_FILE_READ_EOF_DESC"; //$NON-NLS-1$
public static final String ATTR_IO_HOST = "ATTR_IO_HOST"; //$NON-NLS-1$
public static final String ATTR_IO_HOST_DESC = "ATTR_IO_HOST_DESC"; //$NON-NLS-1$
+ public static final String ATTR_PARENT_ClASSLOADER = "ATTR_PARENT_CLASSLOADER"; //$NON-NLS-1$
public static final String ATTR_IO_PATH = "ATTR_IO_PATH"; //$NON-NLS-1$
public static final String ATTR_IO_PATH_DESC = "ATTR_IO_PATH_DESC"; //$NON-NLS-1$
public static final String ATTR_IO_PORT = "ATTR_IO_PORT"; //$NON-NLS-1$
@@ -361,6 +371,7 @@
public static final String ATTR_OTHER_CPU_DESC = "ATTR_OTHER_CPU_DESC"; //$NON-NLS-1$
public static final String ATTR_PARALLEL_GC_THREADS = "ATTR_PARALLEL_GC_THREADS"; //$NON-NLS-1$
public static final String ATTR_PARALLEL_GC_THREADS_DESC = "ATTR_PARALLEL_GC_THREADS_DESC"; //$NON-NLS-1$
+ public static final String ATTR_PARENT_CLASSLOADER = "ATTR_PARENT_CLASSLOADER"; //$NON-NLS-1$
public static final String ATTR_PID = "ATTR_PID"; //$NON-NLS-1$
public static final String ATTR_PROFILED_NMETHODS_ENTRIES = "ATTR_PROFILED_NMETHODS_ENTRIES"; //$NON-NLS-1$
public static final String ATTR_PROFILED_NMETHODS_ENTRIES_DESCRIPTION = "ATTR_PROFILED_NMETHODS_ENTRIES_DESCRIPTION"; //$NON-NLS-1$
--- old/core/org.openjdk.jmc.flightrecorder/src/main/resources/org/openjdk/jmc/flightrecorder/jdk/messages/internal/messages.properties 2018-09-07 14:33:33.491494159 -0400
+++ new/core/org.openjdk.jmc.flightrecorder/src/main/resources/org/openjdk/jmc/flightrecorder/jdk/messages/internal/messages.properties 2018-09-07 14:33:33.411494420 -0400
@@ -207,6 +207,7 @@
ATTR_CLASSLOADER_UNLOADED_COUNT_DESC=Number of classes unloaded since JVM start
ATTR_CLASS_DEFINING_CLASSLOADER=Defining Class Loader
ATTR_CLASS_INITIATING_CLASSLOADER=Initiating Class Loader
+ATTR_CLASS_DEFINED=Defined Class
ATTR_CLASS_LOADED=Loaded Class
ATTR_CLASS_UNLOADED=Unloaded Class
ATTR_COMPILER_COMPILATION_ID=Compilation ID
@@ -310,6 +311,16 @@
ATTR_IO_PORT_ON_ADDRESS=Remote Address and Port
ATTR_EXCEPTION_THROWNCLASS_NAME=Class Name
ATTR_EXCEPTION_THROWNCLASS_NAME_DESC=The class name of the thrown class
+ATTR_ANONYMOUS_BLOCK_SIZE=Anonymous Block Size
+ATTR_ANONYMOUS_CHUNK_SIZE=Anonymous Chunk Size
+ATTR_ANONYMOUS_CLASS_COUNT=Anonymous Class Count
+ATTR_BLOCK_SIZE=Block Size
+ATTR_CHUNK_SIZE=Chunk Size
+ATTR_CLASS_COUNT=Class Count
+ATTR_CLASSLOADER_DATA=Classloader Data Pointer
+ATTR_PARENT_CLASSLOADER=Parent Class Loader
+ATTR_CLASSLOADER=Class Loader
+
AGGR_MAX_USED_MEMORY=Maximum used memory
AGGR_MIN_TOTAL_MEMORY=Available physical memory