When changing the active marker set, it didn't update the marker sources
when the opened trace is an experiment. The action only updated the
marker sources from the opened traces, but the marker sets were created
on each trace in the experiment's trace set, for the default
implementation of AbstractTimeGraphView.getTracesToBuild().
It wouldn't be good enough to update the traces using
TmfTraceManager.getTraceSet(), since we don't know the implementation of
getTracesToBuild() for each view. Also, calling
TmfTraceAdapterManager.getAdapters() on each opened trace could actually
create new adapter instances that weren't yet needed.
Instead the ConfigurableMarkerEventSource instances should handle the
TmfMarkerEventSourceUpdatedSignal, and reconfigure themselves.
Also, since the Marker Set menu items are radio, selecting a new marker
set first executes the action on the menu item that is being unchecked.
The action now only executes for the menu item that is being checked.
Change-Id: Ic8fd21b930ec29e8a619cbcedea712d4b7ee4d86
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/93463
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.SplitMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.WeightedMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.SplitMarker;
import org.eclipse.tracecompass.internal.tmf.core.markers.SubMarker.WeightedMarker;
+import org.eclipse.tracecompass.tmf.core.signal.TmfMarkerEventSourceUpdatedSignal;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
+import org.eclipse.tracecompass.tmf.core.trace.AbstractTmfTraceAdapterFactory.IDisposableAdapter;
import org.eclipse.tracecompass.tmf.core.trace.ICyclesConverter;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.colors.X11Color;
import org.eclipse.tracecompass.tmf.core.trace.ICyclesConverter;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.colors.X11Color;
/**
* Configurable marker event source.
*/
/**
* Configurable marker event source.
*/
-public class ConfigurableMarkerEventSource implements IMarkerEventSource {
+public class ConfigurableMarkerEventSource implements IMarkerEventSource, IDisposableAdapter {
private static final long NANO_PER_MILLI = 1000000L;
private static final long NANO_PER_MICRO = 1000L;
private static final long NANO_PER_MILLI = 1000000L;
private static final long NANO_PER_MICRO = 1000L;
public ConfigurableMarkerEventSource(ITmfTrace trace) {
fMarkerEventSources = new ArrayList<>();
fTrace = trace;
public ConfigurableMarkerEventSource(ITmfTrace trace) {
fMarkerEventSources = new ArrayList<>();
fTrace = trace;
+ TmfSignalManager.register(this);
+ }
+
+ @Override
+ public void dispose() {
+ TmfSignalManager.deregister(this);
return fMarker.getSubMarkers();
}
}
return fMarker.getSubMarkers();
}
}
+
+ /**
+ * A marker event source has been updated
+ *
+ * @param signal
+ * the signal
+ */
+ @TmfSignalHandler
+ public void markerEventSourceUpdated(final TmfMarkerEventSourceUpdatedSignal signal) {
+ configure(MarkerUtils.getDefaultMarkerSet());
+ }
package org.eclipse.tracecompass.internal.tmf.ui.markers;
package org.eclipse.tracecompass.internal.tmf.ui.markers;
-import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
-import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.tmf.core.trace.AbstractTmfTraceAdapterFactory;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEventSource;
import org.eclipse.tracecompass.tmf.core.trace.AbstractTmfTraceAdapterFactory;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEventSource;
protected <T> T getTraceAdapter(ITmfTrace trace, Class<T> adapterType) {
if (IMarkerEventSource.class.equals(adapterType)) {
ConfigurableMarkerEventSource adapter = new ConfigurableMarkerEventSource(trace);
protected <T> T getTraceAdapter(ITmfTrace trace, Class<T> adapterType) {
if (IMarkerEventSource.class.equals(adapterType)) {
ConfigurableMarkerEventSource adapter = new ConfigurableMarkerEventSource(trace);
+ adapter.configure(MarkerUtils.getDefaultMarkerSet());
return adapterType.cast(adapter);
}
return null;
return adapterType.cast(adapter);
}
return null;
IMarkerEventSource.class
};
}
IMarkerEventSource.class
};
}
-
- private static void configure(ConfigurableMarkerEventSource source) {
- String defaultMarkerSetId = MarkerUtils.getDefaultMarkerSetId();
- for (MarkerSet markerSet : MarkerConfigXmlParser.getMarkerSets()) {
- if (markerSet.getId().equals(defaultMarkerSetId)) {
- source.configure(markerSet);
- }
- }
- }
package org.eclipse.tracecompass.internal.tmf.ui.markers;
package org.eclipse.tracecompass.internal.tmf.ui.markers;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
+import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
/**
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
/**
private static final String MARKER_SET_KEY = "marker.set"; //$NON-NLS-1$
private static final String MARKER_SET_KEY = "marker.set"; //$NON-NLS-1$
+ private static MarkerSet fDefaultMarkerSet = null;
+
- * Get the default marker set id
+ * Get the default marker set
- * @return the default marker set id, or null if none is set
+ * @return the default marker set, or null if none is set
- public static String getDefaultMarkerSetId() {
- return getDialogSettings().get(MARKER_SET_KEY);
+ public static synchronized @Nullable MarkerSet getDefaultMarkerSet() {
+ String id = getDialogSettings().get(MARKER_SET_KEY);
+ if (id == null) {
+ fDefaultMarkerSet = null;
+ } else {
+ if (fDefaultMarkerSet == null || !fDefaultMarkerSet.getId().equals(id)) {
+ for (MarkerSet markerSet : MarkerConfigXmlParser.getMarkerSets()) {
+ if (markerSet.getId().equals(id)) {
+ fDefaultMarkerSet = markerSet;
+ }
+ }
+ }
+ }
+ return fDefaultMarkerSet;
- * Set the default marker set id
+ * Set the default marker set
- * @param id
- * the default marker set id, or null to set none
+ * @param markerSet
+ * the default marker set, or null to set none
- public static void setDefaultMarkerSetId(String id) {
+ public static synchronized void setDefaultMarkerSet(@Nullable MarkerSet markerSet) {
+ fDefaultMarkerSet = markerSet;
+ String id = (markerSet == null) ? null : markerSet.getId();
getDialogSettings().put(MARKER_SET_KEY, id);
}
getDialogSettings().put(MARKER_SET_KEY, id);
}
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerConfigXmlParser;
import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
-import org.eclipse.tracecompass.internal.tmf.ui.markers.ConfigurableMarkerEventSource;
import org.eclipse.tracecompass.internal.tmf.ui.markers.MarkerUtils;
import org.eclipse.tracecompass.tmf.core.resources.ITmfMarker;
import org.eclipse.tracecompass.tmf.core.signal.TmfMarkerEventSourceUpdatedSignal;
import org.eclipse.tracecompass.internal.tmf.ui.markers.MarkerUtils;
import org.eclipse.tracecompass.tmf.core.resources.ITmfMarker;
import org.eclipse.tracecompass.tmf.core.signal.TmfMarkerEventSourceUpdatedSignal;
@Override
public void runWithEvent(Event event) {
@Override
public void runWithEvent(Event event) {
- MarkerUtils.setDefaultMarkerSetId(fMarkerSet == null ? null : fMarkerSet.getId());
- for (ITmfTrace trace : TmfTraceManager.getInstance().getOpenedTraces()) {
- for (IMarkerEventSource source : TmfTraceAdapterManager.getAdapters(trace, IMarkerEventSource.class)) {
- if (source instanceof ConfigurableMarkerEventSource) {
- ((ConfigurableMarkerEventSource) source).configure(fMarkerSet);
- }
- }
+ if (isChecked()) {
+ MarkerUtils.setDefaultMarkerSet(fMarkerSet);
+ broadcast(new TmfMarkerEventSourceUpdatedSignal(AbstractTimeGraphView.this));
- broadcast(new TmfMarkerEventSourceUpdatedSignal(AbstractTimeGraphView.this));
fMarkerSetMenu.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(IMenuManager mgr) {
fMarkerSetMenu.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(IMenuManager mgr) {
- Action action = new MarkerSetAction(null);
- String defaultMarkerSetId = MarkerUtils.getDefaultMarkerSetId();
- action.setChecked(defaultMarkerSetId == null || defaultMarkerSetId.isEmpty());
- mgr.add(action);
+ Action noneAction = new MarkerSetAction(null);
+ MarkerSet defaultMarkerSet = MarkerUtils.getDefaultMarkerSet();
+ String defaultMarkerSetId = (defaultMarkerSet == null) ? null : defaultMarkerSet.getId();
+ noneAction.setChecked(defaultMarkerSetId == null);
+ mgr.add(noneAction);
List<MarkerSet> markerSets = MarkerConfigXmlParser.getMarkerSets();
for (MarkerSet markerSet : markerSets) {
List<MarkerSet> markerSets = MarkerConfigXmlParser.getMarkerSets();
for (MarkerSet markerSet : markerSets) {
- action = new MarkerSetAction(markerSet);
+ Action action = new MarkerSetAction(markerSet);
action.setChecked(markerSet.getId().equals(defaultMarkerSetId));
mgr.add(action);
}
action.setChecked(markerSet.getId().equals(defaultMarkerSetId));
mgr.add(action);
}