use of com.efficios.jabberwocky.views.timegraph.model.render.tree.TimeGraphTreeElement in project lttng-scope by lttng.
the class TimeGraphArrowLayer method prepareArrows.
private Collection<Arrow> prepareArrows(TimeGraphTreeRender treeRender, TimeGraphArrowRender arrowRender, Paint arrowStroke) {
final double entryHeight = TimeGraphWidget.ENTRY_HEIGHT;
Collection<Arrow> arrows = arrowRender.getArrows().stream().map(timeGraphArrow -> {
TimeGraphTreeElement startTreeElem = timeGraphArrow.getStartEvent().getTreeElement();
TimeGraphTreeElement endTreeElem = timeGraphArrow.getEndEvent().getTreeElement();
long startTimestamp = timeGraphArrow.getStartEvent().getTimestamp();
long endTimestamp = timeGraphArrow.getEndEvent().getTimestamp();
// FIXME Build and use a hashmap instead for indexes
int startIndex = treeRender.getAllTreeElements().indexOf(startTreeElem);
int endIndex = treeRender.getAllTreeElements().indexOf(endTreeElem);
if (startIndex == -1 || endIndex == -1) {
/* We shouldn't have received this... */
return null;
}
double startX = getWidget().timestampToPaneXPos(startTimestamp);
double endX = getWidget().timestampToPaneXPos(endTimestamp);
double startY = startIndex * entryHeight + entryHeight / 2;
double endY = endIndex * entryHeight + entryHeight / 2;
Arrow arrow = new Arrow(startX, startY, endX, endY);
arrow.setStroke(arrowStroke);
return arrow;
}).filter(Objects::nonNull).collect(Collectors.toList());
return arrows;
}
use of com.efficios.jabberwocky.views.timegraph.model.render.tree.TimeGraphTreeElement in project lttng-scope by lttng.
the class TimeGraphStateLayer method drawContents.
@Override
public void drawContents(TimeGraphTreeRender treeRender, TimeRange timeRange, VerticalPosition vPos, @Nullable FutureTask<?> task) {
final long resolution = Math.max(1, Math.round(getWidget().getCurrentNanosPerPixel()));
final List<TimeGraphTreeElement> allTreeElements = treeRender.getAllTreeElements();
final int nbElements = allTreeElements.size();
final int entriesToPrefetch = getWidget().getDebugOptions().entryPadding.get();
final int topEntry = Math.max(0, TimeGraphWidget.paneYPosToEntryListIndex(vPos.fTopPos, TimeGraphWidget.ENTRY_HEIGHT) - entriesToPrefetch);
final int bottomEntry = Math.min(nbElements, TimeGraphWidget.paneYPosToEntryListIndex(vPos.fBottomPos, TimeGraphWidget.ENTRY_HEIGHT) + entriesToPrefetch);
LOGGER.finest(() -> "topEntry=" + topEntry + ", bottomEntry=" + bottomEntry);
List<TimeGraphStateRender> stateRenders = allTreeElements.subList(topEntry, bottomEntry).stream().map(treeElem -> fStateProvider.getStateRender(treeElem, timeRange, resolution, task)).collect(Collectors.toList());
if (task != null && task.isCancelled()) {
return;
}
Collection<StateRectangle> stateRectangles = prepareStateRectangles(stateRenders, topEntry);
Node statesLayerContents = prepareTimeGraphStatesContents(stateRectangles);
Node labelsLayerContents = prepareTimeGrahLabelsContents(stateRectangles, fWindowRange);
/*
* Go over all state rectangles, and bring the "multi-state"
* ones to the front, to be sure they show on top of the others.
* Note we cannot do the forEach() as part of the stream, that
* would throw a ConcurrentModificationException.
*/
((Group) statesLayerContents).getChildren().stream().map(node -> (StateRectangle) node).filter(rect -> (rect.getStateInterval().isMultiState())).collect(Collectors.toList()).forEach(Node::toFront);
Platform.runLater(() -> {
getParentGroup().getChildren().clear();
getLabelGroup().getChildren().clear();
getParentGroup().getChildren().add(statesLayerContents);
getLabelGroup().getChildren().add(labelsLayerContents);
});
}
use of com.efficios.jabberwocky.views.timegraph.model.render.tree.TimeGraphTreeElement in project lttng-scope by lttng.
the class StubModelStateProvider method getStateRender.
@Override
public TimeGraphStateRender getStateRender(TimeGraphTreeElement treeElement, TimeRange timeRange, long resolution, @Nullable FutureTask<?> task) {
if (treeElement == StubModelProvider.ROOT_ELEMENT) {
return TimeGraphStateRender.EMPTY_RENDER;
}
int entryIndex = Integer.valueOf(treeElement.getName().substring(StubModelProvider.ENTRY_NAME_PREFIX.length()));
long stateLength = entryIndex * DURATION_FACTOR;
List<TimeGraphStateInterval> intervals = LongStream.iterate(timeRange.getStartTime(), i -> i + stateLength).limit((timeRange.getDuration() / stateLength) + 1).mapToObj(startTime -> {
long endTime = startTime + stateLength - 1;
StateDefinition stateDef = getNextStateDef();
return new BasicTimeGraphStateInterval(startTime, endTime, treeElement, stateDef, stateDef.getName(), Collections.emptyMap());
}).collect(Collectors.toList());
return new TimeGraphStateRender(timeRange, treeElement, intervals);
}
use of com.efficios.jabberwocky.views.timegraph.model.render.tree.TimeGraphTreeElement in project lttng-scope by lttng.
the class StubModelArrowProvider1 method getArrowRender.
@Override
public TimeGraphArrowRender getArrowRender(TimeGraphTreeRender treeRender, TimeRange timeRange, @Nullable FutureTask<?> task) {
TimeGraphArrowSeries series = getArrowSeries();
List<TimeGraphTreeElement> treeElems = treeRender.getAllTreeElements();
/* Draw 3 arrows total */
TimeGraphEvent startEvent = new TimeGraphEvent(ts(timeRange, 0.1), treeElems.get(0));
TimeGraphEvent endEvent = new TimeGraphEvent(ts(timeRange, 0.3), treeElems.get(5));
TimeGraphArrow arrow1 = new TimeGraphArrow(startEvent, endEvent, series);
startEvent = new TimeGraphEvent(ts(timeRange, 0.2), treeElems.get(3));
endEvent = new TimeGraphEvent(ts(timeRange, 0.5), treeElems.get(12));
TimeGraphArrow arrow2 = new TimeGraphArrow(startEvent, endEvent, series);
startEvent = new TimeGraphEvent(ts(timeRange, 0.6), treeElems.get(15));
endEvent = new TimeGraphEvent(ts(timeRange, 0.8), treeElems.get(2));
TimeGraphArrow arrow3 = new TimeGraphArrow(startEvent, endEvent, series);
List<TimeGraphArrow> arrows = ImmutableList.of(arrow1, arrow2, arrow3);
return new TimeGraphArrowRender(timeRange, arrows);
}
use of com.efficios.jabberwocky.views.timegraph.model.render.tree.TimeGraphTreeElement in project lttng-scope by lttng.
the class StubModelArrowProvider2 method getArrowRender.
@Override
public TimeGraphArrowRender getArrowRender(TimeGraphTreeRender treeRender, TimeRange timeRange, @Nullable FutureTask<?> task) {
TimeGraphArrowSeries series = getArrowSeries();
List<TimeGraphTreeElement> treeElems = treeRender.getAllTreeElements();
/* Draw 2 arrows total */
TimeGraphEvent startEvent = new TimeGraphEvent(ts(timeRange, 0.3), treeElems.get(6));
TimeGraphEvent endEvent = new TimeGraphEvent(ts(timeRange, 0.8), treeElems.get(4));
TimeGraphArrow arrow1 = new TimeGraphArrow(startEvent, endEvent, series);
startEvent = new TimeGraphEvent(ts(timeRange, 0.5), treeElems.get(10));
endEvent = new TimeGraphEvent(ts(timeRange, 0.6), treeElems.get(7));
TimeGraphArrow arrow2 = new TimeGraphArrow(startEvent, endEvent, series);
List<TimeGraphArrow> arrows = ImmutableList.of(arrow1, arrow2);
return new TimeGraphArrowRender(timeRange, arrows);
}
Aggregations