< prev index next >

application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/pages/FileIOPage.java

Print this page

        

@@ -167,10 +167,11 @@
                 private static final String LIST_ELEMENT = "eventList"; //$NON-NLS-1$
                 private static final String TABLE_ELEMENT = "table"; //$NON-NLS-1$
 
                 private final ChartCanvas timelineCanvas;
                 private final ChartCanvas durationCanvas;
+                private final ChartCanvas sizeCanvas;
                 private XYChart timelineChart;
                 private IRange<IQuantity> timeRange;
                 private IItemCollection selectionItems;
                 private final ItemList itemList;
                 private final ItemHistogram table;

@@ -218,26 +219,33 @@
                         t2.setText(Messages.PAGES_DURATIONS);
                         t2.setControl(durationCanvas);
                         DataPageToolkit.createChartTooltip(durationCanvas);
 
                         CTabItem t3 = new CTabItem(tabFolder, SWT.NONE);
-                        t3.setToolTipText(Messages.IO_PAGE_EVENT_LOG_DESCRIPTION);
+                        t3.setToolTipText(Messages.IO_PAGE_SIZE_DESCRIPTION);
+                        sizeCanvas = new ChartCanvas(tabFolder);
+                        t3.setText(Messages.PAGES_SIZE);
+                        t3.setControl(sizeCanvas);
+                        DataPageToolkit.createChartTooltip(sizeCanvas);
+
+                        CTabItem t4 = new CTabItem(tabFolder, SWT.NONE);
+                        t4.setToolTipText(Messages.IO_PAGE_EVENT_LOG_DESCRIPTION);
                         itemList = LIST.buildWithoutBorder(tabFolder, getTableSettings(state.getChild(LIST_ELEMENT)));
                         MCContextMenuManager itemListMm = MCContextMenuManager
                                         .create(itemList.getManager().getViewer().getControl());
                         ColumnMenusFactory.addDefaultMenus(itemList.getManager(), itemListMm);
                         SelectionStoreActionToolkit.addSelectionStoreActions(pageContainer.getSelectionStore(), itemList,
                                         Messages.FileIOPage_LOG_SELECTION, itemListMm);
                         itemList.getManager().getViewer().addSelectionChangedListener(
                                         e -> pageContainer.showSelection(ItemCollectionToolkit.build(itemList.getSelection().get())));
-                        t3.setText(Messages.PAGES_EVENT_LOG);
+                        t4.setText(Messages.PAGES_EVENT_LOG);
                         itemListFilter = FilterComponent.createFilterComponent(itemList, FileIOPage.this.itemListFilter,
                                         getDataSource().getItems().apply(TABLE_ITEMS), pageContainer.getSelectionStore()::getSelections,
                                         this::onListFilterChange);
                         itemListMm.add(itemListFilter.getShowFilterAction());
                         itemListMm.add(itemListFilter.getShowSearchAction());
-                        t3.setControl(itemListFilter.getComponent());
+                        t4.setControl(itemListFilter.getComponent());
 
                         tableFilter.loadState(state.getChild(FILE_IO_TABLE));
                         itemListFilter.loadState(state.getChild(FILE_IO_LIST));
 
                         tabFolder.setSelection(tabFolderIndex);

@@ -321,27 +329,34 @@
                                         : histogramSelection.getItems();
 
                         String pathCount = pathCount(histogramSelection.getRowCount());
                         List<IXDataRenderer> timelineRows = new ArrayList<>();
                         List<IXDataRenderer> durationRows = new ArrayList<>();
+                        List<IXDataRenderer> sizeRows = new ArrayList<>();
                         IItemCollection readItems = selectedItems.apply(JdkFilters.FILE_READ);
                         if (readItems.hasItems()) {
                                 timelineRows.add(DataPageToolkit.buildSizeRow(Messages.FileIOPage_ROW_FILE_READ + pathCount,
                                                 JdkAggregators.FILE_READ_SIZE.getDescription(), readItems, JdkAggregators.FILE_READ_SIZE,
                                                 READ_COLOR, FileIOPage::getColor));
                                 durationRows.add(DataPageToolkit.buildDurationHistogram(Messages.FileIOPage_ROW_FILE_READ + pathCount,
                                                 JdkAggregators.FILE_READ_COUNT.getDescription(), readItems, JdkAggregators.FILE_READ_COUNT,
                                                 READ_COLOR));
+                                sizeRows.add(DataPageToolkit.buildSizeHistogram(Messages.FileIOPage_ROW_FILE_READ + pathCount,
+                                                JdkAggregators.FILE_READ_COUNT.getDescription(), readItems, JdkAggregators.FILE_READ_COUNT,
+                                                READ_COLOR, JdkAttributes.IO_FILE_BYTES_READ));
                         }
                         IItemCollection writeItems = selectedItems.apply(JdkFilters.FILE_WRITE);
                         if (writeItems.hasItems()) {
                                 timelineRows.add(DataPageToolkit.buildSizeRow(Messages.FileIOPage_ROW_FILE_WRITE + pathCount,
                                                 JdkAggregators.FILE_WRITE_SIZE.getDescription(), writeItems, JdkAggregators.FILE_WRITE_SIZE,
                                                 WRITE_COLOR, FileIOPage::getColor));
                                 durationRows.add(DataPageToolkit.buildDurationHistogram(Messages.FileIOPage_ROW_FILE_WRITE + pathCount,
                                                 JdkAggregators.FILE_WRITE_COUNT.getDescription(), writeItems, JdkAggregators.FILE_WRITE_COUNT,
                                                 WRITE_COLOR));
+                                sizeRows.add(DataPageToolkit.buildSizeHistogram(Messages.FileIOPage_ROW_FILE_WRITE + pathCount,
+                                                JdkAggregators.FILE_WRITE_COUNT.getDescription(), writeItems, JdkAggregators.FILE_WRITE_COUNT,
+                                                WRITE_COLOR, JdkAttributes.IO_FILE_BYTES_WRITTEN));
                         }
 //                      ItemRow[] pathRows = selection.getSelectedRows(FileIOPage::buildPathLane).toArray(ItemRow[]::new);
 
                         timelineCanvas.replaceRenderer(RendererToolkit.uniformRows(timelineRows));
 

@@ -357,10 +372,23 @@
                         durationChart.addVisibleRangeListener(range -> durationRange = range);
                         durationCanvas.setChart(durationChart);
                         SelectionStoreActionToolkit.addSelectionStoreActions(pageContainer.getSelectionStore(), durationChart,
                                         JfrAttributes.DURATION, Messages.FileIOPage_DURATION_SELECTION, durationCanvas.getContextMenu());
                         itemList.show(selectedItems);
+
+                        IXDataRenderer sizeRoot = RendererToolkit.uniformRows(sizeRows);
+                        IQuantity sizeMax = selectedItems.getAggregate(JdkAggregators.FILE_READ_LARGEST);
+                        // FIXME: Workaround to make max value included
+                        sizeMax = sizeMax == null ? UnitLookup.BYTE.quantity(64): sizeMax.add(UnitLookup.BYTE.quantity(64));
+                        XYChart sizeChart = new XYChart(UnitLookup.BYTE.quantity(0), sizeMax, sizeRoot, 180);
+                        DataPageToolkit.setChart(sizeCanvas, sizeChart, JdkAttributes.IO_SIZE,
+                                        selection -> pageContainer.showSelection(selection));
+                        sizeChart.setVisibleRange(sizeRange.getStart(), sizeRange.getEnd());
+                        sizeChart.addVisibleRangeListener(range -> sizeRange = range);
+                        sizeCanvas.setChart(sizeChart);
+                        SelectionStoreActionToolkit.addSelectionStoreActions(pageContainer.getSelectionStore(), sizeChart,
+                                        JdkAttributes.IO_SIZE, Messages.FileIOPage_SIZE_SELECTION, sizeCanvas.getContextMenu());
                 }
         }
 
         private static TableSettings getTableSettings(IState state) {
                 if (state == null) {

@@ -387,16 +415,18 @@
         private IItemFilter tableFilter = null;
         private IItemFilter itemListFilter = null;
         private int tabFolderIndex = 0;
         private IRange<IQuantity> timelineRange;
         private IRange<IQuantity> durationRange;
+        private IRange<IQuantity> sizeRange;
         public FlavorSelectorState flavorSelectorState;
 
         public FileIOPage(IPageDefinition dpd, StreamModel items, IPageContainer editor) {
                 super(dpd, items, editor);
                 timelineRange = editor.getRecordingRange();
                 durationRange = editor.getRecordingRange();
+                sizeRange = DataPageToolkit.buildSizeRange(items.getItems(), false);
         }
 
 //      private static ItemRow buildPathLane(Object path, Supplier<Stream<ItemStream>> pathItems) {
 //              String pathName = String.valueOf(path);
 //              pathName = pathName.length() > 26 ? pathName.substring(0, 23) + "..." : pathName; //$NON-NLS-1$
< prev index next >