Skip to content

Commit

Permalink
analysis: Handle TmfSymbolProviderUpdatedSignal in Flame Chart views
Browse files Browse the repository at this point in the history
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 <bernd.hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/c/tracecompass/org.eclipse.tracecompass/+/204058
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Trace Compass Bot <tracecompass-bot@eclipse.org>
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
  • Loading branch information
bhufmann committed Sep 7, 2023
1 parent bd999da commit e46ce3c
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 45 deletions.
Expand Up @@ -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;
Expand Down Expand Up @@ -615,28 +616,10 @@ private Action getConfigureSymbolsAction() {
public void run() {
SymbolProviderConfigDialog dialog = new SymbolProviderConfigDialog(getSite().getShell(), getProviderPages());
if (dialog.open() == IDialogConstants.OK_ID) {
List<TimeGraphEntry> traceEntries = getEntryList(getTrace());
if (traceEntries != null) {
for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) {
ITimeGraphDataProvider<? extends TimeGraphEntryModel> provider = traceEntry.getProvider();
if (provider instanceof FlameChartDataProvider) {
((FlameChartDataProvider) provider).resetFunctionNames(new NullProgressMonitor());
}

// reset full and zoomed events here
Iterable<TimeGraphEntry> 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.
*/
}
}
};
Expand Down Expand Up @@ -684,6 +667,31 @@ private void updateConfigureSymbolsAction() {
getConfigureSymbolsAction().setEnabled(providerPages.length > 0);
}

private void resetSymbols() {
List<TimeGraphEntry> traceEntries = getEntryList(getTrace());
if (traceEntries != null) {
for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) {
ITimeGraphDataProvider<? extends TimeGraphEntryModel> provider = traceEntry.getProvider();
if (provider instanceof FlameChartDataProvider) {
((FlameChartDataProvider) provider).resetFunctionNames(new NullProgressMonitor());
}

// reset full and zoomed events here
Iterable<TimeGraphEntry> 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) {
Expand All @@ -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();
}
}
}
Expand Up @@ -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
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -688,28 +689,10 @@ private Action getConfigureSymbolsAction() {
public void run() {
SymbolProviderConfigDialog dialog = new SymbolProviderConfigDialog(getSite().getShell(), getProviderPages());
if (dialog.open() == IDialogConstants.OK_ID) {
List<TimeGraphEntry> traceEntries = getEntryList(getTrace());
if (traceEntries != null) {
for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) {
ITimeGraphDataProvider<? extends TimeGraphEntryModel> provider = traceEntry.getProvider();
if (provider instanceof CallStackDataProvider) {
((CallStackDataProvider) provider).resetFunctionNames(new NullProgressMonitor());
}

// reset full and zoomed events here
Iterable<TimeGraphEntry> 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.
*/
}
}
};
Expand Down Expand Up @@ -757,6 +740,30 @@ private void updateConfigureSymbolsAction() {
getConfigureSymbolsAction().setEnabled(providerPages.length > 0);
}

private void resetSymbols() {
List<TimeGraphEntry> traceEntries = getEntryList(getTrace());
if (traceEntries != null) {
for (TraceEntry traceEntry : Iterables.filter(traceEntries, TraceEntry.class)) {
ITimeGraphDataProvider<? extends TimeGraphEntryModel> provider = traceEntry.getProvider();
if (provider instanceof CallStackDataProvider) {
((CallStackDataProvider) provider).resetFunctionNames(new NullProgressMonitor());
}

// reset full and zoomed events here
Iterable<TimeGraphEntry> 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) {
Expand All @@ -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();
}
}
}

0 comments on commit e46ce3c

Please sign in to comment.