use of com.efficios.jabberwocky.common.TimeRange in project lttng-scope by lttng.
the class TimeGraphWidget method redrawSelection.
private void redrawSelection() {
TimeRange selectionRange = getViewContext().getSelectionTimeRange();
drawSelection(selectionRange);
}
use of com.efficios.jabberwocky.common.TimeRange in project lttng-scope by lttng.
the class TimeGraphStateLayer method prepareTimeGrahLabelsContents.
private Node prepareTimeGrahLabelsContents(Collection<StateRectangle> stateRectangles, TimeRange windowRange) {
double minX = getWidget().timestampToPaneXPos(windowRange.getStartTime());
final String ellipsisStr = DebugOptions.ELLIPSIS_STRING;
final double ellipsisWidth = getWidget().getDebugOptions().getEllipsisWidth();
final Font textFont = getWidget().getDebugOptions().stateLabelFont.get();
final OverrunStyle overrunStyle = OverrunStyle.ELLIPSIS;
final Color textColor = Color.WHITE;
/* Requires a ~2 pixels adjustment to be centered on the states */
final double yOffset = TimeGraphWidget.ENTRY_HEIGHT / 2.0 + 2.0;
Collection<Node> texts = stateRectangles.stream().filter(stateRect -> stateRect.getWidth() > ellipsisWidth).filter(stateRect -> stateRect.getStateInterval().getLabel() != null).map(stateRect -> {
String labelText = requireNonNull(stateRect.getStateInterval().getLabel());
/* A small offset looks better here */
double textX = Math.max(minX, stateRect.getX()) + 4.0;
double textY = stateRect.getY() + yOffset;
double rectEndX = stateRect.getX() + stateRect.getWidth();
double minWidth = rectEndX - textX;
String ellipsedText = JfxTextUtils.computeClippedText(textFont, labelText, minWidth, overrunStyle, ellipsisStr);
if (ellipsedText.equals(ellipsisStr)) {
return null;
}
Text text = new Text(textX, textY, ellipsedText);
text.setFont(textFont);
text.setFill(textColor);
return text;
}).filter(Objects::nonNull).collect(Collectors.toList());
return new Group(texts);
}
use of com.efficios.jabberwocky.common.TimeRange 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.common.TimeRange 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.common.TimeRange in project lttng-scope by lttng.
the class TimeGraphWidgetInitTest method testInitialPosition.
/**
* Test that the initial visible position of both the control and the view
* are as expected by the trace's configuration.
*/
@Test
public void testInitialPosition() {
repaint();
TimeGraphWidget viewer = getWidget();
final long expectedStart = StubTrace.FULL_TRACE_START_TIME;
final long expectedEnd = StubTrace.FULL_TRACE_END_TIME;
/* Check the control */
TimeRange visibleRange = viewer.getControl().getViewContext().getVisibleTimeRange();
assertEquals(expectedStart, visibleRange.getStartTime());
assertEquals(expectedEnd, visibleRange.getEndTime());
/* Check the view itself */
TimeRange timeRange = viewer.getTimeGraphEdgeTimestamps(null);
assertEquals(expectedStart, timeRange.getStartTime());
/*
* The timegraph may not show the whole range if the window is small.
* In any case, its end time should never be greater than the trace's end time.
*/
assertThat(timeRange.getEndTime(), lessThanOrEqualTo(expectedEnd));
}
Aggregations