From 6bdc9facd4a5e4b642772ef32f5f68d376375abf Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Wed, 15 Aug 2012 11:49:20 -0400 Subject: [PATCH] ctf: Simplify StreamInputPacketReader - Make all internal structures final, initialize them in the constructor. - Remove all the public getters and setters for those, they are only used internally. - Replace a couple more null checks by "instanceof" checks. (previously, if a field name was present but not of the right type, it would throw a ClassCastException) Change-Id: If4376a6310b48737a45892399dbb935e647ef0d8 Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/7241 Reviewed-by: Matthew Khouzam IP-Clean: Matthew Khouzam Tested-by: Matthew Khouzam --- .../core/trace/StreamInputPacketReader.java | 334 +++++------------- 1 file changed, 95 insertions(+), 239 deletions(-) diff --git a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketReader.java b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketReader.java index 565a68095b..87e474b545 100644 --- a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketReader.java +++ b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketReader.java @@ -40,71 +40,51 @@ import org.eclipse.linuxtools.internal.ctf.core.trace.StreamInputPacketIndexEntr public class StreamInputPacketReader implements IDefinitionScope { // ------------------------------------------------------------------------ - // Constants + // Attributes // ------------------------------------------------------------------------ - /** - * Reference to the index entry of the current packet. - */ - private StreamInputPacketIndexEntry currentPacket = null; - - /** - * BitBuffer used to read the trace file. - */ - private final BitBuffer bitBuffer = new BitBuffer(); + /** BitBuffer used to read the trace file. */ + private final BitBuffer bitBuffer; - /** - * StreamInputReader that uses this StreamInputPacketReader. - */ + /** StreamInputReader that uses this StreamInputPacketReader. */ private final StreamInputReader streamInputReader; - /** - * Last timestamp recorded. - * - * Needed to calculate the complete timestamp values for the events with - * compact headers. - */ - private long lastTimestamp = 0; - - /** - * Trace packet header. - */ - private StructDefinition tracePacketHeaderDef = null; + /** Trace packet header. */ + private final StructDefinition tracePacketHeaderDef; - /** - * Stream packet context definition. - */ - private StructDefinition streamPacketContextDef = null; + /** Stream packet context definition. */ + private final StructDefinition streamPacketContextDef; - /** - * Stream event header definition. - */ - private StructDefinition streamEventHeaderDef = null; + /** Stream event header definition. */ + private final StructDefinition streamEventHeaderDef; - /** - * Stream event context definition. - */ - private StructDefinition streamEventContextDef = null; + /** Stream event context definition.*/ + private final StructDefinition streamEventContextDef; - /** - * Maps event ID to event definitions. - */ + /** Maps event ID to event definitions. */ private final HashMap events; + /** Reference to the index entry of the current packet. */ + private StreamInputPacketIndexEntry currentPacket = null; + /** - * CPU id of current packet. + * Last timestamp recorded. + * + * Needed to calculate the complete timestamp values for the events with + * compact headers. */ + private long lastTimestamp = 0; + + /** CPU id of current packet. */ private int currentCpu = 0; - /** - * number of lost events in this packet - */ + /** number of lost events in this packet */ private int lostSoFar; private int lostEventsInThisPacket; // ------------------------------------------------------------------------ - // Attributes + // Constructors // ------------------------------------------------------------------------ /** @@ -116,24 +96,56 @@ public class StreamInputPacketReader implements IDefinitionScope { public StreamInputPacketReader(StreamInputReader streamInputReader) { this.streamInputReader = streamInputReader; - /* - * Set the BitBuffer's byte order. - */ - getBitBuffer().setByteOrder(streamInputReader.getByteOrder()); - - events = streamInputReader.getStreamInput().getStream().getTrace() - .getEventDefs(streamInputReader.getStreamInput()); - /* - * Create definitions needed to read the events. - */ - createDefinitions(); + /* Set the BitBuffer's byte order. */ + bitBuffer = new BitBuffer(); + bitBuffer.setByteOrder(streamInputReader.getByteOrder()); + events = streamInputReader.getStreamInput().getStream().getTrace().getEventDefs(streamInputReader.getStreamInput()); lostSoFar = 0; - } - // ------------------------------------------------------------------------ - // Constructors - // ------------------------------------------------------------------------ + /* Create trace packet header definition. */ + final Stream currentStream = streamInputReader.getStreamInput().getStream(); + StructDeclaration tracePacketHeaderDecl = currentStream.getTrace().getPacketHeader(); + if (tracePacketHeaderDecl != null) { + tracePacketHeaderDef = tracePacketHeaderDecl.createDefinition(this, "trace.packet.header"); //$NON-NLS-1$ + } else { + tracePacketHeaderDef = null; + } + + /* Create stream packet context definition. */ + StructDeclaration streamPacketContextDecl = currentStream.getPacketContextDecl(); + if (streamPacketContextDecl != null) { + streamPacketContextDef = streamPacketContextDecl.createDefinition(this, "stream.packet.context"); //$NON-NLS-1$ + } else { + streamPacketContextDef = null; + } + + /* Create stream event header definition. */ + StructDeclaration streamEventHeaderDecl = currentStream.getEventHeaderDecl(); + if (streamEventHeaderDecl != null) { + streamEventHeaderDef = streamEventHeaderDecl.createDefinition(this, "stream.event.header"); //$NON-NLS-1$ + } else { + streamEventHeaderDef = null; + } + + /* Create stream event context definition. */ + StructDeclaration streamEventContextDecl = currentStream.getEventContextDecl(); + if (streamEventContextDecl != null) { + streamEventContextDef = streamEventContextDecl.createDefinition(this, "stream.event.context"); //$NON-NLS-1$ + } else { + streamEventContextDef = null; + } + + /* Create event definitions */ + Collection eventDecls = streamInputReader.getStreamInput().getStream().getEvents().values(); + + for (EventDeclaration event : eventDecls) { + if (!events.containsKey(event.getId())) { + EventDefinition eventDef = event.createDefinition(streamInputReader); + events.put(event.getId(), eventDef); + } + } + } // ------------------------------------------------------------------------ // Getters/Setters/Predicates @@ -175,75 +187,6 @@ public class StreamInputPacketReader implements IDefinitionScope { // Operations // ------------------------------------------------------------------------ - /** - * Creates definitions needed to read events (stream-defined and - * event-defined). - */ - private void createDefinitions() { - /* - * Create trace packet header definition. - */ - final Stream currentStream = getStreamInputReader().getStreamInput() - .getStream(); - StructDeclaration tracePacketHeaderDecl = currentStream.getTrace() - .getPacketHeader(); - if (tracePacketHeaderDecl != null) { - setTracePacketHeaderDef(tracePacketHeaderDecl.createDefinition( - this, "trace.packet.header")); //$NON-NLS-1$ - } - - /* - * Create stream packet context definition. - */ - StructDeclaration streamPacketContextDecl = currentStream - .getPacketContextDecl(); - if (streamPacketContextDecl != null) { - setStreamPacketContextDef(streamPacketContextDecl.createDefinition( - this, "stream.packet.context")); //$NON-NLS-1$ - } - - /* - * Create stream event header definition. - */ - StructDeclaration streamEventHeaderDecl = currentStream - .getEventHeaderDecl(); - if (streamEventHeaderDecl != null) { - setStreamEventHeaderDef(streamEventHeaderDecl.createDefinition( - this, "stream.event.header")); //$NON-NLS-1$ - } - - /* - * Create stream event context definition. - */ - StructDeclaration streamEventContextDecl = currentStream - .getEventContextDecl(); - if (streamEventContextDecl != null) { - setStreamEventContextDef(streamEventContextDecl.createDefinition( - this, "stream.event.context")); //$NON-NLS-1$ - } - - createEventDefinitions(); - } - - /** - * Creates definitions needed to read the event. (event-defined). - */ - private void createEventDefinitions() { - Collection eventDecls = getStreamInputReader() - .getStreamInput().getStream().getEvents().values(); - - /* - * Create definitions for each event. - */ - for (EventDeclaration event : eventDecls) { - if (!events.containsKey(event.getId())) { - EventDefinition eventDef = event - .createDefinition(getStreamInputReader()); - events.put(event.getId(), eventDef); - } - } - } - /** * Changes the current packet to the given one. * @@ -259,9 +202,7 @@ public class StreamInputPacketReader implements IDefinitionScope { */ MappedByteBuffer bb = null; try { - bb = getStreamInputReader() - .getStreamInput() - .getFileChannel() + bb = streamInputReader.getStreamInput().getFileChannel() .map(MapMode.READ_ONLY, this.currentPacket.getOffsetBytes(), (this.currentPacket.getPacketSizeBits() + 7) / 8); @@ -273,20 +214,20 @@ public class StreamInputPacketReader implements IDefinitionScope { e.printStackTrace(); } - getBitBuffer().setByteBuffer(bb); + bitBuffer.setByteBuffer(bb); /* * Read trace packet header. */ - if (getTracePacketHeaderDef() != null) { - getTracePacketHeaderDef().read(getBitBuffer()); + if (tracePacketHeaderDef != null) { + tracePacketHeaderDef.read(bitBuffer); } /* * Read stream packet context. */ if (getStreamPacketContextDef() != null) { - getStreamPacketContextDef().read(getBitBuffer()); + getStreamPacketContextDef().read(bitBuffer); /* Read CPU ID */ if (this.getCurrentPacket().getTarget() != null) { @@ -305,7 +246,7 @@ public class StreamInputPacketReader implements IDefinitionScope { */ lastTimestamp = currentPacket.getTimestampBegin(); } else { - getBitBuffer().setByteBuffer(null); + bitBuffer.setByteBuffer(null); lastTimestamp = 0; } @@ -318,8 +259,7 @@ public class StreamInputPacketReader implements IDefinitionScope { */ public boolean hasMoreEvents() { if (currentPacket != null) { - return getBitBuffer().position() < currentPacket - .getContentSizeBits(); + return bitBuffer.position() < currentPacket.getContentSizeBits(); } return false; } @@ -338,15 +278,14 @@ public class StreamInputPacketReader implements IDefinitionScope { long timestamp = 0; if (lostEventsInThisPacket > lostSoFar) { - EventDefinition eventDef = EventDeclaration.getLostEventDeclaration().createDefinition( - streamInputReader); + EventDefinition eventDef = EventDeclaration.getLostEventDeclaration().createDefinition(streamInputReader); eventDef.setTimestamp(this.lastTimestamp); ++lostSoFar; return eventDef; } - final StructDefinition sehd = getStreamEventHeaderDef(); - final BitBuffer currentBitBuffer = getBitBuffer(); + final StructDefinition sehd = streamEventHeaderDef; + final BitBuffer currentBitBuffer = bitBuffer; /* Read the stream event header. */ if (sehd != null) { @@ -360,31 +299,32 @@ public class StreamInputPacketReader implements IDefinitionScope { /* Get the timestamp from the event header (may be overridden later on) */ Definition timestampDef = sehd.lookupInteger("timestamp"); //$NON-NLS-1$ + if (timestampDef instanceof IntegerDefinition) { + timestamp = calculateTimestamp((IntegerDefinition) timestampDef); + } // else timestamp remains 0 /* Check for the variant v. */ - VariantDefinition variantDef = (VariantDefinition) sehd.lookupDefinition("v"); //$NON-NLS-1$ - if (variantDef != null) { + Definition variantDef = sehd.lookupDefinition("v"); //$NON-NLS-1$ + if (variantDef instanceof VariantDefinition) { /* Get the variant current field */ - StructDefinition variantCurrentField = (StructDefinition) variantDef.getCurrentField(); + StructDefinition variantCurrentField = (StructDefinition) ((VariantDefinition) variantDef).getCurrentField(); /* * Try to get the id field in the current field of the variant. * If it is present, it overrides the previously read event id. */ - IntegerDefinition idIntegerDef = (IntegerDefinition) variantCurrentField.lookupDefinition("id"); //$NON-NLS-1$ - if (idIntegerDef != null) { - eventID = idIntegerDef.getValue(); + Definition idIntegerDef = variantCurrentField.lookupDefinition("id"); //$NON-NLS-1$ + if (idIntegerDef instanceof IntegerDefinition) { + eventID = ((IntegerDefinition) idIntegerDef).getValue(); } - /* Get the timestamp. */ + /* Get the timestamp. This would overwrite any previous timestamp definition */ timestampDef = variantCurrentField.lookupDefinition("timestamp"); //$NON-NLS-1$ + if (timestampDef instanceof IntegerDefinition) { + timestamp = calculateTimestamp((IntegerDefinition) timestampDef); + } } - - /* Calculate the event timestamp. */ - if (timestampDef instanceof IntegerDefinition) { - timestamp = calculateTimestamp((IntegerDefinition) timestampDef); - } // else timestamp remains 0 } /* Read the stream event context. */ @@ -466,88 +406,4 @@ public class StreamInputPacketReader implements IDefinitionScope { // TODO Auto-generated method stub return null; } - - /** - * Gets the stream event context definition (see CTF specs) - * - * @return the definition of the stream event context (the form not the - * content) - */ - public StructDefinition getStreamEventContextDef() { - return this.streamEventContextDef; - } - - /** - * Sets the stream event context definition - * - * @param streamEventContextDef - * The stream event context definition - */ - public void setStreamEventContextDef(StructDefinition streamEventContextDef) { - this.streamEventContextDef = streamEventContextDef; - } - - /** - * Gets the stream event header definition - * - * @return the stream event header definition - */ - public StructDefinition getStreamEventHeaderDef() { - return this.streamEventHeaderDef; - } - - /** - * Sets the stream event header definition - * - * @param streamEventHeaderDef - * the stream event header definition - */ - public void setStreamEventHeaderDef(StructDefinition streamEventHeaderDef) { - this.streamEventHeaderDef = streamEventHeaderDef; - } - - /** - * Sets the stream packet context definition - * - * @param streamPacketContextDef - * the stream packet context definition - */ - public void setStreamPacketContextDef( - StructDefinition streamPacketContextDef) { - this.streamPacketContextDef = streamPacketContextDef; - } - - /** - * Gets the trace packet header definition - * - * @return the trace packet header definition - */ - public StructDefinition getTracePacketHeaderDef() { - return this.tracePacketHeaderDef; - } - - /** - * Sets the trace packet header definition - * - * @param tracePacketHeaderDef - * the trace packet header definition - */ - public void setTracePacketHeaderDef(StructDefinition tracePacketHeaderDef) { - this.tracePacketHeaderDef = tracePacketHeaderDef; - } - - /** - * @return the parent stream input reader - */ - public StreamInputReader getStreamInputReader() { - return this.streamInputReader; - } - - /** - * - * @return THe bit buffer that reads the file. - */ - public BitBuffer getBitBuffer() { - return bitBuffer; - } } -- 2.34.1