From: Geneviève Bastien Date: Thu, 22 Sep 2016 01:04:53 +0000 (-0400) Subject: timing: Add a generic table view for any segment provider X-Git-Url: http://git.efficios.com/?p=deliverable%2Ftracecompass.git;a=commitdiff_plain;h=781ba0c515925f449cffc99ae4c5b4ca142e4b9f timing: Add a generic table view for any segment provider It uses the analysis ID as the secondary ID of the view, it is thus not necessary anymore to implement a concrete view for each segment store analysis. Change-Id: I9a596ac8217a1ba9233a345ec917d1488f170737 Signed-off-by: Geneviève Bastien Reviewed-on: https://git.eclipse.org/r/78803 Reviewed-by: Hudson CI Reviewed-by: Matthew Khouzam Tested-by: Matthew Khouzam --- diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/icons/eview16/latency.png b/analysis/org.eclipse.tracecompass.analysis.timing.ui/icons/eview16/latency.png new file mode 100644 index 0000000000..723b8da967 Binary files /dev/null and b/analysis/org.eclipse.tracecompass.analysis.timing.ui/icons/eview16/latency.png differ diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.properties b/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.properties index 149a20ff5a..f7eaa3bfff 100644 --- a/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.properties +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.properties @@ -14,5 +14,6 @@ view.criticalpath = Critical Flow View view.execgraph = Execution Graph View view.callgraphDensity= Function Durations Distribution view.flameGraph= Flame Graph +view.segstore.table = Segment Store Table -callgraph.analysis = Call Graph Analysis \ No newline at end of file +callgraph.analysis = Call Graph Analysis diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.xml b/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.xml index 613ab07459..5b9c9c8385 100644 --- a/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.xml +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/plugin.xml @@ -48,5 +48,13 @@ name="%view.flameGraph" restorable="true"> + + diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableView.java b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableView.java index 8b6fd47875..9e2ba8f5c0 100644 --- a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableView.java +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableView.java @@ -29,6 +29,9 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.ExportToTsvAction; +import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; +import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager; import org.eclipse.tracecompass.tmf.ui.views.TmfView; import com.google.common.annotations.VisibleForTesting; @@ -78,10 +81,18 @@ public abstract class AbstractSegmentStoreTableView extends TmfView { @Override public void createPartControl(@Nullable Composite parent) { + super.createPartControl(parent); SashForm sf = new SashForm(parent, SWT.NONE); TableViewer tableViewer = new TableViewer(sf, SWT.FULL_SELECTION | SWT.VIRTUAL); fSegmentStoreViewer = createSegmentStoreViewer(tableViewer); getViewSite().getActionBars().getMenuManager().add(fExportAction); + ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace(); + if (trace != null) { + TmfTraceSelectedSignal signal = new TmfTraceSelectedSignal(this, trace); + if (fSegmentStoreViewer != null) { + fSegmentStoreViewer.traceSelected(signal); + } + } setInitialData(); } diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableViewer.java b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableViewer.java index b9994191e9..a3484bbcde 100644 --- a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableViewer.java +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/AbstractSegmentStoreTableViewer.java @@ -144,10 +144,6 @@ public abstract class AbstractSegmentStoreTableViewer extends TmfSimpleTableView super(tableViewer); // Sort order of the content provider is by start time by default getTableViewer().setContentProvider(new SegmentStoreContentProvider()); - ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace(); - if (trace != null) { - fSegmentProvider = getSegmentStoreProvider(trace); - } createColumns(); getTableViewer().getTable().addSelectionListener(new TableSelectionListener()); addPackListener(); diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableView.java b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableView.java new file mode 100644 index 0000000000..2c248c69a3 --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableView.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2016 École Polytechnique de Montréal + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +package org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.table; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.tracecompass.common.core.NonNullUtils; +import org.eclipse.ui.PlatformUI; + +/** + * View for displaying a segment store analysis in a table. + * + * @author Geneviève Bastien + * @since 1.2 + */ +public class SegmentStoreTableView extends AbstractSegmentStoreTableView { + + /** + * ID of this view + */ + public static final String ID = "org.eclipse.tracecompass.analysis.timing.ui.segstore.table"; //$NON-NLS-1$ + + @Override + public void createPartControl(@Nullable Composite parent) { + super.createPartControl(parent); + setPartName(PlatformUI.getWorkbench().getViewRegistry().find(getViewId()).getLabel()); + } + + @Override + protected @NonNull AbstractSegmentStoreTableViewer createSegmentStoreViewer(@NonNull TableViewer tableViewer) { + // Set the title of this view + String analysisId = NonNullUtils.nullToEmptyString(getViewSite().getSecondaryId()); + return new SegmentStoreTableViewer(tableViewer, analysisId); + } +} diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableViewer.java b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableViewer.java new file mode 100644 index 0000000000..fd8e093f6b --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableViewer.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2016 École Polytechnique de Montréal + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +package org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.table; + +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.tracecompass.analysis.timing.core.segmentstore.ISegmentStoreProvider; +import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; +import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; + +/** + * Displays the segment store provider data in a column table + * + * @author Geneviève Bastien + * @since 1.2 + */ +public class SegmentStoreTableViewer extends AbstractSegmentStoreTableViewer { + + private final String fAnalysisId; + + // ------------------------------------------------------------------------ + // Constructor + // ------------------------------------------------------------------------ + + /** + * Constructor + * + * @param tableViewer + * Table viewer of the view + * @param analysisId + * The ID of the analysis this viewer is for + */ + public SegmentStoreTableViewer(TableViewer tableViewer, String analysisId) { + super(tableViewer); + fAnalysisId = analysisId; + } + + @Override + protected @Nullable ISegmentStoreProvider getSegmentStoreProvider(ITmfTrace trace) { + IAnalysisModule module = trace.getAnalysisModule(fAnalysisId); + if (!(module instanceof ISegmentStoreProvider)) { + return null; + } + return (ISegmentStoreProvider) module; + } + +} diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/Messages.java b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/Messages.java index d986224cf8..c7e8d8a827 100644 --- a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/Messages.java +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/Messages.java @@ -47,6 +47,9 @@ public class Messages extends NLS { */ public static String SegmentStoreTableViewer_goToEndEvent; + /** Title of the table, to be appended to the analysis name for the title of the view */ + public static String SegmentStoreTableViewer_genericTitle; + static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); diff --git a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/messages.properties b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/messages.properties index 264722173f..ae8a2fb4e1 100644 --- a/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/messages.properties +++ b/analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/internal/analysis/timing/ui/views/segmentstore/table/messages.properties @@ -11,4 +11,5 @@ SegmentStoreTableViewer_endTime=End Time SegmentStoreTableViewer_startTime=Start Time SegmentStoreTableViewer_goToStartEvent=Go to start time SegmentStoreTableViewer_goToEndEvent=Go to end time +SegmentStoreTableViewer_genericTitle=Table