From 781ba0c515925f449cffc99ae4c5b4ca142e4b9f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Genevi=C3=A8ve=20Bastien?= Date: Wed, 21 Sep 2016 21:04:53 -0400 Subject: [PATCH] timing: Add a generic table view for any segment provider MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- .../icons/eview16/latency.png | Bin 0 -> 156 bytes .../plugin.properties | 3 +- .../plugin.xml | 8 +++ .../table/AbstractSegmentStoreTableView.java | 11 ++++ .../AbstractSegmentStoreTableViewer.java | 4 -- .../table/SegmentStoreTableView.java | 44 ++++++++++++++ .../table/SegmentStoreTableViewer.java | 54 ++++++++++++++++++ .../ui/views/segmentstore/table/Messages.java | 3 + .../segmentstore/table/messages.properties | 1 + 9 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 analysis/org.eclipse.tracecompass.analysis.timing.ui/icons/eview16/latency.png create mode 100644 analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableView.java create mode 100644 analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/table/SegmentStoreTableViewer.java 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 0000000000000000000000000000000000000000..723b8da96754a4058a11eff7496684b87cd93747 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf#56_zX0j!PC{xWt~$(696CrGUEUM literal 0 HcmV?d00001 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 -- 2.34.1