diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java index 7ce0d52b169a05aa689f7b63c20d4ce6722e7f81..094dc86976846579c2c5d2cee8a0fe92c508a386 100644 --- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java +++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java @@ -10,6 +10,8 @@ import explorviz.live_trace_processing.record.event.AbstractAfterEventRecord; import explorviz.live_trace_processing.record.event.AbstractAfterFailedEventRecord; import explorviz.live_trace_processing.record.event.AbstractBeforeEventRecord; import explorviz.live_trace_processing.record.event.AbstractEventRecord; +import explorviz.live_trace_processing.record.event.remote.BeforeReceivedRemoteCallRecord; +import explorviz.live_trace_processing.record.event.remote.BeforeSentRemoteCallRecord; import explorviz.live_trace_processing.record.trace.RuntimeStatisticInformation; import explorviz.live_trace_processing.record.trace.Trace; @@ -75,10 +77,16 @@ class TraceReconstructionBuffer { public final Trace toTrace(final boolean valid) { final Stack<AbstractBeforeEventRecord> stack = new Stack<AbstractBeforeEventRecord>(); + boolean containsRemoteRecord = false; + for (final AbstractEventRecord event : events) { if (event instanceof AbstractBeforeEventRecord) { final AbstractBeforeEventRecord beforeEvent = (AbstractBeforeEventRecord) event; stack.push(beforeEvent); + if ((event instanceof BeforeReceivedRemoteCallRecord) + || (event instanceof BeforeSentRemoteCallRecord)) { + containsRemoteRecord = true; + } } else if ((event instanceof AbstractAfterEventRecord) || (event instanceof AbstractAfterFailedEventRecord)) { if (!stack.isEmpty()) { @@ -91,6 +99,6 @@ class TraceReconstructionBuffer { } } } - return new Trace(new ArrayList<AbstractEventRecord>(events), valid, 1); + return new Trace(new ArrayList<AbstractEventRecord>(events), valid, containsRemoteRecord, 1); } } diff --git a/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java b/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java index fc24b69869d6a62b98683e07ddf40ba5e7beb2fe..c5bcd3e7ca3ce7e40731a3f00bb4756320b3f358 100644 --- a/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java +++ b/src/explorviz/live_trace_processing/filter/reduction/TracesSummarizationFilter.java @@ -38,7 +38,13 @@ public class TracesSummarizationFilter extends AbstractFilter implements ITraceR final Trace trace = (Trace) record; if (trace.isValid()) { - insertIntoBuffer(trace); + if (!trace.containsRemoteRecord()) { + insertIntoBuffer(trace); + } else { + // trace with remote records cant be reduced + makeTraceElementsAccumulator(trace); + deliver(trace); + } } else { makeTraceElementsAccumulator(trace); deliver(trace); @@ -77,7 +83,7 @@ public class TracesSummarizationFilter extends AbstractFilter implements ITraceR final AbstractBeforeOperationEventRecord abstractBeforeOperationEventRecord = (AbstractBeforeOperationEventRecord) abstractBeforeEventRecord; abstractBeforeOperationEventRecord.getRuntimeStatisticInformation() - .makeAccumulator(abstractBeforeOperationEventRecord.getObjectId()); + .makeAccumulator(abstractBeforeOperationEventRecord.getObjectId()); } else { abstractBeforeEventRecord.getRuntimeStatisticInformation().makeAccumulator(0); diff --git a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java index f91d611bf333072532f3bcd7747aa89524fb2ed4..b7c9deebf4ca398daf7c98f19519f5f661780cbf 100644 --- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java +++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java @@ -184,6 +184,11 @@ class TCPReaderOneClient extends Thread { if (validByte == (byte) 0) { valid = false; } + final byte containsRemoteRecordByte = buffer.get(); + boolean containsRemoteRecord = true; + if (containsRemoteRecordByte == (byte) 0) { + containsRemoteRecord = false; + } final int calledTimes = buffer.getInt(); final int eventsLength = buffer.getInt(); final int byteLength = buffer.getInt(); @@ -200,7 +205,8 @@ class TCPReaderOneClient extends Thread { } } - putInRingBuffer(new Trace(events, valid, calledTimes)); + putInRingBuffer(new Trace(events, valid, containsRemoteRecord, + calledTimes)); break; } buffer.position(buffer.position() - 10);