< 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 >