From e46ce3cf9fdceb77806530d75cad8fe5ce4bef33 Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Tue, 29 Aug 2023 09:31:44 -0400 Subject: [PATCH] analysis: Handle TmfSymbolProviderUpdatedSignal in Flame Chart views This will update both the FlameChartView in profiling and the new incubating callstack package when the signal TmfSymbolProviderUpdatedSignal is broadcasted which is done when the dialog box SymbolProviderConfigDialog is closed upon being pressed OK. [Fixed] Handle TmfSymbolProviderUpdatedSignal in Flame Chart views Change-Id: I3615412dc831026166d72697b0eb97fdc62718df Signed-off-by: Bernd Hufmann Reviewed-on: https://git.eclipse.org/r/c/tracecompass/org.eclipse.tracecompass/+/204058 Tested-by: Matthew Khouzam Tested-by: Trace Compass Bot Reviewed-by: Matthew Khouzam Reviewed-by: Patrick Tasse --- .../analysis/callstack/ui/FlameChartView.java | 65 ++++++++++++------- .../META-INF/MANIFEST.MF | 2 +- .../ui/views/flamechart/FlameChartView.java | 64 +++++++++++------- 3 files changed, 86 insertions(+), 45 deletions(-) diff --git a/analysis/org.eclipse.tracecompass.analysis.callstack.ui/src/org/eclipse/tracecompass/internal/analysis/callstack/ui/FlameChartView.java b/analysis/org.eclipse.tracecompass.analysis.callstack.ui/src/org/eclipse/tracecompass/internal/analysis/callstack/ui/FlameChartView.java index f60ec84bf2..8e869860d2 100644 --- a/analysis/org.eclipse.tracecompass.analysis.callstack.ui/src/org/eclipse/tracecompass/internal/analysis/callstack/ui/FlameChartView.java +++ b/analysis/org.eclipse.tracecompass.analysis.callstack.ui/src/org/eclipse/tracecompass/internal/analysis/callstack/ui/FlameChartView.java @@ -68,6 +68,7 @@ import org.eclipse.tracecompass.tmf.ui.editors.ITmfTraceEditor; import org.eclipse.tracecompass.tmf.ui.symbols.ISymbolProviderPreferencePage; import org.eclipse.tracecompass.tmf.ui.symbols.SymbolProviderConfigDialog; +import org.eclipse.tracecompass.tmf.ui.symbols.TmfSymbolProviderUpdatedSignal; import org.eclipse.tracecompass.tmf.ui.views.TmfViewFactory; import org.eclipse.tracecompass.tmf.ui.views.timegraph.BaseDataProviderTimeGraphView; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider; @@ -615,28 +616,10 @@ private Action getConfigureSymbolsAction() { public void run() { SymbolProviderConfigDialog dialog = new SymbolProviderConfigDialog(getSite().getShell(), getProviderPages()); if (dialog.open() == IDialogConstants.OK_ID) { - List traceEntries = getEntryList(getTrace()); - if (traceEntries != null) { - for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) { - ITimeGraphDataProvider provider = traceEntry.getProvider(); - if (provider instanceof FlameChartDataProvider) { - ((FlameChartDataProvider) provider).resetFunctionNames(new NullProgressMonitor()); - } - - // reset full and zoomed events here - Iterable flatten = Utils.flatten(traceEntry); - flatten.forEach(e -> e.setSampling(null)); - - // recompute full events - long start = traceEntry.getStartTime(); - long end = traceEntry.getEndTime(); - final long resolution = Long.max(1, (end - start) / getDisplayWidth()); - zoomEntries(flatten, start, end, resolution, new NullProgressMonitor()); - } - // zoomed events will be retriggered by refreshing - refresh(); - } - synchingToTime(getTimeGraphViewer().getSelectionBegin()); + /* + * Nothing to do. SymbolProviderConfigDialog will send a + * TmfSymbolProviderUpdatedSignal to notify registered components. + */ } } }; @@ -684,6 +667,31 @@ private void updateConfigureSymbolsAction() { getConfigureSymbolsAction().setEnabled(providerPages.length > 0); } + private void resetSymbols() { + List traceEntries = getEntryList(getTrace()); + if (traceEntries != null) { + for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) { + ITimeGraphDataProvider provider = traceEntry.getProvider(); + if (provider instanceof FlameChartDataProvider) { + ((FlameChartDataProvider) provider).resetFunctionNames(new NullProgressMonitor()); + } + + // reset full and zoomed events here + Iterable flatten = Utils.flatten(traceEntry); + flatten.forEach(e -> e.setSampling(null)); + + // recompute full events + long start = traceEntry.getStartTime(); + long end = traceEntry.getEndTime(); + final long resolution = Long.max(1, (end - start) / getDisplayWidth()); + zoomEntries(flatten, start, end, resolution, new NullProgressMonitor()); + } + // zoomed events will be retriggered by refreshing + refresh(); + } + synchingToTime(getTimeGraphViewer().getSelectionBegin()); + } + @TmfSignalHandler @Override public void traceClosed(@Nullable TmfTraceClosedSignal signal) { @@ -700,4 +708,17 @@ public void traceClosed(@Nullable TmfTraceClosedSignal signal) { } super.traceClosed(signal); } + + /** + * Symbol map provider updated + * + * @param signal + * the signal + */ + @TmfSignalHandler + public void symbolMapUpdated(TmfSymbolProviderUpdatedSignal signal) { + if (signal.getSource() != this) { + resetSymbols(); + } + } } diff --git a/analysis/org.eclipse.tracecompass.analysis.profiling.ui/META-INF/MANIFEST.MF b/analysis/org.eclipse.tracecompass.analysis.profiling.ui/META-INF/MANIFEST.MF index eeca92beb1..641ff7b70a 100644 --- a/analysis/org.eclipse.tracecompass.analysis.profiling.ui/META-INF/MANIFEST.MF +++ b/analysis/org.eclipse.tracecompass.analysis.profiling.ui/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-Vendor: %Bundle-Vendor Bundle-SymbolicName: org.eclipse.tracecompass.analysis.profiling.ui;singleton:=true -Bundle-Version: 4.0.0.qualifier +Bundle-Version: 4.1.0.qualifier Bundle-Localization: plugin Bundle-Activator: org.eclipse.tracecompass.internal.analysis.profiling.ui.Activator Bundle-ActivationPolicy: lazy diff --git a/analysis/org.eclipse.tracecompass.analysis.profiling.ui/src/org/eclipse/tracecompass/analysis/profiling/ui/views/flamechart/FlameChartView.java b/analysis/org.eclipse.tracecompass.analysis.profiling.ui/src/org/eclipse/tracecompass/analysis/profiling/ui/views/flamechart/FlameChartView.java index 76e7e0037e..57b59b6115 100644 --- a/analysis/org.eclipse.tracecompass.analysis.profiling.ui/src/org/eclipse/tracecompass/analysis/profiling/ui/views/flamechart/FlameChartView.java +++ b/analysis/org.eclipse.tracecompass.analysis.profiling.ui/src/org/eclipse/tracecompass/analysis/profiling/ui/views/flamechart/FlameChartView.java @@ -73,6 +73,7 @@ import org.eclipse.tracecompass.tmf.ui.editors.ITmfTraceEditor; import org.eclipse.tracecompass.tmf.ui.symbols.ISymbolProviderPreferencePage; import org.eclipse.tracecompass.tmf.ui.symbols.SymbolProviderConfigDialog; +import org.eclipse.tracecompass.tmf.ui.symbols.TmfSymbolProviderUpdatedSignal; import org.eclipse.tracecompass.tmf.ui.views.timegraph.BaseDataProviderTimeGraphView; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphViewer; @@ -688,28 +689,10 @@ private Action getConfigureSymbolsAction() { public void run() { SymbolProviderConfigDialog dialog = new SymbolProviderConfigDialog(getSite().getShell(), getProviderPages()); if (dialog.open() == IDialogConstants.OK_ID) { - List traceEntries = getEntryList(getTrace()); - if (traceEntries != null) { - for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) { - ITimeGraphDataProvider provider = traceEntry.getProvider(); - if (provider instanceof CallStackDataProvider) { - ((CallStackDataProvider) provider).resetFunctionNames(new NullProgressMonitor()); - } - - // reset full and zoomed events here - Iterable flatten = Utils.flatten(traceEntry); - flatten.forEach(e -> e.setSampling(null)); - - // recompute full events - long start = traceEntry.getStartTime(); - long end = traceEntry.getEndTime(); - final long resolution = Long.max(1, (end - start) / getDisplayWidth()); - zoomEntries(flatten, start, end, resolution, new NullProgressMonitor()); - } - // zoomed events will be retriggered by refreshing - refresh(); - } - synchingToTime(getTimeGraphViewer().getSelectionBegin()); + /* + * Nothing to do. SymbolProviderConfigDialog will send a + * TmfSymbolProviderUpdatedSignal to notify registered components. + */ } } }; @@ -757,6 +740,30 @@ private void updateConfigureSymbolsAction() { getConfigureSymbolsAction().setEnabled(providerPages.length > 0); } + private void resetSymbols() { + List traceEntries = getEntryList(getTrace()); + if (traceEntries != null) { + for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) { + ITimeGraphDataProvider provider = traceEntry.getProvider(); + if (provider instanceof CallStackDataProvider) { + ((CallStackDataProvider) provider).resetFunctionNames(new NullProgressMonitor()); + } + + // reset full and zoomed events here + Iterable flatten = Utils.flatten(traceEntry); + flatten.forEach(e -> e.setSampling(null)); + + // recompute full events + long start = traceEntry.getStartTime(); + long end = traceEntry.getEndTime(); + final long resolution = Long.max(1, (end - start) / getDisplayWidth()); + zoomEntries(flatten, start, end, resolution, new NullProgressMonitor()); + } + // zoomed events will be retriggered by refreshing + refresh(); + } + synchingToTime(getTimeGraphViewer().getSelectionBegin()); + } @TmfSignalHandler @Override public void traceClosed(@Nullable TmfTraceClosedSignal signal) { @@ -771,4 +778,17 @@ public void traceClosed(@Nullable TmfTraceClosedSignal signal) { super.traceClosed(signal); } + /** + * Symbol map provider updated + * + * @param signal + * the signal + * @since 4.1 + */ + @TmfSignalHandler + public void symbolMapUpdated(TmfSymbolProviderUpdatedSignal signal) { + if (signal.getSource() != this) { + resetSymbols(); + } + } }