diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java index 57675813c5a832602ec2221635c3ea01ffeccd09..df7c4411b24881b3358b7e4b8be0c1c92048432a 100644 --- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java +++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java @@ -24,6 +24,14 @@ class TraceReconstructionBuffer { private long lastBufferInsert = -1; private int maxOrderIndex = -1; + public void clear() { + events.clear(); + openEvents = 0; + updatedInThisPeriod = true; + lastBufferInsert = -1; + maxOrderIndex = -1; + } + public final void insertEvent(final AbstractEventRecord event) { updatedInThisPeriod = true; setMaxOrderIndex(event); @@ -90,6 +98,6 @@ class TraceReconstructionBuffer { } } } - return new Trace(events, valid); + return new Trace(new ArrayList<AbstractEventRecord>(events), valid); } } diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java index d3498437ad165c21f997309d7fb91e966ba60b40..61fa7f05a0764f82dec3e1ed72ce1fc50b644343 100644 --- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java +++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java @@ -1,6 +1,7 @@ package explorviz.live_trace_processing.filter.reconstruction; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -20,6 +21,7 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I private final long maxTraceTimeout; private final Map<Long, TraceReconstructionBuffer> traceId2trace = new ConcurrentSkipListMap<Long, TraceReconstructionBuffer>(); + private final LinkedList<TraceReconstructionBuffer> freeBufferCache = new LinkedList<TraceReconstructionBuffer>(); public TraceReconstructionFilter(final long maxTraceTimeout, final ITraceReduction traceReduction) { @@ -33,13 +35,15 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I if (record instanceof AbstractEventRecord) { final AbstractEventRecord abstractOperationEvent = ((AbstractEventRecord) record); - final long traceId = abstractOperationEvent.getTraceId(); + final Long traceId = abstractOperationEvent.getTraceId(); final TraceReconstructionBuffer traceBuffer = getBufferForTraceId(abstractOperationEvent .getTraceId()); traceBuffer.insertEvent(abstractOperationEvent); if (traceBuffer.isFinished()) { traceId2trace.remove(traceId); + traceBuffer.clear(); + freeBufferCache.addLast(traceBuffer); deliver(traceBuffer.toTrace(true)); } } else if (record instanceof Trace) { @@ -64,7 +68,11 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I private final TraceReconstructionBuffer getBufferForTraceId(final long traceId) { TraceReconstructionBuffer traceBuffer = traceId2trace.get(traceId); if (traceBuffer == null) { - traceBuffer = new TraceReconstructionBuffer(); + if (freeBufferCache.isEmpty()) { + traceBuffer = new TraceReconstructionBuffer(); + } else { + traceBuffer = freeBufferCache.removeFirst(); + } traceId2trace.put(traceId, traceBuffer); } return traceBuffer; @@ -84,6 +92,8 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I if ((timestamp - traceBuffer.getLastBufferInsert()) <= traceTimeout) { deliver(traceBuffer.toTrace(false)); traceIdsToRemove.add(entry.getKey()); + traceBuffer.clear(); + freeBufferCache.addLast(traceBuffer); } } } diff --git a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationFilter.java b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationFilter.java index 6683064f919c951f22771d9201214c861df47545..90b0fbed77f77d200e3298df6071cd7ea4278cde 100644 --- a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationFilter.java +++ b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationFilter.java @@ -22,6 +22,8 @@ public class TracePatternSummarizationFilter extends AbstractFilter implements I private final Map<Trace, TracePatternSummarizationBuffer> trace2buffer = new ConcurrentSkipListMap<Trace, TracePatternSummarizationBuffer>( new TraceComperator()); + // TODO cache for buffer objects + public TracePatternSummarizationFilter(final long maxCollectionDuration, final IPipeReceiver sinkReceiver) { super(sinkReceiver, Constants.TRACE_SUMMARIZATION_DISRUPTOR_SIZE,