X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tmf%2Forg.eclipse.tracecompass.tmf.core%2Fsrc%2Forg%2Feclipse%2Ftracecompass%2Finternal%2Ftmf%2Fcore%2Fsynchronization%2FTmfTimestampTransformLinearFast.java;h=3e9c0f89d2d8152faa0dc79dafc6127f12773a4a;hb=c338f3eb0180517ac140fe181f23e1916a21893f;hp=30531a60f6e921b6988d91bad7a688a821755d6b;hpb=1e706b1d20a2434d1a2eba87f5eec8d8170f5259;p=deliverable%2Ftracecompass.git diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/TmfTimestampTransformLinearFast.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/TmfTimestampTransformLinearFast.java index 30531a60f6..3e9c0f89d2 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/TmfTimestampTransformLinearFast.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/TmfTimestampTransformLinearFast.java @@ -13,6 +13,8 @@ package org.eclipse.tracecompass.internal.tmf.core.synchronization; +import java.io.IOException; +import java.io.ObjectInputStream; import java.math.BigDecimal; import java.math.MathContext; @@ -73,8 +75,7 @@ public class TmfTimestampTransformLinearFast implements ITmfTimestampTransformIn private final int fDeltaBits; private final int fHashCode; - private long fOffset; - + private transient long fOffset; private transient long fRangeStart; private transient long fScaleMiss; private transient long fScaleHit; @@ -151,8 +152,7 @@ public class TmfTimestampTransformLinearFast implements ITmfTimestampTransformIn fDeltaBits = Math.max(Math.min(width, DECIMAL_BITS), 0); fDeltaMax = 1 << fDeltaBits; fAlphaLong = fAlpha.multiply(BigDecimal.valueOf(fDeltaMax), MC).longValue(); - fRangeStart = 0L; - fOffset = 0L; + rescale(0); fScaleMiss = 0; fScaleHit = 0; fHashCode = HASHER.newHasher() @@ -185,8 +185,7 @@ public class TmfTimestampTransformLinearFast implements ITmfTimestampTransformIn * * TODO: use exact math arithmetic to detect overflow when switching to Java 8 */ - fRangeStart = timestamp - (timestamp % fDeltaMax); - fOffset = BigDecimal.valueOf(fRangeStart).multiply(fAlpha, MC).add(fBeta, MC).longValue(); + rescale(timestamp); delta = Math.abs(timestamp - fRangeStart); fScaleMiss++; } else { @@ -195,6 +194,11 @@ public class TmfTimestampTransformLinearFast implements ITmfTimestampTransformIn return ((fAlphaLong * delta) >> fDeltaBits) + fOffset; } + private void rescale(long timestamp) { + fRangeStart = timestamp - (timestamp % fDeltaMax); + fOffset = BigDecimal.valueOf(fRangeStart).multiply(fAlpha, MC).add(fBeta, MC).longValue(); + } + //------------------------------------------------------------------------- // Transform composition //------------------------------------------------------------------------- @@ -308,4 +312,12 @@ public class TmfTimestampTransformLinearFast implements ITmfTimestampTransformIn return fHashCode; } + // Deserialization method, make sure there is a first scaling + private void readObject(ObjectInputStream stream) + throws IOException, ClassNotFoundException { + stream.defaultReadObject(); + + rescale(0); + } + } \ No newline at end of file