package org.eclipse.tracecompass.tmf.core.trace;
-import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
-
import java.io.File;
import java.util.Collection;
import java.util.Collections;
import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager;
import org.eclipse.tracecompass.tmf.core.component.TmfEventProvider;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
+import org.eclipse.tracecompass.tmf.core.event.ITmfLostEvent;
+import org.eclipse.tracecompass.tmf.core.event.TmfEvent;
+import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.synchronization.ITmfTimestampTransform;
import org.eclipse.tracecompass.tmf.core.synchronization.TimestampTransformFactory;
import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
-import org.eclipse.tracecompass.tmf.core.timestamp.TmfNanoTimestamp;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.indexer.ITmfTraceIndexer;
import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Multimap;
/**
* Abstract implementation of ITmfTrace.
/**
* Basic aspects that should be valid for all trace types.
*/
- public static final @NonNull Collection<ITmfEventAspect> BASE_ASPECTS =
- checkNotNull(ImmutableList.of(
- ITmfEventAspect.BaseAspects.TIMESTAMP,
- ITmfEventAspect.BaseAspects.EVENT_TYPE,
- ITmfEventAspect.BaseAspects.CONTENTS
- ));
+ public static final @NonNull Collection<@NonNull ITmfEventAspect<?>> BASE_ASPECTS =
+ ImmutableList.of(
+ TmfBaseAspects.getTimestampAspect(),
+ TmfBaseAspects.getEventTypeAspect(),
+ TmfBaseAspects.getContentsAspect()
+ );
// ------------------------------------------------------------------------
// Instance attributes
protected IStatus executeAnalysis() {
MultiStatus status = new MultiStatus(Activator.PLUGIN_ID, IStatus.OK, null, null);
- Multimap<String, IAnalysisModuleHelper> modules = TmfAnalysisManager.getAnalysisModules();
+ /* First modules are initialized */
+ Map<String, IAnalysisModuleHelper> modules = TmfAnalysisManager.getAnalysisModules(this.getClass());
for (IAnalysisModuleHelper helper : modules.values()) {
try {
IAnalysisModule module = helper.newModule(this);
continue;
}
fAnalysisModules.put(module.getId(), module);
- if (module.isAutomatic()) {
- status.add(module.schedule());
- }
} catch (TmfAnalysisException e) {
status.add(new Status(IStatus.WARNING, Activator.PLUGIN_ID, e.getMessage()));
}
}
+
+ /* Once all modules are initialized, automatic modules are executed */
+ for (IAnalysisModule module : getAnalysisModules()) {
+ if (module.isAutomatic()) {
+ status.add(module.schedule());
+ }
+ }
return status;
}
}
@Override
- public Iterable<ITmfEventAspect> getEventAspects() {
+ public Iterable<ITmfEventAspect<?>> getEventAspects() {
/* By default we provide only the base aspects valid for all trace types */
return BASE_ASPECTS;
}
// ITmfTrace - Basic getters
// ------------------------------------------------------------------------
- @Override
- public Class<? extends ITmfEvent> getEventType() {
- return super.getType();
- }
-
@Override
public IResource getResource() {
return fResource;
@Override
public ITmfTimestamp getInitialRangeOffset() {
final long DEFAULT_INITIAL_OFFSET_VALUE = (1L * 100 * 1000 * 1000); // .1sec
- return new TmfTimestamp(DEFAULT_INITIAL_OFFSET_VALUE, ITmfTimestamp.NANOSECOND_SCALE);
+ return TmfTimestamp.fromNanos(DEFAULT_INITIAL_OFFSET_VALUE);
}
@Override
// parseEvent() does not update the context
final ITmfEvent event = parseEvent(context);
if (event != null) {
- ITmfTimestamp timestamp = event.getTimestamp();
- updateAttributes(context, timestamp);
+ updateAttributes(context, event);
context.setLocation(getCurrentLocation());
context.increaseRank();
}
*
* @param context the current trace context
* @param timestamp the corresponding timestamp
+ * @deprecated Use {@link #updateAttributes(ITmfContext, ITmfEvent)}
*/
+ @Deprecated
protected synchronized void updateAttributes(final ITmfContext context, final @NonNull ITmfTimestamp timestamp) {
+ updateAttributes(context, new TmfEvent(this, context.getRank(), timestamp, null, null));
+ }
+
+ /**
+ * Update the trace attributes
+ *
+ * @param context the current trace context
+ * @param event the corresponding event
+ * @since 1.1
+ */
+ protected synchronized void updateAttributes(final ITmfContext context, final @NonNull ITmfEvent event) {
+ ITmfTimestamp timestamp = event.getTimestamp();
+ ITmfTimestamp endTime = timestamp;
+ if (event instanceof ITmfLostEvent) {
+ endTime = ((ITmfLostEvent) event).getTimeRange().getEndTime();
+ }
if (fStartTime.equals(TmfTimestamp.BIG_BANG) || (fStartTime.compareTo(timestamp) > 0)) {
fStartTime = timestamp;
}
- if (fEndTime.equals(TmfTimestamp.BIG_CRUNCH) || (fEndTime.compareTo(timestamp) < 0)) {
- fEndTime = timestamp;
+ if (fEndTime.equals(TmfTimestamp.BIG_CRUNCH) || (fEndTime.compareTo(endTime) < 0)) {
+ fEndTime = endTime;
}
if (context.hasValidRank()) {
long rank = context.getRank();
@Override
public @NonNull ITmfTimestamp createTimestamp(long ts) {
- return new TmfNanoTimestamp(getTimestampTransform().transform(ts));
+ return TmfTimestamp.fromNanos(getTimestampTransform().transform(ts));
}
// ------------------------------------------------------------------------