use of org.eclipse.tracecompass.internal.provisional.analysis.lami.core.aspect.LamiTableEntryAspect in project tracecompass by tracecompass.
the class LamiAspectTest method lamiTimeRangeDurationAspectTest.
/**
* Test the time range duration aspect
*
* @throws JSONException
* won't happen
*/
@Test
public void lamiTimeRangeDurationAspectTest() throws JSONException {
LamiTableEntryAspect aspect = new LamiTimeRangeDurationAspect(ASPECT_NAME, 5);
LamiTableEntry entry1 = createLamiData(1);
LamiTableEntry entry2 = createLamiData(2);
assertEquals(ASPECT_NAME + " (duration) (ns)", aspect.getLabel());
assertEquals(ASPECT_NAME + " (duration)", aspect.getName());
assertEquals(-1, aspect.getComparator().compare(entry1, entry2));
String timeRangeString = aspect.resolveString(entry1);
assertNotNull(timeRangeString);
assertEquals("11", timeRangeString);
assertEquals(11L, aspect.resolveNumber(entry1));
}
use of org.eclipse.tracecompass.internal.provisional.analysis.lami.core.aspect.LamiTableEntryAspect in project tracecompass by tracecompass.
the class LamiAspectTest method lamiMixedAspectTest.
/**
* Test the mixed aspect
*
* @throws JSONException
* won't happen
*/
@Test
public void lamiMixedAspectTest() throws JSONException {
LamiTableEntryAspect aspect = new LamiMixedAspect(ASPECT_NAME, 0);
LamiTableEntry entry1 = createLamiData(1);
LamiTableEntry entry2 = createLamiData(2);
assertEquals(ASPECT_NAME, aspect.getLabel());
assertEquals(ASPECT_NAME, aspect.getName());
assertEquals(0, aspect.getComparator().compare(entry1, entry2));
assertNull(aspect.resolveString(entry1));
assertNull(aspect.resolveNumber(entry1));
}
use of org.eclipse.tracecompass.internal.provisional.analysis.lami.core.aspect.LamiTableEntryAspect in project tracecompass by tracecompass.
the class LamiAspectTest method testAspectEquality.
/**
* Test the equivalence of aspects, for aggregating in views.
*/
@Test
public void testAspectEquality() {
LamiTableEntryAspect aspect1 = new LamiTimestampAspect(ASPECT_NAME, 0);
LamiTableEntryAspect aspect2 = new LamiTimeRangeEndAspect(ASPECT_NAME, 5);
LamiTableEntryAspect aspect3 = new LamiProcessTIDAspect(ASPECT_NAME, 0);
assertTrue(aspect1.arePropertiesEqual(aspect1));
assertTrue(aspect1.arePropertiesEqual(aspect2));
assertFalse(aspect1.arePropertiesEqual(aspect3));
assertTrue(aspect2.arePropertiesEqual(aspect1));
assertTrue(aspect2.arePropertiesEqual(aspect2));
assertFalse(aspect2.arePropertiesEqual(aspect3));
assertFalse(aspect3.arePropertiesEqual(aspect1));
assertFalse(aspect3.arePropertiesEqual(aspect2));
assertTrue(aspect3.arePropertiesEqual(aspect3));
}
use of org.eclipse.tracecompass.internal.provisional.analysis.lami.core.aspect.LamiTableEntryAspect in project tracecompass by tracecompass.
the class LamiAnalysis method getAspectsFromColumnDescriptions.
private static List<LamiTableEntryAspect> getAspectsFromColumnDescriptions(JSONArray columnDescriptions) throws JSONException {
ImmutableList.Builder<LamiTableEntryAspect> aspectsBuilder = new ImmutableList.Builder<>();
for (int j = 0; j < columnDescriptions.length(); j++) {
JSONObject column = columnDescriptions.getJSONObject(j);
DataType columnDataType;
String columnClass = column.optString(LamiStrings.CLASS, null);
if (columnClass == null) {
columnDataType = DataType.MIXED;
} else {
columnDataType = getDataTypeFromString(columnClass);
}
String columnTitle = column.optString(LamiStrings.TITLE, null);
if (columnTitle == null) {
// $NON-NLS-1$
columnTitle = String.format("%s #%d", columnDataType.getTitle(), j + 1);
}
final int colIndex = j;
switch(columnDataType) {
case TIME_RANGE:
/*
* We will add 3 aspects, to represent the start, end and
* duration of this time range.
*/
aspectsBuilder.add(new LamiTimeRangeBeginAspect(columnTitle, colIndex));
aspectsBuilder.add(new LamiTimeRangeEndAspect(columnTitle, colIndex));
aspectsBuilder.add(new LamiTimeRangeDurationAspect(columnTitle, colIndex));
break;
case TIMESTAMP:
aspectsBuilder.add(new LamiTimestampAspect(columnTitle, colIndex));
break;
case PROCESS:
aspectsBuilder.add(new LamiProcessNameAspect(columnTitle, colIndex));
aspectsBuilder.add(new LamiProcessPIDAspect(columnTitle, colIndex));
aspectsBuilder.add(new LamiProcessTIDAspect(columnTitle, colIndex));
break;
case IRQ:
aspectsBuilder.add(new LamiIRQTypeAspect(columnTitle, colIndex));
aspectsBuilder.add(new LamiIRQNameAspect(columnTitle, colIndex));
aspectsBuilder.add(new LamiIRQNumberAspect(columnTitle, colIndex));
break;
case DURATION:
aspectsBuilder.add(new LamiDurationAspect(columnTitle, colIndex));
break;
case MIXED:
aspectsBuilder.add(new LamiMixedAspect(columnTitle, colIndex));
break;
// $CASES-OMITTED$
default:
String units = column.optString(LamiStrings.UNIT, null);
if (units == null) {
units = columnDataType.getUnits();
}
/* We will add only one aspect representing the element */
LamiTableEntryAspect aspect = new LamiGenericAspect(columnTitle, units, colIndex, columnDataType.isContinuous(), false);
aspectsBuilder.add(aspect);
break;
}
}
/*
* SWT quirk : we need an empty column at the end or else the last data
* column will clamp to the right edge of the view if it is
* right-aligned.
*/
aspectsBuilder.add(LamiEmptyAspect.INSTANCE);
return aspectsBuilder.build();
}
use of org.eclipse.tracecompass.internal.provisional.analysis.lami.core.aspect.LamiTableEntryAspect in project tracecompass by tracecompass.
the class LamiTableViewer method fillData.
/**
* Update the data in the table viewer
*
* @param dataInput
* New data input
*/
private void fillData() {
final TableViewer tableViewer = getTableViewer();
Display.getDefault().asyncExec(() -> {
if (tableViewer.getTable().isDisposed()) {
return;
}
// Go to the top of the table
tableViewer.getTable().setTopIndex(0);
// Reset selected row
tableViewer.setSelection(StructuredSelection.EMPTY);
/* Fill the table data */
tableViewer.setInput(fPage.getResultTable().getEntries());
LamiTableContentProvider latencyContentProvider = (LamiTableContentProvider) getTableViewer().getContentProvider();
tableViewer.setItemCount(latencyContentProvider.getNbEntries());
/* Set the column's alignment and pack them */
TableColumn[] cols = tableViewer.getTable().getColumns();
for (int i = 0; i < cols.length; i++) {
LamiTableEntryAspect colAspect = fPage.getResultTable().getTableClass().getAspects().get(i);
int alignment = (colAspect.isContinuous() ? SWT.RIGHT : SWT.LEFT);
cols[i].setAlignment(alignment);
}
/*
* On creation check if there is selections if so update the table
* selections here. Selections needs the ContentProvider for valid
* index lookup and since the content provider is set in an
* asynchronous task we cannot use the normal signal handler since
* we have no guarantee of time of execution of the fill data.
*/
if (!fSelection.isEmpty()) {
LamiTableContentProvider provider = (LamiTableContentProvider) getTableViewer().getContentProvider();
/* Find the indexes in the UI table of the selected objects */
int[] selectionsIndexes = fSelection.stream().map(obj -> (LamiTableEntry) obj).mapToInt(entry -> provider.getIndexOf(checkNotNull(entry))).toArray();
/* Update the selection in the UI table */
Display.getDefault().asyncExec(() -> {
getTableViewer().getTable().setSelection(selectionsIndexes);
getTableViewer().getTable().redraw();
});
}
});
Display.getDefault().asyncExec(() -> {
if (tableViewer.getTable().isDisposed()) {
return;
}
TableColumn[] cols = tableViewer.getTable().getColumns();
for (int i = 0; i < cols.length; i++) {
cols[i].pack();
}
});
}
Aggregations