From a271b30aea0df537e5b0034b6ca966145226f922 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Genevi=C3=A8ve=20Bastien?= Date: Mon, 13 Jun 2016 14:24:20 -0400 Subject: [PATCH] tmf: bug 495897 Keep last good formula on failed synchronization MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When trace synchronization fails, the last known good formula should be kept and the traces synchronized. It is a better approximation than to keep the traces unsynchronized Change-Id: I35a4b2627fcaf0e7e64e9a77516758944959ca6a Signed-off-by: Geneviève Bastien Reviewed-on: https://git.eclipse.org/r/75176 Reviewed-by: Hudson CI Reviewed-by: Matthew Khouzam --- .../core/tests/synchronization/SyncTest.java | 19 ++++++++++++++++++- .../SyncAlgorithmFullyIncremental.java | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/synchronization/SyncTest.java b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/synchronization/SyncTest.java index 5d6b94a238..24dad3b0c3 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/synchronization/SyncTest.java +++ b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/synchronization/SyncTest.java @@ -29,6 +29,7 @@ import java.util.LinkedList; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.internal.tmf.core.synchronization.SyncAlgorithmFullyIncremental; +import org.eclipse.tracecompass.internal.tmf.core.synchronization.TmfTimestampTransformLinearFast; import org.eclipse.tracecompass.tmf.core.event.matching.TmfEventDependency; import org.eclipse.tracecompass.tmf.core.synchronization.ITmfTimestampTransform; import org.eclipse.tracecompass.tmf.core.synchronization.SynchronizationAlgorithm; @@ -119,11 +120,27 @@ public class SyncTest { assertEquals(syncAlgo.getTimestampTransform(t1.getHostId()), tt1); assertEquals(TimestampTransformFactory.getDefaultTransform(), tt1); assertEquals(syncAlgo.getTimestampTransform(t2.getHostId()), tt2); + assertTrue(tt2 instanceof TmfTimestampTransformLinearFast); - /* Make the two hulls intersect */ + /* + * Make the two hulls intersect, and make sure the last good formula is + * kept after failure + */ addSyncMatch(syncAlgo, t1, 7, t2, 4); + assertEquals(SyncQuality.ACCURATE, syncAlgo.getSynchronizationQuality(t1, t2)); + assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 0.375 beta 1.625 ]]", syncAlgo.toString()); + // Last good synchronization + tt2 = syncAlgo.getTimestampTransform(t2); + tt1 = syncAlgo.getTimestampTransform(t1); + assertTrue(tt2 instanceof TmfTimestampTransformLinearFast); + addSyncMatch(syncAlgo, t2, 7, t1, 3); assertEquals(SyncQuality.FAIL, syncAlgo.getSynchronizationQuality(t1, t2)); + assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 0.375 beta 1.625 ]]", syncAlgo.toString()); + + assertEquals(tt2, syncAlgo.getTimestampTransform(t2.getHostId())); + assertEquals(tt1, syncAlgo.getTimestampTransform(t1.getHostId())); + assertEquals(TimestampTransformFactory.getDefaultTransform(), tt1); } /** diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/SyncAlgorithmFullyIncremental.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/SyncAlgorithmFullyIncremental.java index 26b1db5dcd..2203f2b4ca 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/SyncAlgorithmFullyIncremental.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/SyncAlgorithmFullyIncremental.java @@ -158,7 +158,7 @@ public class SyncAlgorithmFullyIncremental extends SynchronizationAlgorithm { fTree = new SyncSpanningTree(getRootNode()); for (ConvexHull traceSync : fSyncs) { SyncQuality q = traceSync.getQuality(); - if (q == SyncQuality.ACCURATE || q == SyncQuality.APPROXIMATE) { + if (q == SyncQuality.ACCURATE || q == SyncQuality.APPROXIMATE || q == SyncQuality.FAIL) { String from = traceSync.getReferenceHost(); String to = traceSync.getOtherHost(); fTree.addSynchronization(from, to, traceSync.getTimestampTransform(to), traceSync.getAccuracy()); -- 2.34.1