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