< prev index next >
application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/pages/ClassLoadingPage.java
Print this page
@@ -129,10 +129,12 @@
private static final IItemFilter TABLE_FILTER = ItemFilters.or(JdkQueries.CLASS_LOAD.getFilter(),
JdkQueries.CLASS_UNLOAD.getFilter());
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<String, Boolean> LEGEND_ITEMS = new LinkedHashMap<>();
private static final String LOADED_COUNT = "loadedCount"; //$NON-NLS-1$
private static final String UNLOADED_COUNT = "unloadedCount"; //$NON-NLS-1$
private static final String CLASS_LOAD = "classLoad"; //$NON-NLS-1$
private static final String CLASS_UNLOAD = "classUnload"; //$NON-NLS-1$
@@ -156,11 +158,24 @@
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(JdkAttributes.CLASS_DEFINING_CLASSLOADER);
+ CLASS_DEFINE_LIST.addColumn(JdkAttributes.CLASS_DEFINED);
+ CLASS_DEFINE_LIST.addColumn(JfrAttributes.EVENT_THREAD);
+ CLASS_DEFINE_LIST.addColumn(JfrAttributes.START_TIME);
+ 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
LEGEND_ITEMS.put(JdkAttributes.CLASSLOADER_LOADED_COUNT.getIdentifier(), Boolean.TRUE);
LEGEND_ITEMS.put(JdkAttributes.CLASSLOADER_UNLOADED_COUNT.getIdentifier(), Boolean.FALSE);
@@ -171,12 +186,16 @@
private class ClassLoadingUi implements IPageUI {
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;
private ItemHistogram classloaderHistogram;
private FilterComponent classloaderHistogramFilter;
@@ -257,10 +276,46 @@
classLoadingTableMm.add(classLoadingFilter.getShowSearchAction());
classLoadingFilter.loadState(state.getChild(CLASS_LOADING_FILTER));
DataPageToolkit.addTabItem(tabFolder, classLoadingFilter.getComponent(),
Messages.ClassLoadingPage_CLASS_LOADING_TAB_TITLE);
+ classLoaderStatisticsTable = CLASS_LOADER_STATISTICS_LIST.buildWithoutBorder(tabFolder,
+ TableSettings.forState(state.getChild(CLASS_LOADER_STATISTICS_TABLE)));
+ classLoaderStatisticsTable.getManager().getViewer().addSelectionChangedListener(e -> pageContainer
+ .showSelection(ItemCollectionToolkit.build(classLoaderStatisticsTable.getSelection().get())));
+ classLoaderStatisticsFilter = FilterComponent.createFilterComponent(classLoaderStatisticsTable, null,
+ getDataSource().getItems().apply(JdkFilters.CLASS_LOADER_STATISTICS),
+ pageContainer.getSelectionStore()::getSelections, this::onClassLoadFilterChange);
+ 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(tabFolder, classLoaderStatisticsFilter.getComponent(),
+ Messages.ClassLoadingPage_CLASS_LOADER_STATISTICS_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::onClassLoadFilterChange);
+ 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)));
classUnloadingTable.getManager().getViewer().addSelectionChangedListener(e -> pageContainer
.showSelection(ItemCollectionToolkit.build(classUnloadingTable.getSelection().get())));
classUnloadingFilter = FilterComponent.createFilterComponent(classUnloadingTable, null,
@@ -285,14 +340,18 @@
addResultActions(form);
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));
@@ -300,10 +359,16 @@
classLoadingFilter.notifyListener();
}
if (classUnloadingFilter != null) {
classUnloadingFilter.notifyListener();
}
+ if (classDefineFilter != null) {
+ classDefineFilter.notifyListener();
+ }
+ if (classLoaderStatisticsFilter != null) {
+ classLoaderStatisticsFilter.notifyListener();
+ }
histogramFilter = filter;
}
private void onClassLoadFilterChange(IItemFilter filter) {
classLoadingFilter.filterChangeHelper(filter, classLoadingTable,
@@ -315,28 +380,46 @@
classUnloadingFilter.filterChangeHelper(filter, classUnloadingTable,
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();
}
private void saveToLocal() {
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();
}
private void onShow(Boolean show) {
@@ -415,25 +498,33 @@
private static final String SASH = "sash"; //$NON-NLS-1$
private static final String HISTOGRAM = "histogram"; //$NON-NLS-1$
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
public IPageUI display(Composite parent, FormToolkit toolkit, IPageContainer pageContainer, IState state) {
return new ClassLoadingUi(parent, toolkit, pageContainer, state);
}
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<IQuantity> timelineRange;
private FlavorSelectorState flavorSelectorState;
public ClassLoadingPage(IPageDefinition dpd, StreamModel items, IPageContainer editor) {
< prev index next >