< prev index next >

application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/common/DataPageToolkit.java

Print this page




  94 import org.eclipse.swt.widgets.FileDialog;
  95 import org.eclipse.swt.widgets.Label;
  96 import org.eclipse.ui.forms.widgets.Form;
  97 import org.eclipse.ui.forms.widgets.FormText;
  98 import org.eclipse.ui.forms.widgets.FormToolkit;
  99 import org.openjdk.jmc.common.item.IAggregator;
 100 import org.openjdk.jmc.common.item.IAttribute;
 101 import org.openjdk.jmc.common.item.ICanonicalAccessorFactory;
 102 import org.openjdk.jmc.common.item.IItem;
 103 import org.openjdk.jmc.common.item.IItemCollection;
 104 import org.openjdk.jmc.common.item.IItemFilter;
 105 import org.openjdk.jmc.common.item.IItemIterable;
 106 import org.openjdk.jmc.common.item.IItemQuery;
 107 import org.openjdk.jmc.common.item.IMemberAccessor;
 108 import org.openjdk.jmc.common.item.IType;
 109 import org.openjdk.jmc.common.item.ItemFilters;
 110 import org.openjdk.jmc.common.item.ItemToolkit;
 111 import org.openjdk.jmc.common.unit.IQuantity;
 112 import org.openjdk.jmc.common.unit.IRange;
 113 import org.openjdk.jmc.common.unit.KindOfQuantity;

 114 import org.openjdk.jmc.common.unit.QuantityRange;
 115 import org.openjdk.jmc.common.unit.RangeContentType;
 116 import org.openjdk.jmc.common.unit.UnitLookup;
 117 import org.openjdk.jmc.common.util.ColorToolkit;
 118 import org.openjdk.jmc.common.util.CompositeKey;
 119 import org.openjdk.jmc.flightrecorder.JfrAttributes;

 120 import org.openjdk.jmc.flightrecorder.jdk.JdkAttributes;
 121 import org.openjdk.jmc.flightrecorder.jdk.JdkFilters;
 122 import org.openjdk.jmc.flightrecorder.jdk.JdkTypeIDs;
 123 import org.openjdk.jmc.flightrecorder.rules.Result;
 124 import org.openjdk.jmc.flightrecorder.rules.Severity;
 125 import org.openjdk.jmc.flightrecorder.ui.FlightRecorderUI;
 126 import org.openjdk.jmc.flightrecorder.ui.IPageContainer;
 127 import org.openjdk.jmc.flightrecorder.ui.ItemCollectionToolkit;
 128 import org.openjdk.jmc.flightrecorder.ui.ItemIterableToolkit;

 129 import org.openjdk.jmc.flightrecorder.ui.common.ItemHistogram.CompositeKeyHistogramBuilder;
 130 import org.openjdk.jmc.flightrecorder.ui.common.ItemList.ItemListBuilder;
 131 import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages;
 132 import org.openjdk.jmc.flightrecorder.ui.overview.ResultOverview;


 133 import org.openjdk.jmc.flightrecorder.ui.selection.IFilterFlavor;
 134 import org.openjdk.jmc.flightrecorder.ui.selection.SelectionStore.SelectionStoreEntry;
 135 import org.openjdk.jmc.flightrecorder.ui.selection.SelectionStoreActionToolkit;
 136 import org.openjdk.jmc.ui.charts.AWTChartToolkit.IColorProvider;
 137 import org.openjdk.jmc.ui.charts.IQuantitySeries;
 138 import org.openjdk.jmc.ui.charts.ISpanSeries;
 139 import org.openjdk.jmc.ui.charts.IXDataRenderer;
 140 import org.openjdk.jmc.ui.charts.QuantitySeries;
 141 import org.openjdk.jmc.ui.charts.RendererToolkit;
 142 import org.openjdk.jmc.ui.charts.SpanRenderer;
 143 import org.openjdk.jmc.ui.charts.SubdividedQuantityRange;
 144 import org.openjdk.jmc.ui.charts.XYChart;
 145 import org.openjdk.jmc.ui.charts.XYDataRenderer;
 146 import org.openjdk.jmc.ui.charts.XYQuantities;
 147 import org.openjdk.jmc.ui.column.ColumnMenusFactory;
 148 import org.openjdk.jmc.ui.column.TableSettings;
 149 import org.openjdk.jmc.ui.column.TableSettings.ColumnSettings;
 150 import org.openjdk.jmc.ui.handlers.ActionToolkit;
 151 import org.openjdk.jmc.ui.handlers.MCContextMenuManager;
 152 import org.openjdk.jmc.ui.misc.ChartCanvas;


 546                 for (IAction action : extraActions) {
 547                         mm.add(action);
 548                 }
 549         }
 550 
 551         public static IXDataRenderer buildSizeRow(
 552                 String title, String description, IItemCollection items, IAggregator<IQuantity, ?> a, Color color,
 553                 IColorProvider<IItem> cp) {
 554                 return RendererToolkit.layers(buildSpanRenderer(items, cp),
 555                                 buildTimestampHistogram(title, description, items, a, color));
 556         }
 557 
 558         public static ItemRow buildDurationHistogram(
 559                 String title, String description, IItemCollection items, IAggregator<IQuantity, ?> a, Color color) {
 560                 IQuantitySeries<IQuantity[]> allocationSeries = BucketBuilder.aggregatorSeries(items, a,
 561                                 JfrAttributes.DURATION);
 562                 XYDataRenderer renderer = new XYDataRenderer(getKindOfQuantity(a).getDefaultUnit().quantity(0), title,
 563                                 description);
 564                 renderer.addBarChart(a.getName(), allocationSeries, color);
 565                 return new ItemRow(title, description, renderer, items);























 566         }
 567 
 568         // FIXME: Make something that can use something other than time as x-axis?
 569         public static IXDataRenderer buildSpanRenderer(IItemCollection pathItems, IColorProvider<IItem> cp) {
 570                 ISpanSeries<IItem> dataSeries = QuantitySeries.max(pathItems, JfrAttributes.START_TIME, JfrAttributes.END_TIME);
 571                 return SpanRenderer.withBoundaries(dataSeries, cp);
 572         }
 573 
 574         public static boolean addEndTimeLines(
 575                 XYDataRenderer renderer, IItemCollection items, boolean fill, Stream<IAttribute<IQuantity>> yAttributes) {
 576                 // FIXME: JMC-4520 - Handle multiple item iterables
 577                 Iterator<IItemIterable> ii = items.iterator();
 578                 if (ii.hasNext()) {
 579                         IItemIterable itemStream = ii.next();
 580                         IType<IItem> type = itemStream.getType();
 581                         // FIXME: A better way to ensure sorting by endTime
 582                         return yAttributes.peek(a -> addEndTimeLine(renderer, itemStream.iterator(), type, a, fill))
 583                                         .mapToLong(a -> 1L).sum() > 0;
 584                 }
 585                 return false;




  94 import org.eclipse.swt.widgets.FileDialog;
  95 import org.eclipse.swt.widgets.Label;
  96 import org.eclipse.ui.forms.widgets.Form;
  97 import org.eclipse.ui.forms.widgets.FormText;
  98 import org.eclipse.ui.forms.widgets.FormToolkit;
  99 import org.openjdk.jmc.common.item.IAggregator;
 100 import org.openjdk.jmc.common.item.IAttribute;
 101 import org.openjdk.jmc.common.item.ICanonicalAccessorFactory;
 102 import org.openjdk.jmc.common.item.IItem;
 103 import org.openjdk.jmc.common.item.IItemCollection;
 104 import org.openjdk.jmc.common.item.IItemFilter;
 105 import org.openjdk.jmc.common.item.IItemIterable;
 106 import org.openjdk.jmc.common.item.IItemQuery;
 107 import org.openjdk.jmc.common.item.IMemberAccessor;
 108 import org.openjdk.jmc.common.item.IType;
 109 import org.openjdk.jmc.common.item.ItemFilters;
 110 import org.openjdk.jmc.common.item.ItemToolkit;
 111 import org.openjdk.jmc.common.unit.IQuantity;
 112 import org.openjdk.jmc.common.unit.IRange;
 113 import org.openjdk.jmc.common.unit.KindOfQuantity;
 114 import org.openjdk.jmc.common.unit.QuantitiesToolkit;
 115 import org.openjdk.jmc.common.unit.QuantityRange;
 116 import org.openjdk.jmc.common.unit.RangeContentType;
 117 import org.openjdk.jmc.common.unit.UnitLookup;
 118 import org.openjdk.jmc.common.util.ColorToolkit;
 119 import org.openjdk.jmc.common.util.CompositeKey;
 120 import org.openjdk.jmc.flightrecorder.JfrAttributes;
 121 import org.openjdk.jmc.flightrecorder.jdk.JdkAggregators;
 122 import org.openjdk.jmc.flightrecorder.jdk.JdkAttributes;
 123 import org.openjdk.jmc.flightrecorder.jdk.JdkFilters;
 124 import org.openjdk.jmc.flightrecorder.jdk.JdkTypeIDs;
 125 import org.openjdk.jmc.flightrecorder.rules.Result;
 126 import org.openjdk.jmc.flightrecorder.rules.Severity;
 127 import org.openjdk.jmc.flightrecorder.ui.FlightRecorderUI;
 128 import org.openjdk.jmc.flightrecorder.ui.IPageContainer;
 129 import org.openjdk.jmc.flightrecorder.ui.ItemCollectionToolkit;
 130 import org.openjdk.jmc.flightrecorder.ui.ItemIterableToolkit;
 131 import org.openjdk.jmc.flightrecorder.ui.PageManager;
 132 import org.openjdk.jmc.flightrecorder.ui.common.ItemHistogram.CompositeKeyHistogramBuilder;
 133 import org.openjdk.jmc.flightrecorder.ui.common.ItemList.ItemListBuilder;
 134 import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages;
 135 import org.openjdk.jmc.flightrecorder.ui.overview.ResultOverview;
 136 import org.openjdk.jmc.flightrecorder.ui.pages.itemhandler.ItemHandlerPage;
 137 import org.openjdk.jmc.flightrecorder.ui.pages.itemhandler.ItemHandlerPage.ItemHandlerUiStandIn;
 138 import org.openjdk.jmc.flightrecorder.ui.selection.IFilterFlavor;
 139 import org.openjdk.jmc.flightrecorder.ui.selection.SelectionStore.SelectionStoreEntry;
 140 import org.openjdk.jmc.flightrecorder.ui.selection.SelectionStoreActionToolkit;
 141 import org.openjdk.jmc.ui.charts.AWTChartToolkit.IColorProvider;
 142 import org.openjdk.jmc.ui.charts.IQuantitySeries;
 143 import org.openjdk.jmc.ui.charts.ISpanSeries;
 144 import org.openjdk.jmc.ui.charts.IXDataRenderer;
 145 import org.openjdk.jmc.ui.charts.QuantitySeries;
 146 import org.openjdk.jmc.ui.charts.RendererToolkit;
 147 import org.openjdk.jmc.ui.charts.SpanRenderer;
 148 import org.openjdk.jmc.ui.charts.SubdividedQuantityRange;
 149 import org.openjdk.jmc.ui.charts.XYChart;
 150 import org.openjdk.jmc.ui.charts.XYDataRenderer;
 151 import org.openjdk.jmc.ui.charts.XYQuantities;
 152 import org.openjdk.jmc.ui.column.ColumnMenusFactory;
 153 import org.openjdk.jmc.ui.column.TableSettings;
 154 import org.openjdk.jmc.ui.column.TableSettings.ColumnSettings;
 155 import org.openjdk.jmc.ui.handlers.ActionToolkit;
 156 import org.openjdk.jmc.ui.handlers.MCContextMenuManager;
 157 import org.openjdk.jmc.ui.misc.ChartCanvas;


 551                 for (IAction action : extraActions) {
 552                         mm.add(action);
 553                 }
 554         }
 555 
 556         public static IXDataRenderer buildSizeRow(
 557                 String title, String description, IItemCollection items, IAggregator<IQuantity, ?> a, Color color,
 558                 IColorProvider<IItem> cp) {
 559                 return RendererToolkit.layers(buildSpanRenderer(items, cp),
 560                                 buildTimestampHistogram(title, description, items, a, color));
 561         }
 562 
 563         public static ItemRow buildDurationHistogram(
 564                 String title, String description, IItemCollection items, IAggregator<IQuantity, ?> a, Color color) {
 565                 IQuantitySeries<IQuantity[]> allocationSeries = BucketBuilder.aggregatorSeries(items, a,
 566                                 JfrAttributes.DURATION);
 567                 XYDataRenderer renderer = new XYDataRenderer(getKindOfQuantity(a).getDefaultUnit().quantity(0), title,
 568                                 description);
 569                 renderer.addBarChart(a.getName(), allocationSeries, color);
 570                 return new ItemRow(title, description, renderer, items);
 571         }
 572 
 573         public static ItemRow buildSizeHistogram(
 574                 String title, String description, IItemCollection items, IAggregator<IQuantity, ?> a, Color color, IAttribute<IQuantity> attribute) {
 575                 IQuantitySeries<IQuantity[]> allocationSeries = BucketBuilder.aggregatorSeries(items, a,
 576                                 JdkAttributes.IO_SIZE);
 577                 XYDataRenderer renderer = new XYDataRenderer(getKindOfQuantity(a).getDefaultUnit().quantity(0), title,
 578                                 description);
 579                 renderer.addBarChart(a.getName(), allocationSeries, color);
 580                 return new ItemRow(title, description, renderer, items);
 581         }
 582 
 583         public static IRange<IQuantity> buildSizeRange(IItemCollection items, boolean isSocket){
 584                 IQuantity end = null;
 585                 if(isSocket) {
 586                         end = QuantitiesToolkit.maxPresent(items.getAggregate(JdkAggregators.SOCKET_READ_LARGEST),
 587                                         items.getAggregate(JdkAggregators.SOCKET_WRITE_LARGEST));
 588                 } else {
 589                         end = QuantitiesToolkit.maxPresent(items.getAggregate(JdkAggregators.FILE_READ_LARGEST),
 590                                         items.getAggregate(JdkAggregators.FILE_WRITE_LARGEST));
 591                 }
 592                 end = end == null ? UnitLookup.BYTE.quantity(1024) : end;
 593                 return QuantityRange.createWithEnd(UnitLookup.BYTE.quantity(0), end);
 594         }
 595 
 596         // FIXME: Make something that can use something other than time as x-axis?
 597         public static IXDataRenderer buildSpanRenderer(IItemCollection pathItems, IColorProvider<IItem> cp) {
 598                 ISpanSeries<IItem> dataSeries = QuantitySeries.max(pathItems, JfrAttributes.START_TIME, JfrAttributes.END_TIME);
 599                 return SpanRenderer.withBoundaries(dataSeries, cp);
 600         }
 601 
 602         public static boolean addEndTimeLines(
 603                 XYDataRenderer renderer, IItemCollection items, boolean fill, Stream<IAttribute<IQuantity>> yAttributes) {
 604                 // FIXME: JMC-4520 - Handle multiple item iterables
 605                 Iterator<IItemIterable> ii = items.iterator();
 606                 if (ii.hasNext()) {
 607                         IItemIterable itemStream = ii.next();
 608                         IType<IItem> type = itemStream.getType();
 609                         // FIXME: A better way to ensure sorting by endTime
 610                         return yAttributes.peek(a -> addEndTimeLine(renderer, itemStream.iterator(), type, a, fill))
 611                                         .mapToLong(a -> 1L).sum() > 0;
 612                 }
 613                 return false;


< prev index next >