/*******************************************************************************
- * Copyright (c) 2015 Ericsson
+ * Copyright (c) 2015, 2016 Ericsson
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
import org.eclipse.tracecompass.segmentstore.core.ISegmentStore;
import org.eclipse.tracecompass.segmentstore.core.treemap.TreeMapStore;
import org.eclipse.tracecompass.tmf.core.analysis.TmfAbstractAnalysisModule;
-import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
-import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest;
-import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest;
import org.eclipse.tracecompass.tmf.core.segment.ISegmentAspect;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
private @Nullable ISegmentStore<ISegment> fSegmentStore;
- private @Nullable ITmfEventRequest fOngoingRequest = null;
-
@Override
public void addListener(IAnalysisProgressListener listener) {
fListeners.add(listener);
return null;
}
- /**
- * Returns the analysis request for creating the segment store
- *
- * @param segmentStore
- * a segment store to fill
- * @return the segment store analysis request implementation
- */
- protected abstract AbstractSegmentStoreAnalysisRequest createAnalysisRequest(ISegmentStore<ISegment> segmentStore);
-
/**
* Read an object from the ObjectInputStream.
*
*/
protected abstract Object[] readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException;
+ /**
+ * Fills the segment store. This is the main method that children classes
+ * need to implement to build the segment store. For example, if the
+ * segments are found by parsing the events of a trace, the event request
+ * would be done in this method.
+ *
+ * @param segmentStore
+ * The segment store to fill
+ * @param monitor
+ * Progress monitor
+ * @return Whether the segments was resolved successfully or not
+ * @throws TmfAnalysisException
+ * Method may throw an analysis exception
+ */
+ protected abstract boolean buildAnalysisSegments(ISegmentStore<ISegment> segmentStore, IProgressMonitor monitor) throws TmfAnalysisException;
+
@Override
public @Nullable ISegmentStore<ISegment> getSegmentStore() {
return fSegmentStore;
}
- @Override
- protected void canceling() {
- ITmfEventRequest req = fOngoingRequest;
- if ((req != null) && (!req.isCompleted())) {
- req.cancel();
- }
- }
-
@Override
public void dispose() {
super.dispose();
}
}
}
- ISegmentStore<ISegment> segmentStore = new TreeMapStore<>();
-
- /* Cancel an ongoing request */
- ITmfEventRequest req = fOngoingRequest;
- if ((req != null) && (!req.isCompleted())) {
- req.cancel();
- }
-
- /* Create a new request */
- req = createAnalysisRequest(segmentStore);
- fOngoingRequest = req;
- trace.sendRequest(req);
- try {
- req.waitForCompletion();
- } catch (InterruptedException e) {
- }
-
- /* Do not process the results if the request was cancelled */
- if (req.isCancelled() || req.isFailed()) {
+ ISegmentStore<ISegment> segmentStore = new TreeMapStore<>();
+ boolean completed = buildAnalysisSegments(segmentStore, monitor);
+ if (!completed) {
return false;
}
-
- /* The request will fill 'syscalls' */
fSegmentStore = segmentStore;
if (dataFileName != null) {
return true;
}
-
- /**
- * Abstract event request to fill a a segment store
- */
- protected static abstract class AbstractSegmentStoreAnalysisRequest extends TmfEventRequest {
-
- private final ISegmentStore<ISegment> fFullLatencyStore;
-
- /**
- * Constructor
- *
- * @param latencyStore
- * a latency segment store to fill
- */
- public AbstractSegmentStoreAnalysisRequest(ISegmentStore<ISegment> latencyStore) {
- super(ITmfEvent.class, 0, ITmfEventRequest.ALL_DATA, ExecutionType.BACKGROUND);
- /*
- * We do NOT make a copy here! We want to modify the list that was
- * passed in parameter.
- */
- fFullLatencyStore = latencyStore;
- }
-
- /**
- * Returns the segment store
- *
- * @return the segment store
- */
- public ISegmentStore<ISegment> getSegmentStore() {
- return fFullLatencyStore;
- }
- }
}
\ No newline at end of file