From 86472c1068ea838d0372c4166e65de813fe72c10 Mon Sep 17 00:00:00 2001 From: Florian Fittkau <ffi@informatik.uni-kiel.de> Date: Fri, 6 Feb 2015 23:31:07 +0100 Subject: [PATCH] optimized that remote records cant be reduced --- .../reconstruction/TraceReconstructionBuffer.java | 10 +++++++++- .../filter/reduction/TracesSummarizationFilter.java | 10 ++++++++-- .../reader/TCPReaderOneClient.java | 8 +++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java index 7ce0d52..094dc86 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 fc24b69..c5bcd3e 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 f91d611..b7c9dee 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); -- GitLab