tmf: Remove ConfigurableMarkerEventSource It is no longer used by the framework as it has been replaced by the CustomDefinedOutputAnnotationProvider trace adapter in tmf.core. [Removed] ConfigurableMarkerEventSource Change-Id: I175c798885c706610d98efdc6c18a94454b39368 Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com> Reviewed-on: https://git.eclipse.org/r/c/tracecompass/org.eclipse.tracecompass/+/182458 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>
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/markers/ConfigurableMarkerEventSourceTest.java b/tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/markers/ConfigurableMarkerEventSourceTest.java deleted file mode 100644 index d697aa1..0000000 --- a/tmf/org.eclipse.tracecompass.tmf.ui.tests/src/org/eclipse/tracecompass/tmf/ui/tests/markers/ConfigurableMarkerEventSourceTest.java +++ /dev/null
@@ -1,379 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017, 2021 Ericsson - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License 2.0 which - * accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Tasse - Initial API and implementation - *******************************************************************************/ - -package org.eclipse.tracecompass.tmf.ui.tests.markers; - -import static org.junit.Assert.assertEquals; - -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.swt.graphics.RGBA; -import org.eclipse.tracecompass.internal.tmf.core.markers.Marker; -import org.eclipse.tracecompass.internal.tmf.core.markers.Marker.PeriodicMarker; -import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSegment; -import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet; -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.ui.markers.ConfigurableMarkerEventSource; -import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace; -import org.eclipse.tracecompass.tmf.core.trace.AbstractTmfTraceAdapterFactory; -import org.eclipse.tracecompass.tmf.core.trace.ICyclesConverter; -import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; -import org.eclipse.tracecompass.tmf.core.trace.TmfTraceAdapterManager; -import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub; -import org.eclipse.tracecompass.tmf.ui.markers.IMarkerReferenceProvider; -import org.eclipse.tracecompass.tmf.ui.markers.PeriodicMarkerEventSource.Reference; -import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEvent; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.google.common.collect.ImmutableRangeSet; -import com.google.common.collect.Range; - -/** - * Tests for class FlexMarkerEventSource - */ -public class ConfigurableMarkerEventSourceTest { - - private static final class TmfTraceStubAdapterFactory extends AbstractTmfTraceAdapterFactory { - @Override - protected <T> @Nullable T getTraceAdapter(@NonNull ITmfTrace trace, Class<T> adapterType) { - if (ICyclesConverter.class.equals(adapterType)) { - ICyclesConverter adapter = new ICyclesConverter() { - @Override - public long cyclesToNanos(long cycles) { - return cycles * 4; - } - - @Override - public long nanosToCycles(long nanos) { - return nanos / 4; - } - }; - return adapterType.cast(adapter); - } - if (IMarkerReferenceProvider.class.equals(adapterType)) { - IMarkerReferenceProvider adapter = new IMarkerReferenceProvider() { - @Override - public Reference getReference(String referenceId) { - if ("ref.c".equals(referenceId)) { - return new Reference(1000L, 0); - } - return null; - } - }; - return adapterType.cast(adapter); - } - return null; - } - - @Override - public Class<?>[] getAdapterList() { - return new Class[] { - ICyclesConverter.class, - IMarkerReferenceProvider.class - }; - } - } - - private static final int ALPHA = 10; - private static final String COLOR_STR = "#010101"; - private static final RGBA COLOR = new RGBA(1, 1, 1, ALPHA); - private static final RGBA ODD_COLOR = new RGBA(1, 1, 1, 0); - private static final String RED_STR = "red"; - private static final RGBA RED = new RGBA(255, 0, 0, ALPHA); - private static final String INVALID_STR = "invalid"; - private static final RGBA DEFAULT = new RGBA(0, 0, 0, ALPHA); - - private static ITmfTrace fTrace; - private static AbstractTmfTraceAdapterFactory fFactory; - private ConfigurableMarkerEventSource fSource; - - /** - * Before Class - */ - @BeforeClass - public static void beforeClass() { - fFactory = new TmfTraceStubAdapterFactory(); - TmfTraceAdapterManager.registerFactory(fFactory, TmfTraceStub.class); - fTrace = TmfTestTrace.A_TEST_10K.getTrace(); - } - - /** - * After Class - */ - @AfterClass - public static void afterClass() { - if (fTrace != null) { - fTrace.dispose(); - } - TmfTraceAdapterManager.unregisterFactory(fFactory); - fFactory.dispose(); - } - - /** - * Before instance - */ - @Before - public void before() { - fSource = new ConfigurableMarkerEventSource(fTrace); - } - - /** - * After instance - */ - @After - public void after() { - if (fSource != null) { - fSource.dispose(); - } - fSource = null; - } - - /** - * Test - */ - @Test - public void testSimple() { - List<IMarkerEvent> markerList; - MarkerSet set = new MarkerSet("name", "id"); - ConfigurableMarkerEventSource source = getSource(); - source.configure(set); - assertEquals(0, source.getMarkerCategories().size()); - - /* - * period: 10 ms, offset: 20 ms, range: 0..4 - * - * requested range: 100 ms-200 ms - * - * expected markers: 90 ms[2] 100 ms[3] 110 ms[4] 120 ms[0] ... 200 - * ms[3] 210 ms[4] - */ - Marker markerA = new PeriodicMarker("A", "A %d", "a", "ref.a", COLOR_STR, 10.0, "ms", Range.closed(0L, 4L), 20L, ImmutableRangeSet.of(Range.all())); - set.addMarker(markerA); - source.configure(set); - assertEquals(Arrays.asList("A"), source.getMarkerCategories()); - markerList = source.getMarkerList("A", 100000000L, 200000000L, 1000L, new NullProgressMonitor()); - assertEquals(markerList.toString(), 13, markerList.size()); - for (int i = 0; i < markerList.size(); i++) { - long t = (i + 9) * 10000000L; - int index = (i + 9) - 2; - int labelIndex = index % 5; - RGBA color = index % 2 == 0 ? COLOR : ODD_COLOR; - validateMarker(markerList.get(i), t, 10000000L, "A", String.format("A %d", labelIndex), color); - } - - } - - /** - * Test With submarkers - */ - @Test - public void testSubmarkers() { - - List<IMarkerEvent> markerList; - MarkerSet set = new MarkerSet("name", "id"); - ConfigurableMarkerEventSource source = getSource(); - source.configure(set); - assertEquals(0, source.getMarkerCategories().size()); - - /* - * period: 10 ms, offset: 20 ms, range: 0..4 - * - * requested range: 100 ms-200 ms - * - * expected markers: 90 ms[2] 100 ms[3] 110 ms[4] 120 ms[0] ... 200 - * ms[3] 210 ms[4] - */ - Marker markerA = new PeriodicMarker("A", "A %d", "a", "ref.a", COLOR_STR, 10.0, "ms", Range.closed(0L, 4L), 20L, ImmutableRangeSet.of(Range.all())); - set.addMarker(markerA); - source.configure(set); - /* - * period: 10 us, offset: 20 ms, range: 1..1000 - * - * requested range: 100 ms-200 ms - * - * expected markers: 99.99 ms[1000] 100.00 ms[1] 100.01 ms[2] 100.02 - * ms[2] ... 200.00 ms[1] - */ - - SubMarker markerB = new SplitMarker("B", "B %d", "b", COLOR_STR, Range.closed(1L, 1000L), ImmutableRangeSet.of(Range.all())); - markerA.addSubMarker(markerB); - source.configure(set); - assertEquals(Arrays.asList("A", "B"), source.getMarkerCategories()); - markerList = source.getMarkerList("B", 100000000L, 200000000L, 10000L, new NullProgressMonitor()); - assertEquals(0, markerList.size()); - markerList = source.getMarkerList("B", 100000000L, 200000000L, 1000L, new NullProgressMonitor()); - assertEquals(10002, markerList.size()); - for (int i = 0; i < markerList.size(); i++) { - long t = (i + 9999) * 10000L; - int index = (i + 9999) - 2000; - int labelIndex = 1 + index % 1000; - RGBA color = labelIndex % 2 == 0 ? COLOR : ODD_COLOR; - validateMarker(markerList.get(i), t, 10000L, "B", String.format("B %d", labelIndex), color); - } - } - - /** - * Test - */ - @Test - public void testOffset() { - List<IMarkerEvent> markerList; - MarkerSet set = new MarkerSet("name", "id"); - ConfigurableMarkerEventSource source = getSource(); - source.configure(set); - assertEquals(0, source.getMarkerCategories().size()); - - /* - * period: 10 cycles (40ns), offset: -10 cycles (-40ns), reference: - * 1000ns[0], range: 0.. - * - * requested range: 1000 ns-2000 ns - * - * expected markers: 960 ns[0] 1000 ns[1] 1040 ns[2] ... 2000 ns[26] - * 2040 ns[27] - */ - Marker markerC = new PeriodicMarker("C", "C %d", "c", "ref.c", COLOR_STR, 10.0, "cycles", Range.atLeast(0L), -10L, ImmutableRangeSet.of(Range.all())); - set.addMarker(markerC); - source.configure(set); - assertEquals(Arrays.asList("C"), source.getMarkerCategories()); - markerList = source.getMarkerList("C", 1000L, 2000L, 1L, new NullProgressMonitor()); - assertEquals(28, markerList.size()); - for (int i = 0; i < markerList.size(); i++) { - long t = (i + 24) * 40L; - int index = i + 24 - 25 + 1; // -25 +1 for offset - RGBA color = index % 2 == 0 ? COLOR : ODD_COLOR; - validateMarker(markerList.get(i), t, 40L, "C", String.format("C %d", index), color); - } - } - - /** - * Test - */ - @Test - public void testIrregular() { - List<IMarkerEvent> markerList; - MarkerSet set = new MarkerSet("name", "id"); - ConfigurableMarkerEventSource source = getSource(); - source.configure(set); - assertEquals(0, source.getMarkerCategories().size()); - - /* - * period: 40 ns, offset: 0 ns, range: 0..49, indexRange: 30..31,40 - * - * requested range: 0 ns-4000 ns - * - * expected markers: 1200 ns[30] 1240 ns[31] 1600 ns[40] 3200 ns[30] - * 3240 ns[31] 3600 ns[40] - */ - Marker markerD = new PeriodicMarker("D", "D %d", "d", "ref.d", COLOR_STR, 40.0, "ns", Range.closed(0L, 49L), 0L, - ImmutableRangeSet.<Long> builder().add(Range.closed(30L, 31L)).add(Range.singleton(40L)).build()); - set.addMarker(markerD); - source.configure(set); - assertEquals(Arrays.asList("D"), source.getMarkerCategories()); - markerList = source.getMarkerList("D", 0L, 4000L, 1L, new NullProgressMonitor()); - assertEquals(6, markerList.size()); - int i = 0; - for (long t = 0L; t < 4000L; t += 40L) { - int index = (int) (t / 40L) % 50; - if (index == 30L || index == 31L || index == 40L) { - IMarkerEvent marker = markerList.get(i++); - RGBA color = index % 2 == 0 ? COLOR : ODD_COLOR; - validateMarker(marker, t, 40L, "D", String.format("D %d", index), color); - } - } - } - - /** - * Test - */ - @Test - public void testWeightedWithSubmarkers() { - List<IMarkerEvent> markerList; - fSource = getSource(); - MarkerSet set = new MarkerSet("name", "id"); - ConfigurableMarkerEventSource source = getSource(); - source.configure(set); - assertEquals(0, source.getMarkerCategories().size()); - /* - * period: 40 ns, offset: 0 ns, range: 0..49, indexRange: 30..31,40 - * - * requested range: 0 ns-4000 ns - * - * expected markers: 1200 ns[30] 1240 ns[31] 1600 ns[40] 3200 ns[30] - * 3240 ns[31] 3600 ns[40] - */ - Marker markerD = new PeriodicMarker("D", "D %d", "d", "ref.d", COLOR_STR, 40.0, "ns", Range.closed(0L, 49L), 0L, - ImmutableRangeSet.<Long> builder().add(Range.closed(30L, 31L)).add(Range.singleton(40L)).build()); - set.addMarker(markerD); - /* - * period: 40 ns with segment weigths {2,1,3}, offset: 0 ns, - * range:0..49, indexRange:30..31,40 - * - * requested range: 0 ns-2000 ns - * - * expected markers: 1200 ns[0] 1220[2] 1240 ns[0] 1260[2] 1600 ns[0] - * 1620 ns[2] - */ - WeightedMarker markerE = new WeightedMarker("E"); - markerD.addSubMarker(markerE); - MarkerSegment segmentE1 = new MarkerSegment("E1 %d", "e1", RED_STR, 2); - markerE.addSegment(segmentE1); - MarkerSegment segmentE2 = new MarkerSegment("E2 %d", "e2", "", 1); - markerE.addSegment(segmentE2); - MarkerSegment segmentE3 = new MarkerSegment("E3 %d", "e3", INVALID_STR, 3); - markerE.addSegment(segmentE3); - source.configure(set); - assertEquals(Arrays.asList("D", "E"), source.getMarkerCategories()); - markerList = source.getMarkerList("E", 0L, 2000L, 1L, new NullProgressMonitor()); - assertEquals(6, markerList.size()); - int i = 0; - for (long t = 0L; t < 2000L; t += 40L) { - int index = (int) (t / 40L) % 50; - if (index == 30L || index == 31L || index == 40L) { - validateMarker(markerList.get(i), t, 13L, "E", String.format("E1 %d", 0), RED); - i++; - /* - * segment 2 does not have visible marker due to empty color - * name - */ - validateMarker(markerList.get(i), t + 20L, 20L, "E", String.format("E3 %d", 2), DEFAULT); - i++; - } - } - } - - private static void validateMarker(IMarkerEvent marker, long time, long duration, String category, String label, RGBA color) { - String markerText = marker.toString(); - assertEquals(markerText, time, marker.getTime()); - assertEquals(markerText, duration, marker.getDuration()); - assertEquals(markerText, category, marker.getCategory()); - assertEquals(markerText, label, marker.getLabel()); - assertEquals(markerText, color, marker.getColor()); - assertEquals(markerText, false, marker.isForeground()); - } - - private ConfigurableMarkerEventSource getSource() { - return fSource; - } -}
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/markers/ConfigurableMarkerEventSource.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/markers/ConfigurableMarkerEventSource.java deleted file mode 100644 index 5cb0667..0000000 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/markers/ConfigurableMarkerEventSource.java +++ /dev/null
@@ -1,342 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017 Ericsson - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License 2.0 which - * accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Tasse - Initial API and implementation - *******************************************************************************/ - -package org.eclipse.tracecompass.internal.tmf.ui.markers; - -import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.graphics.RGBA; -import org.eclipse.tracecompass.internal.tmf.core.markers.IMarkerConstants; -import org.eclipse.tracecompass.internal.tmf.core.markers.Marker; -import org.eclipse.tracecompass.internal.tmf.core.markers.Marker.PeriodicMarker; -import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSegment; -import org.eclipse.tracecompass.internal.tmf.core.markers.MarkerSet; -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.ColorUtils; -import org.eclipse.tracecompass.tmf.ui.markers.IMarkerReferenceProvider; -import org.eclipse.tracecompass.tmf.ui.markers.PeriodicMarkerEventSource; -import org.eclipse.tracecompass.tmf.ui.markers.PeriodicMarkerEventSource.Reference; -import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEvent; -import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEventSource; -import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.MarkerEvent; - -import com.google.common.collect.Lists; -import com.google.common.collect.RangeSet; - -/** - * Configurable marker event source. - */ -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 int MIN_PERIOD = 5; // in units of resolution intervals - private static final int ALPHA = 10; - private static final String COLOR_REGEX = "#[A-Fa-f0-9]{6}"; //$NON-NLS-1$ - - private List<IConfigurableMarkerEventSource> fMarkerEventSources; - private Map<Marker, RGBA> fColors = new HashMap<>(); - private final ITmfTrace fTrace; - - /** - * Constructor - * - * @param trace - * the trace - */ - public ConfigurableMarkerEventSource(ITmfTrace trace) { - fMarkerEventSources = new ArrayList<>(); - fTrace = trace; - TmfSignalManager.register(this); - } - - @Override - public void dispose() { - TmfSignalManager.deregister(this); - } - - /** - * Configure the marker source from the specified marker set - * - * @param markerSet - * the marker set, or null to clear the configuration - */ - public void configure(MarkerSet markerSet) { - fMarkerEventSources.clear(); - if (markerSet != null) { - for (Marker marker : markerSet.getMarkers()) { - configure(marker); - } - } - } - - private void configure(Marker marker) { - if (marker instanceof PeriodicMarker) { - PeriodicMarker periodicMarker = (PeriodicMarker) marker; - String referenceId = periodicMarker.getReferenceId(); - Reference baseReference = null; - if (fTrace instanceof IAdaptable && !referenceId.isEmpty()) { - @Nullable IMarkerReferenceProvider adapter = ((IAdaptable) fTrace).getAdapter(IMarkerReferenceProvider.class); - if (adapter != null) { - baseReference = adapter.getReference(referenceId); - } - } - if (baseReference == null) { - baseReference = Reference.ZERO; - } - long rollover = periodicMarker.getRange().hasUpperBound() ? (periodicMarker.getRange().upperEndpoint() - periodicMarker.getRange().lowerEndpoint() + 1) : 0; - RGBA evenColor = getColor(periodicMarker); - RGBA oddColor = getOddColor(evenColor); - double period = convertToNanos(periodicMarker.getPeriod(), periodicMarker.getUnit()); - Reference reference = new Reference(baseReference.getTime() + Math.round(convertToNanos(periodicMarker.getOffset(), periodicMarker.getUnit())), baseReference.getIndex()); - ConfigurablePeriodicMarkerEventSource markerEventSource = new ConfigurablePeriodicMarkerEventSource(marker, checkNotNull(periodicMarker.getName()), reference, period, rollover, evenColor, oddColor, false, periodicMarker.getRange().lowerEndpoint(), checkNotNull(periodicMarker.getLabel()), periodicMarker.getIndexRange()); - fMarkerEventSources.add(markerEventSource); - } - } - - private double convertToNanos(double number, String unit) { - if (unit.equalsIgnoreCase(IMarkerConstants.MS)) { - return number * NANO_PER_MILLI; - } else if (unit.equalsIgnoreCase(IMarkerConstants.US)) { - return number * NANO_PER_MICRO; - } else if (unit.equalsIgnoreCase(IMarkerConstants.NS)) { - return number; - } else if (unit.equalsIgnoreCase(IMarkerConstants.CYCLES) && - fTrace instanceof IAdaptable) { - ICyclesConverter adapter = ((IAdaptable) fTrace).getAdapter(ICyclesConverter.class); - if (adapter != null) { - return adapter.cyclesToNanos((long) number); - } - } - return number; - } - - private @NonNull RGBA getColor(Marker marker) { - RGBA color = fColors.get(marker); - if (color == null) { - color = parseColor(marker.getColor()); - fColors.put(marker, color); - } - return color; - } - - private static @NonNull RGBA getOddColor(RGBA color) { - return new RGBA(color.rgb.red, color.rgb.green, color.rgb.blue, 0); - } - - private static @NonNull RGBA parseColor(String color) { - RGB rgb = null; - if (color.matches(COLOR_REGEX)) { - rgb = ColorUtils.fromHexColor(color); - } else { - rgb = ColorUtils.fromX11Color(color); - if (rgb == null) { - rgb = new RGB(0, 0, 0); - } - } - return new RGBA(rgb.red, rgb.green, rgb.blue, ALPHA); - } - - @Override - public List<String> getMarkerCategories() { - Set<String> categories = new LinkedHashSet<>(); - for (IConfigurableMarkerEventSource source : fMarkerEventSources) { - categories.addAll(source.getMarkerCategories()); - getSubMarkerCategories(categories, source.getSubMarkers()); - } - return checkNotNull(Lists.newArrayList(categories)); - } - - private void getSubMarkerCategories(Set<String> categories, List<SubMarker> subMarkers) { - for (SubMarker subMarker : subMarkers) { - categories.add(subMarker.getName()); - getSubMarkerCategories(categories, subMarker.getSubMarkers()); - if (subMarker instanceof WeightedMarker) { - for (MarkerSegment segment : ((WeightedMarker) subMarker).getSegments()) { - getSubMarkerCategories(categories, segment.getSubMarkers()); - } - } - } - } - - @Override - public List<IMarkerEvent> getMarkerList(String category, long startTime, long endTime, long resolution, IProgressMonitor monitor) { - return getMarkerList(startTime, endTime, resolution, monitor).stream() - .filter((marker) -> marker.getCategory().equals(category)) - .collect(Collectors.toList()); - } - - @Override - public List<IMarkerEvent> getMarkerList(long startTime, long endTime, long resolution, IProgressMonitor monitor) { - @NonNull List<@NonNull IMarkerEvent> markerList = new ArrayList<>(); - for (IConfigurableMarkerEventSource source : fMarkerEventSources) { - long minDuration = resolution * MIN_PERIOD; - if (source.getMaxDuration() > minDuration) { - @NonNull List<@NonNull IMarkerEvent> list = source.getMarkerList(startTime, endTime, resolution, monitor); - for (IMarkerEvent markerEvent : list) { - for (SubMarker subMarker : source.getSubMarkers()) { - getSubMarkerList(subMarker, markerEvent, markerList, startTime, endTime, minDuration); - } - markerList.add(markerEvent); - } - } - } - markerList.sort(Comparator.comparingLong(marker -> marker.getTime())); - return markerList; - } - - private void getSubMarkerList(SubMarker subMarker, IMarkerEvent markerEvent, @NonNull List<@NonNull IMarkerEvent> markerList, long startTime, long endTime, long minDuration) { - if (subMarker instanceof SplitMarker) { - getSubMarkerList((SplitMarker) subMarker, markerEvent, markerList, startTime, endTime, minDuration); - } else if (subMarker instanceof WeightedMarker) { - getSubMarkerList((WeightedMarker) subMarker, markerEvent, markerList, startTime, endTime, minDuration); - } - } - - private void getSubMarkerList(SplitMarker splitMarker, IMarkerEvent markerEvent, @NonNull List<@NonNull IMarkerEvent> markerList, long startTime, long endTime, long minDuration) { - if (markerEvent.getTime() > endTime || markerEvent.getTime() + markerEvent.getDuration() < startTime) { - return; - } - long lower = splitMarker.getRange().lowerEndpoint(); - long upper = splitMarker.getRange().upperEndpoint(); - long segments = upper - lower + 1; - long start = markerEvent.getTime(); - for (int i = 0; i < segments; i++) { - long end = markerEvent.getTime() + Math.round((double) (i + 1) / segments * markerEvent.getDuration()); - long duration = end - start; - long labelIndex = lower + i; - if (end >= startTime && duration > minDuration && splitMarker.getIndexRange().contains(labelIndex)) { - RGBA color = (labelIndex & 1) == 0 ? getColor(splitMarker) : getOddColor(getColor(splitMarker)); - IMarkerEvent subMarkerEvent = new MarkerEvent(null, start, end - start, splitMarker.getName(), color, String.format(splitMarker.getLabel(), labelIndex), false); - for (SubMarker subMarker : splitMarker.getSubMarkers()) { - getSubMarkerList(subMarker, subMarkerEvent, markerList, startTime, endTime, minDuration); - } - markerList.add(subMarkerEvent); - } - if (start >= endTime) { - break; - } - start = end; - } - } - - private void getSubMarkerList(WeightedMarker weightedMarker, IMarkerEvent markerEvent, @NonNull List<@NonNull IMarkerEvent> markerList, long startTime, long endTime, long minDuration) { - if (markerEvent.getTime() > endTime || markerEvent.getTime() + markerEvent.getDuration() < startTime) { - return; - } - long start = markerEvent.getTime(); - long length = 0; - for (int i = 0; i < weightedMarker.getSegments().size(); i++) { - MarkerSegment segment = weightedMarker.getSegments().get(i); - length += segment.getLength(); - long end = markerEvent.getTime() + Math.round((length / (double) weightedMarker.getTotalLength()) * markerEvent.getDuration()); - long duration = end - start; - if (end >= startTime && duration > minDuration && !segment.getColor().isEmpty()) { - RGBA color = getColor(segment); - IMarkerEvent subMarkerEvent = new MarkerEvent(null, start, end - start, weightedMarker.getName(), color, String.format(segment.getLabel(), i), false); - for (SubMarker subMarker : segment.getSubMarkers()) { - getSubMarkerList(subMarker, subMarkerEvent, markerList, startTime, endTime, minDuration); - } - for (SubMarker subMarker : weightedMarker.getSubMarkers()) { - getSubMarkerList(subMarker, subMarkerEvent, markerList, startTime, endTime, minDuration); - } - markerList.add(subMarkerEvent); - } - if (start >= endTime) { - break; - } - start = end; - } - } - - private static interface IConfigurableMarkerEventSource extends IMarkerEventSource { - double getMaxDuration(); - - public List<SubMarker> getSubMarkers(); - } - - private class ConfigurablePeriodicMarkerEventSource extends PeriodicMarkerEventSource implements IConfigurableMarkerEventSource { - - private final Marker fMarker; - private final long fStartIndex; - private final String fLabel; - private final RangeSet<Long> fIndexRange; - private final double fMaxDuration; - - public ConfigurablePeriodicMarkerEventSource(Marker marker, @NonNull String category, @NonNull Reference reference, double period, long rollover, @NonNull RGBA evenColor, @NonNull RGBA oddColor, boolean foreground, long startIndex, @NonNull String label, RangeSet<Long> indexRange) { - super(category, reference, period, rollover, evenColor, oddColor, foreground); - fMarker = marker; - fStartIndex = startIndex; - fLabel = label; - fIndexRange = indexRange; - fMaxDuration = period; - } - - @Override - public @NonNull String getMarkerLabel(long index) { - return checkNotNull(String.format(fLabel, fStartIndex + index)); - } - - @Override - public boolean isApplicable(long index) { - if (fIndexRange != null) { - return fIndexRange.contains(fStartIndex + index); - } - return true; - } - - @Override - public double getMaxDuration() { - return fMaxDuration; - } - - @Override - public List<SubMarker> 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()); - } -}
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/markers/ConfigurableMarkerEventSourceFactory.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/markers/ConfigurableMarkerEventSourceFactory.java deleted file mode 100644 index 4139c4d..0000000 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/markers/ConfigurableMarkerEventSourceFactory.java +++ /dev/null
@@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017 Ericsson - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License 2.0 which - * accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Tasse - Initial API and implementation - *******************************************************************************/ - -package org.eclipse.tracecompass.internal.tmf.ui.markers; - -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; - -/** - * Configurable marker event source factory. - */ -public class ConfigurableMarkerEventSourceFactory extends AbstractTmfTraceAdapterFactory { - - @Override - 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; - } - - @Override - public Class<?>[] getAdapterList() { - return new Class[] { - IMarkerEventSource.class - }; - } -}