import java.text.Format;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jface.action.Action;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.AbstractSegmentStatisticsAnalysis;
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.SegmentStoreStatistics;
import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.SubSecondTimeWithUnitFormat;
import org.eclipse.tracecompass.internal.analysis.timing.ui.Activator;
+import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.statistics.Messages;
import org.eclipse.tracecompass.tmf.core.analysis.TmfAbstractAnalysisModule;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.viewers.tree.AbstractTmfTreeViewer;
import org.eclipse.tracecompass.tmf.ui.viewers.tree.ITmfTreeColumnDataProvider;
+import org.eclipse.tracecompass.tmf.ui.viewers.tree.ITmfTreeViewerEntry;
import org.eclipse.tracecompass.tmf.ui.viewers.tree.TmfTreeColumnData;
import org.eclipse.tracecompass.tmf.ui.viewers.tree.TmfTreeViewerEntry;
checkNotNull(Messages.SegmentStoreStatistics_MaxLabel),
checkNotNull(Messages.SegmentStoreStatistics_AverageLabel),
checkNotNull(Messages.SegmentStoreStatisticsViewer_StandardDeviation),
- checkNotNull(Messages.SegmentStoreStatisticsViewer_Count)
+ checkNotNull(Messages.SegmentStoreStatisticsViewer_Count),
+ checkNotNull(Messages.SegmentStoreStatisticsViewer_Total)
};
/**
value = String.valueOf(toFormattedString(entry.getEntry().getStdDev()));
} else if (columnIndex == 5) {
value = String.valueOf(entry.getEntry().getNbSegments());
+ } else if (columnIndex == 6) {
+ value = String.valueOf(toFormattedString(entry.getEntry().getTotal()));
}
}
}
}
});
columns.add(column);
+ column = new TmfTreeColumnData(COLUMN_NAMES[6]);
+ column.setAlignment(SWT.RIGHT);
+ column.setComparator(new ViewerComparator() {
+ @Override
+ public int compare(@Nullable Viewer viewer, @Nullable Object e1, @Nullable Object e2) {
+ if ((e1 == null) || (e2 == null)) {
+ return 0;
+ }
+
+ SegmentStoreStatisticsEntry n1 = (SegmentStoreStatisticsEntry) e1;
+ SegmentStoreStatisticsEntry n2 = (SegmentStoreStatisticsEntry) e2;
+
+ return Double.compare(n1.getEntry().getTotal(), n2.getEntry().getTotal());
+
+ }
+ });
+ columns.add(column);
column = new TmfTreeColumnData(""); //$NON-NLS-1$
columns.add(column);
return columns;
/**
* Method to add commands to the context sensitive menu.
+ *
* @param manager
- * the menu manager
+ * the menu manager
* @param sel
- * the current selection
+ * the current selection
*/
protected void appendToTablePopupMenu(IMenuManager manager, IStructuredSelection sel) {
- Object element = sel.getFirstElement();
+ Object element = sel.getFirstElement();
if ((element instanceof SegmentStoreStatisticsEntry) && !(element instanceof HiddenTreeViewerEntry)) {
final SegmentStoreStatisticsEntry segment = (SegmentStoreStatisticsEntry) element;
IAction gotoStartTime = new Action(Messages.SegmentStoreStatisticsViewer_GotoMinAction) {
}
+ @Override
+ protected @Nullable ITmfTreeViewerEntry updateElements(long start, long end, boolean isSelection) {
+ if (isSelection || (start == end)) {
+ return null;
+ }
+
+ TmfAbstractAnalysisModule analysisModule = getStatisticsAnalysisModule();
+
+ if (getTrace() == null || !(analysisModule instanceof AbstractSegmentStatisticsAnalysis)) {
+ return null;
+ }
+
+ AbstractSegmentStatisticsAnalysis module = (AbstractSegmentStatisticsAnalysis) analysisModule;
+
+ module.waitForCompletion();
+
+ TmfTreeViewerEntry root = new TmfTreeViewerEntry(""); //$NON-NLS-1$
+ final SegmentStoreStatistics entry = module.getTotalStats();
+ if (entry != null) {
+
+ List<ITmfTreeViewerEntry> entryList = root.getChildren();
+
+ TmfTreeViewerEntry aggregateEntry = new SegmentStoreStatisticsEntry(getTotalLabel(), entry);
+ entryList.add(aggregateEntry);
+ HiddenTreeViewerEntry category = new HiddenTreeViewerEntry(getTypeLabel());
+ aggregateEntry.addChild(category);
+
+ Map<String, SegmentStoreStatistics> perSegmentStats = module.getPerSegmentTypeStats();
+ if (perSegmentStats != null) {
+ for (Entry<String, SegmentStoreStatistics> statsEntry : perSegmentStats.entrySet()) {
+ category.addChild(new SegmentStoreStatisticsEntry(statsEntry.getKey(), statsEntry.getValue()));
+ }
+ }
+ }
+ return root;
+ }
+
+ /**
+ * Get the type label
+ *
+ * @return the label
+ * @since 1.2
+ */
+ protected String getTypeLabel() {
+ return checkNotNull(Messages.AbstractSegmentStoreStatisticsViewer_types);
+ }
+
+ /**
+ * Get the total column label
+ *
+ * @return the totals column label
+ * @since 1.2
+ */
+ protected String getTotalLabel() {
+ return checkNotNull(Messages.AbstractSegmentStoreStatisticsViewer_total);
+ }
+
/**
* Class to define a level in the tree that doesn't have any values.
*/