From 1a096cc5f2cf480051451a863084ce53395e7ba0 Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Tue, 3 Apr 2012 17:41:06 -0400 Subject: [PATCH] Add support in the UI for LTTng 2.0. signed-off by: YEAH BABY --- .../ctf/core/trace/CTFTraceReader.java | 58 +++++++++++-------- .../ctf/core/trace/StreamInput.java | 1 + .../trace/StreamInputPacketIndexEntry.java | 4 +- .../linuxtools/internal/tmf/core/Tracer.java | 6 +- .../tmf/core/ctfadaptor/CtfTmfEvent.java | 36 +++++++----- .../tmf/core/ctfadaptor/CtfTmfTrace.java | 5 +- .../tmf/core/filter/model/TmfFilterNode.java | 15 +++-- .../core/filter/model/TmfFilterTreeNode.java | 16 ++--- .../tmf/ui/viewers/events/TmfEventsTable.java | 2 +- 9 files changed, 83 insertions(+), 60 deletions(-) diff --git a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/CTFTraceReader.java b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/CTFTraceReader.java index 5ebf5cc76f..791cc3fdc5 100644 --- a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/CTFTraceReader.java +++ b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/CTFTraceReader.java @@ -238,7 +238,21 @@ public class CTFTraceReader { if (top == null) { return false; } - + /* + * index if needed + */ + if (hasMoreEvents()) { + StreamInputPacketReader packetReader = top.getPacketReader(); + boolean packetHasMoreEvents = packetReader.hasMoreEvents(); + StreamInputPacketIndexEntry currentPacket = packetReader + .getCurrentPacket(); + if (!packetHasMoreEvents) { + int n = this.streamInputReaders.indexOf(top); + currentPacket.setIndexBegin(startIndex[n]); + currentPacket.setIndexEnd(index); + startIndex[n] = index + 1; + } + } /* * Read the next event of this reader. */ @@ -250,28 +264,18 @@ public class CTFTraceReader { final long topEnd = top.getCurrentEvent().timestamp; this.endTime = Math.max(topEnd, this.endTime); this.eventCountPerTraceFile[top.getName()]++; - } - if (hasMoreEvents()) { /* * increment the index */ index++; - StreamInputPacketReader packetReader = top.getPacketReader(); - - if (packetReader.hasMoreEvents() == false) { - int n = this.streamInputReaders.indexOf(top); - StreamInputPacketIndexEntry currentPacket = packetReader - .getCurrentPacket(); - currentPacket.setIndexBegin(startIndex[n]); - currentPacket.setIndexEnd(index); - startIndex[n] = index + 1; - } } + boolean hasMoreEvents = hasMoreEvents(); + /* * If there is no reader in the queue, it means the trace reader reached * the end of the trace. */ - return hasMoreEvents(); + return hasMoreEvents; } /** @@ -352,8 +356,8 @@ public class CTFTraceReader { } } catch (CTFReaderException e) { /* - * Important, if it failed, it's because it's not yet indexed, - * so we have to manually advance to the right value. + * Important, if it failed, it's because it's not yet indexed, so we + * have to manually advance to the right value. */ for (StreamInputReader streamInputReader : this.streamInputReaders) { /* @@ -372,16 +376,22 @@ public class CTFTraceReader { this.prio.add(streamInputReader); } } - /* - * advance for offset - */ - while ((prio.peek().getCurrentEvent().timestamp < tempTimestamp) - && hasMoreEvents()) { - this.advance(); + if (tempIndex == Long.MAX_VALUE) { + tempIndex = 0; } long pos = tempIndex; - for (pos = tempIndex; (pos < index) && hasMoreEvents(); pos++) { - this.advance(); + if (index > tempIndex) { + /* + * advance for offset + */ + while ((prio.peek().getCurrentEvent().timestamp < tempTimestamp) + && hasMoreEvents()) { + this.advance(); + } + + for (pos = tempIndex; (pos < index) && hasMoreEvents(); pos++) { + this.advance(); + } } this.index = pos; return hasMoreEvents(); diff --git a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInput.java b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInput.java index 878e8ec302..23ad52dc43 100644 --- a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInput.java +++ b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInput.java @@ -357,6 +357,7 @@ public class StreamInput implements IDefinitionScope { packetOffsetBytes += (packetIndex.getPacketSizeBits() + 7) / 8; } + index.getEntries().get(0).setIndexBegin(0L); } } diff --git a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketIndexEntry.java b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketIndexEntry.java index 12672a75e3..10cfdc2d3a 100644 --- a/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketIndexEntry.java +++ b/org.eclipse.linuxtools.ctf.core/src/org/eclipse/linuxtools/ctf/core/trace/StreamInputPacketIndexEntry.java @@ -56,9 +56,9 @@ public class StreamInputPacketIndexEntry { private long timestampEnd = 0; - private long indexBegin = -1; + private long indexBegin = Long.MAX_VALUE; - private long indexEnd = -1; + private long indexEnd = Long.MAX_VALUE; // ------------------------------------------------------------------------ // Constructors diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Tracer.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Tracer.java index 8d1404d193..3262e502f7 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Tracer.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Tracer.java @@ -3,6 +3,7 @@ package org.eclipse.linuxtools.internal.tmf.core; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; +import java.io.OutputStreamWriter; import org.eclipse.core.runtime.Platform; import org.eclipse.linuxtools.tmf.core.component.ITmfComponent; @@ -27,7 +28,7 @@ public class Tracer { static Boolean EVENT = Boolean.FALSE; private static String LOGNAME = "trace.log"; - private static BufferedWriter fTraceLog = null; + private static BufferedWriter fTraceLog = new BufferedWriter(new OutputStreamWriter(System.out)); private static BufferedWriter openLogFile(String filename) { BufferedWriter outfile = null; @@ -93,8 +94,9 @@ public class Tracer { } public static void stop() { - if (fTraceLog == null) + if (fTraceLog == null) { return; + } try { fTraceLog.close(); diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfEvent.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfEvent.java index 85ee867e79..8ca36fe46c 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfEvent.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfEvent.java @@ -20,12 +20,11 @@ import org.eclipse.linuxtools.ctf.core.event.EventDefinition; import org.eclipse.linuxtools.ctf.core.event.types.Definition; import org.eclipse.linuxtools.ctf.core.event.types.StructDefinition; import org.eclipse.linuxtools.ctf.core.trace.StreamInputReader; +import org.eclipse.linuxtools.internal.tmf.core.TmfCorePlugin; import org.eclipse.linuxtools.tmf.core.event.ITmfEvent; import org.eclipse.linuxtools.tmf.core.event.ITmfEventField; import org.eclipse.linuxtools.tmf.core.event.ITmfEventType; import org.eclipse.linuxtools.tmf.core.event.ITmfTimestamp; -import org.eclipse.linuxtools.tmf.core.event.TmfEventField; -import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp; /** * CTFEvent @@ -41,6 +40,7 @@ public final class CtfTmfEvent implements ITmfEvent { private static final String NO_STREAM = "No stream"; //$NON-NLS-1$ private static final String EMPTY_CTF_EVENT_NAME = "Empty CTF event"; //$NON-NLS-1$ + private static final String CONTEXT_ID = "Ctf Event"; //$NON-NLS-1$ // ------------------------------------------------------------------------ // Attributes @@ -53,7 +53,7 @@ public final class CtfTmfEvent implements ITmfEvent { private final String eventName; private final String fileName; - private final TmfEventField fContent; + private final CtfTmfContent fContent; // ------------------------------------------------------------------------ // Constructors @@ -91,7 +91,7 @@ public final class CtfTmfEvent implements ITmfEvent { this.fileName = top.getStreamInput().getFilename(); /* Read the fields */ - this.fContent = new TmfEventField(ITmfEventField.ROOT_FIELD_ID, + this.fContent = new CtfTmfContent(ITmfEventField.ROOT_FIELD_ID, parseFields(eventDef)); } @@ -143,14 +143,14 @@ public final class CtfTmfEvent implements ITmfEvent { this.fileName = other.fileName; /* Copy the fields over */ - this.fContent = other.fContent.clone(); + this.fContent = (CtfTmfContent) other.fContent.clone(); } /** * Inner constructor to create "null" events. Don't use this directly, use * CTFEvent.getNullEvent(); */ - private CtfTmfEvent() { + public CtfTmfEvent() { this.fTrace = null; this.timestamp = -1; this.sourceCPU = -1; @@ -243,21 +243,28 @@ public final class CtfTmfEvent implements ITmfEvent { @Override public ITmfTimestamp getTimestamp() { if (fTimestamp == null) { - fTimestamp = new TmfTimestamp(timestamp); + fTimestamp = new CtfTmfTimestamp(timestamp, fTrace); } return fTimestamp; } + String fSource = null; @Override public String getSource() { - // TODO Returns eventName for now - return eventName; + // TODO Returns CPU for now + if(fSource == null) { + fSource= Integer.toString(getCPU()); + } + return fSource; } + private CtfTmfEventType type = null; @Override public ITmfEventType getType() { - // TODO Auto-generated method stub - return null; + if(type == null){ + type = new CtfTmfEventType(CONTEXT_ID, eventName, fContent); + } + return type; } @Override @@ -265,10 +272,13 @@ public final class CtfTmfEvent implements ITmfEvent { return fContent; } + String fReference = null; @Override public String getReference() { - // TODO Auto-generated method stub - return null; + if( fReference == null){ + fReference = getChannelName(); + } + return fReference; } @Override diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java index 418cc38f01..ffcb77cb53 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java @@ -83,8 +83,6 @@ public class CtfTmfTrace extends TmfEventProvider implements // this.fEndTime.clone())); } - - @Override public void indexTrace(boolean waitForCompletion) { } @@ -237,6 +235,9 @@ public class CtfTmfTrace extends TmfEventProvider implements @Override public ITmfContext seekLocation(ITmfLocation location) { + if (location == null) { + location = new CtfLocation(0L); + } iterator.setLocation(location); return iterator; } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java index a3dc3a1a9e..3aac38af92 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java @@ -1,11 +1,11 @@ /******************************************************************************* * Copyright (c) 2010 Ericsson - * + * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * Patrick Tasse - Initial API and implementation *******************************************************************************/ @@ -19,12 +19,12 @@ import org.eclipse.linuxtools.tmf.core.event.ITmfEvent; public class TmfFilterNode extends TmfFilterTreeNode { - + public static final String NODE_NAME = "FILTER"; //$NON-NLS-1$ public static final String NAME_ATTR = "name"; //$NON-NLS-1$ - + String fFilterName; - + public TmfFilterNode(String filterName) { super(null); fFilterName = filterName; @@ -63,9 +63,8 @@ public class TmfFilterNode extends TmfFilterTreeNode { public List getValidChildren() { if (getChildrenCount() == 0) { return super.getValidChildren(); - } else { - return new ArrayList(0); // only one child allowed } + return new ArrayList(0); // only one child allowed } @Override @@ -77,7 +76,7 @@ public class TmfFilterNode extends TmfFilterTreeNode { for (int i = 0; i < getChildrenCount(); i++) { ITmfFilterTreeNode node = getChildren()[i]; buf.append(node.toString()); - if (i < getChildrenCount() - 1) { + if (i < (getChildrenCount() - 1)) { buf.append(" and "); //$NON-NLS-1$ } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java index 52c5bb85de..9c6536bd55 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java @@ -1,11 +1,11 @@ /******************************************************************************* * Copyright (c) 2010 Ericsson - * + * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * Yuriy Vashchuk (yvashchuk@gmail.com) - Initial API and implementation * Patrick Tasse - Refactoring @@ -27,7 +27,7 @@ import org.eclipse.linuxtools.tmf.core.event.ITmfEventField; *

*/ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable { - + private static final String[] VALID_CHILDREN = { TmfFilterEventTypeNode.NODE_NAME, TmfFilterAndNode.NODE_NAME, @@ -37,7 +37,7 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable TmfFilterMatchesNode.NODE_NAME, TmfFilterCompareNode.NODE_NAME }; - + private ITmfFilterTreeNode parent = null; private ArrayList children = new ArrayList(); @@ -46,7 +46,7 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable parent.addChild(this); } } - + /* (non-Javadoc) * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getParent() */ @@ -144,7 +144,7 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable this.parent = parent; } - + /* (non-Javadoc) * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#matches(org.eclipse.linuxtools.tmf.event.TmfEvent) */ @@ -166,7 +166,7 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable value = event.getType().getName(); } else if (ITmfEvent.EVENT_FIELD_TIMESTAMP.equals(field)) { - value = ((Long) event.getTimestamp().getValue()).toString(); + value = event.getTimestamp().toString(); } else if (ITmfEvent.EVENT_FIELD_SOURCE.equals(field)) { value = event.getSource(); @@ -182,7 +182,7 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable /* (non-Javadoc) * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getValidChildren() - * + * * By default, all node types are valid children. Override if different. */ @Override diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java index c5dbf743b5..f1a613c3a4 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java @@ -1383,7 +1383,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS protected ITmfEventField[] extractItemFields(ITmfEvent event) { ITmfEventField[] fields = new TmfEventField[0]; if (event != null) { - String timestamp = ((Long) event.getTimestamp().getValue()).toString(); + String timestamp = event.getTimestamp().toString(); String source = event.getSource(); String type = event.getType().getName(); String reference = event.getReference(); -- 2.34.1