--- old/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/pages/ClassLoadingPage.java 2018-08-27 11:40:20.072412243 -0400 +++ new/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/pages/ClassLoadingPage.java 2018-08-27 11:40:19.963412505 -0400 @@ -131,6 +131,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$ @@ -158,7 +160,20 @@ 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 @@ -173,8 +188,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; @@ -258,6 +277,42 @@ 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))); @@ -287,10 +342,14 @@ 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) { @@ -302,6 +361,12 @@ if (classUnloadingFilter != null) { classUnloadingFilter.notifyListener(); } + if (classDefineFilter != null) { + classDefineFilter.notifyListener(); + } + if (classLoaderStatisticsFilter != null) { + classLoaderStatisticsFilter.notifyListener(); + } histogramFilter = filter; } @@ -316,6 +381,18 @@ 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) { @@ -323,9 +400,13 @@ 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 +416,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(); } @@ -417,8 +500,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 +516,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;