From 4b7c469f8f9fb50de9a2e87f3cc00f6a0465692f Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Tue, 29 May 2012 10:30:07 -0400 Subject: [PATCH] Change CtfTmfTrace to use TmfTrace. Bug 380951 Signed-off-by: Matthew Khouzam --- .../tmf/core/ctfadaptor/CtfTmfTrace.java | 429 ++++-------------- 1 file changed, 94 insertions(+), 335 deletions(-) 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 c5e118e19e..a0cdd85243 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 @@ -9,68 +9,43 @@ * Contributors: Matthew Khouzam - Initial API and implementation *******************************************************************************/ + package org.eclipse.linuxtools.tmf.core.ctfadaptor; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; import org.eclipse.linuxtools.ctf.core.event.EventDeclaration; import org.eclipse.linuxtools.ctf.core.event.EventDefinition; import org.eclipse.linuxtools.ctf.core.trace.CTFReaderException; import org.eclipse.linuxtools.ctf.core.trace.CTFTrace; -import org.eclipse.linuxtools.tmf.core.component.TmfEventProvider; import org.eclipse.linuxtools.tmf.core.ctfadaptor.CtfTmfTimestamp.TimestampType; +import org.eclipse.linuxtools.tmf.core.event.ITmfEvent; import org.eclipse.linuxtools.tmf.core.event.ITmfEventField; -import org.eclipse.linuxtools.tmf.core.event.ITmfTimestamp; -import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange; import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp; import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException; -import org.eclipse.linuxtools.tmf.core.request.ITmfDataRequest; -import org.eclipse.linuxtools.tmf.core.request.ITmfEventRequest; -import org.eclipse.linuxtools.tmf.core.signal.TmfSignal; import org.eclipse.linuxtools.tmf.core.signal.TmfSignalManager; import org.eclipse.linuxtools.tmf.core.statesystem.IStateSystemQuerier; import org.eclipse.linuxtools.tmf.core.trace.ITmfContext; +import org.eclipse.linuxtools.tmf.core.trace.ITmfEventParser; import org.eclipse.linuxtools.tmf.core.trace.ITmfLocation; -import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace; - -/** - */ -public class CtfTmfTrace extends TmfEventProvider implements ITmfTrace { - - // ------------------------------------------------------------------------ - // Constants - // ------------------------------------------------------------------------ - - // ------------------------------------------------------------------------ - // Attributes - // ------------------------------------------------------------------------ - - // the Ctf Trace - private CTFTrace fTrace; - - // The number of events collected - protected long fNbEvents = 0; +import org.eclipse.linuxtools.tmf.core.trace.TmfTrace; - // The time span of the event stream - private ITmfTimestamp fStartTime = TmfTimestamp.BIG_CRUNCH; - private ITmfTimestamp fEndTime = TmfTimestamp.BIG_BANG; +public class CtfTmfTrace extends TmfTrace implements ITmfEventParser{ - // The trace resource - private IResource fResource; + //------------------------------------------- + // Fields + //------------------------------------------- /* Reference to the state system assigned to this trace */ protected IStateSystemQuerier ss = null; - // ------------------------------------------------------------------------ - // Constructors - // ------------------------------------------------------------------------ - - public CtfTmfTrace() { - super(); - } + /* Reference to the CTF Trace */ + private CTFTrace fTrace; + //------------------------------------------- + // TmfTrace Overrides + //------------------------------------------- /** * Method initTrace. * @param resource IResource @@ -82,12 +57,12 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr @Override public void initTrace(final IResource resource, final String path, final Class eventType) throws TmfTraceException { + super.initTrace(resource, path, eventType); EventDeclaration ed; ITmfEventField eventField; @SuppressWarnings("unused") CtfTmfEventType type; - this.fResource = resource; try { this.fTrace = new CTFTrace(path); for( int i =0 ; i< this.fTrace.getNbEventTypes(); i++) { @@ -139,31 +114,6 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr } } - private static ITmfEventField parseDeclaration(EventDeclaration ed) { - EventDefinition eventDef = ed.createDefinition(null); - return new CtfTmfContent(ITmfEventField.ROOT_FIELD_ID, - CtfTmfEvent.parseFields(eventDef)); - } - - /** - * Method dispose. - * @see org.eclipse.linuxtools.tmf.core.component.ITmfComponent#dispose() - */ - @Override - public void dispose() { - TmfSignalManager.deregister(this); - } - - /** - * Method broadcast. - * @param signal TmfSignal - * @see org.eclipse.linuxtools.tmf.core.component.ITmfComponent#broadcast(TmfSignal) - */ - @Override - public void broadcast(final TmfSignal signal) { - TmfSignalManager.dispatchSignal(signal); - } - /** * Method validate. * @param project IProject @@ -172,7 +122,7 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#validate(IProject, String) */ @Override - public boolean validate(final IProject project, final String path) { + public boolean validate(@SuppressWarnings("unused") final IProject project, final String path) { try { final CTFTrace temp = new CTFTrace(path); return temp.majortIsSet(); // random test @@ -182,124 +132,6 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr } } - // ------------------------------------------------------------------------ - // Accessors - // ------------------------------------------------------------------------ - - /** - * Method getEventType. - * @return the trace path - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getEventType() - */ - @Override - public Class getEventType() { - return fType; - } - - /** - * Method getNbEnvVars. - * @return int - */ - public int getNbEnvVars() { - return this.fTrace.getEnvironment().size(); - } - - - /** - * Method getEnvNames. - * @return String[] - */ - public String[] getEnvNames() { - final String[] s = new String[getNbEnvVars()]; - return this.fTrace.getEnvironment().keySet().toArray(s); - } - - /** - * Method getEnvValue. - * @param key String - * @return String - */ - public String getEnvValue(final String key) { - return this.fTrace.getEnvironment().get(key); - } - - - /** - - * @return the trace path * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getPath() - */ - @Override - public String getPath() { - return this.fTrace.getPath(); - } - - /** - * Method getName. - * @return String - * @see org.eclipse.linuxtools.tmf.core.component.ITmfComponent#getName() - */ - @Override - public String getName() { - String traceName = (fResource != null) ? fResource.getName() : null; - // If no resource was provided, extract the display name the trace path - if (traceName == null) { - final String path = this.fTrace.getPath(); - final int sep = path.lastIndexOf(IPath.SEPARATOR); - traceName = (sep >= 0) ? path.substring(sep + 1) : path; - } - return traceName; - } - - /** - * Method getCacheSize. - * @return int - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getCacheSize() - */ - @Override - public int getCacheSize() { - return 50000; // not true, but it works - } - - /** - * Method getNbEvents. - * @return long - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getNbEvents() - */ - @Override - public long getNbEvents() { - return this.fNbEvents; - } - - /** - * Method getTimeRange. - * @return TmfTimeRange - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getTimeRange() - */ - @Override - public TmfTimeRange getTimeRange() { - return new TmfTimeRange(this.fStartTime, this.fEndTime); - } - - /** - * Method getStartTime. - * @return ITmfTimestamp - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getStartTime() - */ - @Override - public ITmfTimestamp getStartTime() { - return this.fStartTime; - } - - /** - * Method getEndTime. - * @return ITmfTimestamp - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getEndTime() - */ - @Override - public ITmfTimestamp getEndTime() { - return this.fEndTime; - } - /** * Method getCurrentLocation. This is not applicable in CTF * @return null, since the trace has no knowledge of the current location @@ -310,81 +142,18 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr return null; } - // ------------------------------------------------------------------------ - // Operators - // ------------------------------------------------------------------------ - - /** - * Method setTimeRange. - * @param range TmfTimeRange - */ - protected void setTimeRange(final TmfTimeRange range) { - this.fStartTime = range.getStartTime(); - this.fEndTime = range.getEndTime(); - } - - /** - * Method setStartTime. - * @param startTime ITmfTimestamp - */ - protected void setStartTime(final ITmfTimestamp startTime) { - this.fStartTime = startTime; - } - - /** - * Method setEndTime. - * @param endTime ITmfTimestamp - */ - protected void setEndTime(final ITmfTimestamp endTime) { - this.fEndTime = endTime; - } - // ------------------------------------------------------------------------ - // TmfProvider - // ------------------------------------------------------------------------ - /** - * Method armRequest. - * @param request ITmfDataRequest - * @return ITmfContext - */ @Override - public ITmfContext armRequest(final ITmfDataRequest request) { - if ((request instanceof ITmfEventRequest) - && !TmfTimestamp.BIG_BANG - .equals(((ITmfEventRequest) request) - .getRange().getStartTime()) - && (request.getIndex() == 0)) { - final ITmfContext context = seekEvent(((ITmfEventRequest) request) - .getRange().getStartTime()); - ((ITmfEventRequest) request) - .setStartIndex((int) context.getRank()); - return context; - } - return seekEvent(request.getIndex()); + public double getLocationRatio(ITmfLocation location) { + final CtfLocation curLocation = (CtfLocation) location; + CtfIterator iterator = new CtfIterator(this); + iterator.seek(curLocation.getLocation()); + return ((double) iterator.getCurrentEvent().getTimestampValue() - iterator + .getStartTime()) + / (iterator.getEndTime() - iterator.getStartTime()); } -// /** -// * The trace reader keeps its own iterator: the "context" parameter here -// * will be ignored. -// * -// * If you wish to specify a new context, instantiate a new CtfIterator and -// * seek() it to where you want, and use that to read events. -// * -// * FIXME merge with getNextEvent below once they both use the same parameter -// * type. -// * @param context ITmfContext -// * @return CtfTmfEvent -// */ -// @Override -// public CtfTmfEvent getNext(final ITmfContext context) { -// return readNextEvent(context); -// } - - // ------------------------------------------------------------------------ - // ITmfTrace - // ------------------------------------------------------------------------ - /** * Method seekEvent. * @param location ITmfLocation @@ -398,7 +167,7 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr currentLocation = new CtfLocation(0L); } CtfIterator context = new CtfIterator(this); - + if (currentLocation.getLocation() == CtfLocation.INVALID_LOCATION) { ((CtfTmfTimestamp) getEndTime()).setType(TimestampType.NANOS); currentLocation.setLocation(getEndTime().getValue() + 1); @@ -408,70 +177,11 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr return context; } - /** - * Method getLocationRatio. - * @param location ITmfLocation - * @return double - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getLocationRatio(ITmfLocation) - */ - @Override - public double getLocationRatio(final ITmfLocation location) { - final CtfLocation curLocation = (CtfLocation) location; - CtfIterator iterator = new CtfIterator(this); - iterator.seek(curLocation.getLocation()); - return ((double) iterator.getCurrentEvent().getTimestampValue() - iterator - .getStartTime()) - / (iterator.getEndTime() - iterator.getStartTime()); - } - /** - * Method getStreamingInterval. - * @return long - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getStreamingInterval() - */ - @Override - public long getStreamingInterval() { - return 0; - } - - /** - * Method seekEvent. - * @param timestamp ITmfTimestamp - * @return ITmfContext - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#seekEvent(ITmfTimestamp) - */ - @Override - public ITmfContext seekEvent(final ITmfTimestamp timestamp) { - CtfIterator context = new CtfIterator(this); - context.seek(timestamp.getValue()); - context.setRank(ITmfContext.UNKNOWN_RANK); - return context; - } - - /** - * Seek by rank - * @param rank long - * @return ITmfContext - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#seekEvent(long) - */ @Override - public ITmfContext seekEvent(final long rank) { + public ITmfContext seekEvent(double ratio) { CtfIterator context = new CtfIterator(this); - context.seekRank(rank); - context.setRank(rank); - return context; - } - - /** - * Seek rank ratio - * @param ratio double - * @return ITmfContext - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#seekEvent(double) - */ - @Override - public ITmfContext seekEvent(final double ratio) { - CtfIterator context = new CtfIterator(this); - context.seek((long) (this.fNbEvents * ratio)); + context.seek((long) (this.getNbEvents() * ratio)); context.setRank(ITmfContext.UNKNOWN_RANK); return context; } @@ -483,7 +193,7 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getNext(ITmfContext) */ @Override - public CtfTmfEvent getNext(final ITmfContext context) { + public synchronized CtfTmfEvent getNext(final ITmfContext context) { CtfTmfEvent event = null; if (context instanceof CtfIterator) { CtfIterator ctfIterator = (CtfIterator) context; @@ -494,17 +204,22 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr } /** - * Method getResource. - * @return IResource - * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getResource() + * Suppressing the warning, because the 'throws' will usually happen in + * sub-classes. + * @throws TmfTraceException */ - @Override - public IResource getResource() { - return this.fResource; + @SuppressWarnings({ "static-method", "unused" }) + protected void buildStateSystem() throws TmfTraceException { + /* + * Nothing is done in the basic implementation, please specify + * how/if to build a state system in derived classes. + */ + return; } /** * Method getStateSystem. + * * @return IStateSystemQuerier */ public IStateSystemQuerier getStateSystem() { @@ -512,26 +227,70 @@ public class CtfTmfTrace extends TmfEventProvider implements ITmfTr } /** - * Method getCTFTrace. - * @return CTFTrace + * + * @param ed + * @return */ - CTFTrace getCTFTrace() { + private static ITmfEventField parseDeclaration(EventDeclaration ed) { + EventDefinition eventDef = ed.createDefinition(null); + return new CtfTmfContent(ITmfEventField.ROOT_FIELD_ID, + CtfTmfEvent.parseFields(eventDef)); + } + + /** + * gets the CTFtrace that this is wrapping + * @return the CTF trace + */ + public CTFTrace getCTFTrace() { return fTrace; } + //------------------------------------------- + // Environment Parameters + //------------------------------------------- /** - * Suppressing the warning, because the 'throws' will usually happen in - * sub-classes. - * @throws TmfTraceException + * Method getNbEnvVars. + * + * @return int */ - @SuppressWarnings("static-method") - protected void buildStateSystem() throws TmfTraceException { - /* - * Nothing is done in the basic implementation, please specify - * how/if to build a state system in derived classes. - */ - return; + public int getNbEnvVars() { + return this.fTrace.getEnvironment().size(); + } + + /** + * Method getEnvNames. + * + * @return String[] + */ + public String[] getEnvNames() { + final String[] s = new String[getNbEnvVars()]; + return this.fTrace.getEnvironment().keySet().toArray(s); + } + + /** + * Method getEnvValue. + * + * @param key + * String + * @return String + */ + public String getEnvValue(final String key) { + return this.fTrace.getEnvironment().get(key); + } + + //------------------------------------------- + // Parser + //------------------------------------------- + + @Override + public ITmfEvent parseEvent(ITmfContext context) { + CtfTmfEvent event = null; + if( context instanceof CtfIterator ){ + CtfIterator itt = (CtfIterator) context; + event = itt.getCurrentEvent(); + } + return event; } } -- 2.34.1