< prev index next >

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

Print this page




 147                 List<IXDataRenderer> lanes = new ArrayList<>(laneFilters.size());
 148                 laneFilters.stream().filter(ld -> ld.isEnabled()).forEach(lane -> {
 149                         IItemCollection laneItems = items.apply(lane.getFilter());
 150                         if (laneItems.iterator().hasNext()) {
 151                                 ISpanSeries<IItem> laneSeries = QuantitySeries.max(laneItems, JfrAttributes.START_TIME,
 152                                                 JfrAttributes.END_TIME);
 153                                 this.setTooltipTitle(MessageFormat.format(Messages.ThreadsPage_LANE_TOOLTIP_TITLE, threadName, lane.getName()));
 154                                 lanes.add(new ItemRow(SpanRenderer.withBoundaries(laneSeries, DataPageToolkit.ITEM_COLOR, this.getTooltipTitle()), laneItems));
 155                         }
 156                 });
 157                 IXDataRenderer renderer = !lanes.isEmpty() ? RendererToolkit.uniformRows(lanes)
 158                                 : new ItemRow(RendererToolkit.empty(), ItemCollectionToolkit.EMPTY);
 159                 IItemCollection itemsAndThreadLifespan = addThreadLifeSpanEvents(thread, items);
 160                 // If the lane doesn't match a filter, display the Thread name as the tooltip title
 161                 if (this.getTooltipTitle() == null) {
 162                         this.setTooltipTitle(threadName);
 163                 } else {
 164                         this.resetTooltipTitle();
 165                 }
 166                 return new QuantitySpanRenderer(threadRanges(threadName, itemsAndThreadLifespan), renderer, THREAD_BG_COLOR, 10,
 167                                 threadName, this.getTooltipTitle());
 168         }
 169 
 170         private IItemCollection addThreadLifeSpanEvents(Object thread, final IItemCollection items) {
 171                 IItemCollection threadLifeSpan = dataSourceSupplier.get().getItems()
 172                                 .apply(ItemFilters.and(ItemFilters.equals(JfrAttributes.EVENT_THREAD, (IMCThread) thread),
 173                                                 ItemFilters.type(JdkTypeIDs.JAVA_THREAD_START, JdkTypeIDs.JAVA_THREAD_END)));
 174                 IItemCollection itemsAndThreadLifespan = ItemCollectionToolkit.merge(() -> Stream.of(items, threadLifeSpan));
 175                 return itemsAndThreadLifespan;
 176         }
 177 
 178         private IQuantitySeries<?> threadRanges(String threadName, IItemCollection items) {
 179                 IItemCollection startEvents = items.apply(ItemFilters.type(JdkTypeIDs.JAVA_THREAD_START));
 180                 IItemCollection endEvents = items.apply(ItemFilters.type(JdkTypeIDs.JAVA_THREAD_END));
 181                 Iterator<IQuantity> start = ItemCollectionToolkit.values(startEvents, JfrAttributes.START_TIME).get().sorted()
 182                                 .iterator();
 183                 Iterator<IQuantity> end = ItemCollectionToolkit.values(endEvents, JfrAttributes.END_TIME).get().sorted()
 184                                 .iterator();
 185 
 186                 ArrayList<IQuantity> startList = new ArrayList<>();
 187                 ArrayList<IQuantity> endList = new ArrayList<>();




 147                 List<IXDataRenderer> lanes = new ArrayList<>(laneFilters.size());
 148                 laneFilters.stream().filter(ld -> ld.isEnabled()).forEach(lane -> {
 149                         IItemCollection laneItems = items.apply(lane.getFilter());
 150                         if (laneItems.iterator().hasNext()) {
 151                                 ISpanSeries<IItem> laneSeries = QuantitySeries.max(laneItems, JfrAttributes.START_TIME,
 152                                                 JfrAttributes.END_TIME);
 153                                 this.setTooltipTitle(MessageFormat.format(Messages.ThreadsPage_LANE_TOOLTIP_TITLE, threadName, lane.getName()));
 154                                 lanes.add(new ItemRow(SpanRenderer.withBoundaries(laneSeries, DataPageToolkit.ITEM_COLOR, this.getTooltipTitle()), laneItems));
 155                         }
 156                 });
 157                 IXDataRenderer renderer = !lanes.isEmpty() ? RendererToolkit.uniformRows(lanes)
 158                                 : new ItemRow(RendererToolkit.empty(), ItemCollectionToolkit.EMPTY);
 159                 IItemCollection itemsAndThreadLifespan = addThreadLifeSpanEvents(thread, items);
 160                 // If the lane doesn't match a filter, display the Thread name as the tooltip title
 161                 if (this.getTooltipTitle() == null) {
 162                         this.setTooltipTitle(threadName);
 163                 } else {
 164                         this.resetTooltipTitle();
 165                 }
 166                 return new QuantitySpanRenderer(threadRanges(threadName, itemsAndThreadLifespan), renderer, THREAD_BG_COLOR, 10,
 167                                 threadName, this.getTooltipTitle(), thread);
 168         }
 169 
 170         private IItemCollection addThreadLifeSpanEvents(Object thread, final IItemCollection items) {
 171                 IItemCollection threadLifeSpan = dataSourceSupplier.get().getItems()
 172                                 .apply(ItemFilters.and(ItemFilters.equals(JfrAttributes.EVENT_THREAD, (IMCThread) thread),
 173                                                 ItemFilters.type(JdkTypeIDs.JAVA_THREAD_START, JdkTypeIDs.JAVA_THREAD_END)));
 174                 IItemCollection itemsAndThreadLifespan = ItemCollectionToolkit.merge(() -> Stream.of(items, threadLifeSpan));
 175                 return itemsAndThreadLifespan;
 176         }
 177 
 178         private IQuantitySeries<?> threadRanges(String threadName, IItemCollection items) {
 179                 IItemCollection startEvents = items.apply(ItemFilters.type(JdkTypeIDs.JAVA_THREAD_START));
 180                 IItemCollection endEvents = items.apply(ItemFilters.type(JdkTypeIDs.JAVA_THREAD_END));
 181                 Iterator<IQuantity> start = ItemCollectionToolkit.values(startEvents, JfrAttributes.START_TIME).get().sorted()
 182                                 .iterator();
 183                 Iterator<IQuantity> end = ItemCollectionToolkit.values(endEvents, JfrAttributes.END_TIME).get().sorted()
 184                                 .iterator();
 185 
 186                 ArrayList<IQuantity> startList = new ArrayList<>();
 187                 ArrayList<IQuantity> endList = new ArrayList<>();


< prev index next >