import org.eclipse.linuxtools.lttng.tracecontrol.model.config.TraceConfig;
import org.eclipse.linuxtools.lttng.tracecontrol.service.ILttControllerService;
import org.eclipse.linuxtools.lttng.ui.LTTngUiPlugin;
-import org.eclipse.linuxtools.lttng.ui.tracecontrol.TraceControlConstants;
import org.eclipse.linuxtools.lttng.ui.tracecontrol.Messages;
+import org.eclipse.linuxtools.lttng.ui.tracecontrol.TraceControlConstants;
import org.eclipse.linuxtools.lttng.ui.tracecontrol.dialogs.NewTraceDialog;
import org.eclipse.linuxtools.lttng.ui.tracecontrol.subsystems.TraceSubSystem;
import org.eclipse.rse.core.events.ISystemRemoteChangeEvents;
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
-
- private List<TargetResource> fSelectedFiles;
+
+ private final List<TargetResource> fSelectedFiles;
// ------------------------------------------------------------------------
// Constructors
* Constructor for CreateNewTrace.
*/
public CreateNewTrace() {
- fSelectedFiles= new ArrayList<TargetResource>();
+ fSelectedFiles = new ArrayList<TargetResource>();
}
// ------------------------------------------------------------------------
/*
* (non-Javadoc)
- * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+ *
+ * @see
+ * org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.
+ * action.IAction, org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
*/
protected TargetResource getFirstSelectedTarget() {
if (fSelectedFiles.size() > 0) {
- return (TargetResource) fSelectedFiles.get(0);
+ return fSelectedFiles.get(0);
}
return null;
}
/*
* (non-Javadoc)
+ *
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
@Override
public void run(IAction action) {
Shell shell = getShell();
final TargetResource targetResource = getFirstSelectedTarget();
- TraceSubSystem subSystem = (TraceSubSystem)targetResource.getSubSystem();
+ TraceSubSystem subSystem = (TraceSubSystem) targetResource.getSubSystem();
NewTraceDialog dialog = new NewTraceDialog(shell, subSystem, targetResource);
-
+
final TraceConfig traceConfig = dialog.open();
if (traceConfig == null) {
trace.setName(traceConfig.getTraceName());
trace.setParent(targetResource);
trace.setTraceConfig(traceConfig);
-
+
if (targetResource.isUst()) {
boolean ok = setupUstLocation(service, targetResource, traceConfig);
if (!ok) {
return;
}
}
-
+
trace.setupTrace();
if (!targetResource.isUst()) {
// Enable all channels by default
trace.setChannelEnable(TraceControlConstants.Lttng_Control_AllChannels, true);
- // Set overwrite mode for all channels according to user selection (true for flight recorder, false for normal)
+ // Set overwrite mode for all channels according to user
+ // selection (true for flight recorder, false for normal)
trace.setChannelOverwrite(TraceControlConstants.Lttng_Control_AllChannels, traceConfig.getMode() == TraceConfig.FLIGHT_RECORDER_MODE);
// Set channel timer for all channels
- final long period = 5000;
+ final long period = 1000;
trace.setChannelTimer(TraceControlConstants.Lttng_Control_AllChannels, period);
// Set subbuffer size for all channels
- final long subbufSize = 16384;
+ final long subbufSize = 16384;
trace.setChannelSubbufSize(TraceControlConstants.Lttng_Control_AllChannels, subbufSize);
// Set number of subbuffers for all channels
}
}
}
-
+
if (trace.isUst()) {
// in UST the tracing is started after setupTrace!!
trace.setTraceState(TraceState.STARTED);
- }
- else {
+ } else {
trace.setTraceState(TraceState.CONFIGURED);
}
-
+
targetResource.addTrace(trace);
ISystemRegistry registry = SystemStartHere.getSystemRegistry();
registry.fireRemoteResourceChangeEvent(ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, trace, targetResource, subSystem, null);
-
+
} catch (Exception e) {
SystemMessageException sysExp;
if (e instanceof SystemMessageException) {
- sysExp = (SystemMessageException)e;
+ sysExp = (SystemMessageException) e;
} else {
- sysExp = new SystemMessageException(LTTngUiPlugin.getDefault().getMessage(e));
+ sysExp = new SystemMessageException(LTTngUiPlugin.getDefault().getMessage(e));
}
- SystemBasePlugin.logError(Messages.Lttng_Control_ErrorNewTrace + " (" + //$NON-NLS-1$
- Messages.Lttng_Resource_Trace + ": " + traceConfig.getTraceName() + ")", sysExp); //$NON-NLS-1$ //$NON-NLS-2$
+ SystemBasePlugin.logError(Messages.Lttng_Control_ErrorNewTrace + " (" + //$NON-NLS-1$
+ Messages.Lttng_Resource_Trace + ": " + traceConfig.getTraceName() + ")", sysExp); //$NON-NLS-1$ //$NON-NLS-2$
return;
}
/*
* (non-Javadoc)
- * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+ *
+ * @see
+ * org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action
+ * .IAction, org.eclipse.jface.viewers.ISelection)
*/
@Override
@SuppressWarnings("unchecked")
while (theSet.hasNext()) {
Object obj = theSet.next();
if (obj instanceof TargetResource) {
- fSelectedFiles.add((TargetResource)obj);
+ fSelectedFiles.add((TargetResource) obj);
}
}
}
protected Shell getShell() {
return SystemBasePlugin.getActiveWorkbenchShell();
}
-
+
/*
* (non-Javadoc)
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
+ *
+ * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.
+ * IWorkbenchWindow)
*/
@Override
public void init(IWorkbenchWindow window) {
/*
* (non-Javadoc)
+ *
* @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
*/
@Override
/*
* (non-Javadoc)
+ *
* @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
*/
@Override
public void init(IViewPart view) {
}
-
+
/*
* Setup the trace location for UST.
- */
- private boolean setupUstLocation(final ILttControllerService service, final TargetResource targetResource, final TraceConfig traceConfig) throws Exception {
+ */
+ private boolean setupUstLocation(final ILttControllerService service, final TargetResource targetResource, final TraceConfig traceConfig)
+ throws Exception {
if (traceConfig.isNetworkTrace()) {
File localDir = new File(traceConfig.getTracePath());
if (!localDir.exists()) {
public void run() {
// Setup trace location using Lttng controller service proxy
- service.writeTraceNetwork(targetResource.getParent().getName(),
- targetResource.getName(),
- traceConfig.getTraceName(),
- traceConfig.getNumChannel(),
- traceConfig.getIsAppend(),
- traceConfig.getMode() == TraceConfig.FLIGHT_RECORDER_MODE,
- traceConfig.getMode() == TraceConfig.NORMAL_MODE,
- new ILttControllerService.DoneWriteTraceNetwork() {
-
- @Override
- public void doneWriteTraceNetwork(IToken token, Exception error, Object str) {
- if (error != null) {
- // Notify with error
- error(error);
- return;
- }
-
- // Notify about success
- done(true);
- }
- });
- }}.get(TraceControlConstants.DEFAULT_TCF_TASK_TIMEOUT, TimeUnit.SECONDS);
+ service.writeTraceNetwork(targetResource.getParent().getName(), targetResource.getName(), traceConfig.getTraceName(),
+ traceConfig.getNumChannel(), traceConfig.getIsAppend(), traceConfig.getMode() == TraceConfig.FLIGHT_RECORDER_MODE,
+ traceConfig.getMode() == TraceConfig.NORMAL_MODE, new ILttControllerService.DoneWriteTraceNetwork() {
+
+ @Override
+ public void doneWriteTraceNetwork(IToken token, Exception error, Object str) {
+ if (error != null) {
+ // Notify with error
+ error(error);
+ return;
+ }
+
+ // Notify about success
+ done(true);
+ }
+ });
+ }
+ }.get(TraceControlConstants.DEFAULT_TCF_TASK_TIMEOUT, TimeUnit.SECONDS);
return ok;
} else {
// Create future task
public void run() {
// Setup trace location using Lttng controller service proxy
- service.writeTraceLocal(targetResource.getParent().getName(),
- targetResource.getName(),
- traceConfig.getTraceName(),
- traceConfig.getTracePath(),
- traceConfig.getNumChannel(),
- traceConfig.getIsAppend(),
- traceConfig.getMode() == TraceConfig.NORMAL_MODE,
- traceConfig.getMode() == TraceConfig.FLIGHT_RECORDER_MODE,
+ service.writeTraceLocal(targetResource.getParent().getName(), targetResource.getName(), traceConfig.getTraceName(),
+ traceConfig.getTracePath(), traceConfig.getNumChannel(), traceConfig.getIsAppend(),
+ traceConfig.getMode() == TraceConfig.NORMAL_MODE, traceConfig.getMode() == TraceConfig.FLIGHT_RECORDER_MODE,
new ILttControllerService.DoneWriteTraceLocal() {
- @Override
- public void doneWriteTraceLocal(IToken token, Exception error, Object str) {
- if (error != null) {
- // Notify with error
- error(error);
- return;
- }
-
- // Notify about success
- done(true);
- }
- });
- }}.get(TraceControlConstants.DEFAULT_TCF_TASK_TIMEOUT, TimeUnit.SECONDS);
+ @Override
+ public void doneWriteTraceLocal(IToken token, Exception error, Object str) {
+ if (error != null) {
+ // Notify with error
+ error(error);
+ return;
+ }
+
+ // Notify about success
+ done(true);
+ }
+ });
+ }
+ }.get(TraceControlConstants.DEFAULT_TCF_TASK_TIMEOUT, TimeUnit.SECONDS);
return ok;
}
}
fDataModel.countEvent(timestamp);
if (fDataModel.getNbEvents() % REFRESH_FREQUENCY == 0) {
refresh();
- refresh();
+ refresh(); // This is intentional. Exercise left to the reader :-)
}
}
* @param timestamp
*/
public void setCurrentEvent(long timestamp) {
- fCurrentEventTime = timestamp;
+ fCurrentEventTime = (timestamp > 0) ? timestamp : 0;
fDataModel.setCurrentEvent(timestamp);
refresh();
}
int canvasHeight = fCanvas.getBounds().height;
fDataModel.setCurrentEvent(fCurrentEventTime);
fScaledData = fDataModel.scaleTo(canvasWidth, canvasHeight);
- // If there's no data, just get out
- if (fScaledData.fData[0] == 0)
- return;
- // Display histogram and update X-,Y-axis labels
fCanvas.redraw();
+ // Display histogram and update X-,Y-axis labels
fTimeRangeStartText.setText(HistogramUtils.nanosecondsToString(fDataModel.getStartTime()));
fTimeRangeEndText.setText(HistogramUtils.nanosecondsToString(fDataModel.getEndTime()));
- if (fDataModel.getStartTime() > 0) {
- fMaxNbEventsText.setText(Long.toString(fScaledData.fMaxValue));
- }
+ fMaxNbEventsText.setText(Long.toString(fScaledData.fMaxValue));
// The Y-axis area might need to be re-sized
fMaxNbEventsText.getParent().layout();
}
@Override
public void mouseHover(MouseEvent event) {
- if (fDataModel.getNbEvents() > 0 && fScaledData.fLastBucket >= event.x) {
+ if (fDataModel.getNbEvents() > 0 && fScaledData != null && fScaledData.fLastBucket >= event.x) {
String tooltip = formatToolTipLabel(event.x);
fCanvas.setToolTipText(tooltip);
}
private String formatToolTipLabel(int index) {
long startTime = fDataModel.getStartTime() + fScaledData.fCurrentBucket * fScaledData.fBucketDuration;
long endTime = startTime + fScaledData.fBucketDuration;
- int nbEvents = fScaledData.fData[index];
+ int nbEvents = (index >= 0) ? fScaledData.fData[index] : 0;
StringBuffer buffer = new StringBuffer();
buffer.append("Range = ["); //$NON-NLS-1$
import org.eclipse.linuxtools.lttng.exceptions.EventOutOfSequenceException;
import org.eclipse.linuxtools.lttng.ui.LTTngUILogger;
-import org.eclipse.linuxtools.lttng.ui.views.histogram.HistogramScaledData;
/**
* <b><u>HistogramDataModel</u></b>
* TODO: Add filter support for more refined event counting (e.g. by trace,
* event type, etc.)
* <p>
- * TODO: Cut-off eccentric values?
- * TODO: Support for going back in time?
+ * TODO: Cut-off eccentric values? TODO: Support for going back in time?
*/
public class HistogramDataModel {
HistogramScaledData result = new HistogramScaledData(width, height);
// Scale horizontally
+ result.fMaxValue = 0;
int bucketsPerBar = fLastBucket / width + 1;
result.fBucketDuration = bucketsPerBar * fBucketDuration;
for (int i = 0; i < width; i++) {
// Constructor
// ------------------------------------------------------------------------
- public HistogramRequest(Histogram histogram, TmfTimeRange range, int nbEvents, ITmfDataRequest.ExecutionType execType) {
- super(LttngEvent.class, range, nbEvents, LttngConstants.DEFAULT_BLOCK_SIZE, execType);
+ public HistogramRequest(Histogram histogram, TmfTimeRange range, int rank, int nbEvents, ITmfDataRequest.ExecutionType execType) {
+ super(LttngEvent.class, range, rank, nbEvents, LttngConstants.DEFAULT_BLOCK_SIZE, execType);
fHistogram = histogram;
}
public HistogramRequest(Histogram histogram, TmfTimeRange range, ITmfDataRequest.ExecutionType execType) {
- this(histogram, range, ALL_DATA, execType);
+ this(histogram, range, 0, ALL_DATA, execType);
+ }
+
+ public HistogramRequest(Histogram histogram, TmfTimeRange range, int rank, ITmfDataRequest.ExecutionType execType) {
+ this(histogram, range, rank, ALL_DATA, execType);
}
// ------------------------------------------------------------------------
import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
import org.eclipse.linuxtools.tmf.request.ITmfDataRequest.ExecutionType;
+import org.eclipse.linuxtools.tmf.signal.TmfExperimentRangeUpdatedSignal;
import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
import org.eclipse.linuxtools.tmf.signal.TmfRangeSynchSignal;
import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
-import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
import org.eclipse.linuxtools.tmf.ui.views.TmfView;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
public void updateCurrentEventTime(long newTime) {
if (fCurrentExperiment != null) {
TmfTimeRange timeRange = new TmfTimeRange(new TmfTimestamp(newTime, TIME_SCALE), TmfTimestamp.BigCrunch);
- HistogramRequest request = new HistogramRequest(fTimeRangeHistogram, timeRange, 1, ExecutionType.FOREGROUND) {
+ HistogramRequest request = new HistogramRequest(fTimeRangeHistogram, timeRange, 0, 1, ExecutionType.FOREGROUND) {
@Override
public void handleData(LttngEvent event) {
if (event != null) {
}
private void loadExperiment() {
- fExperimentStartTime = fCurrentExperiment.getStartTime().getValue();
- fExperimentEndTime = fCurrentExperiment.getEndTime().getValue();
- fCurrentTimestamp = fExperimentStartTime;
initializeHistograms();
fParent.redraw();
}
-// @TmfSignalHandler
-// @SuppressWarnings("unchecked")
-// public void experimentUpdated(TmfExperimentUpdatedSignal signal) {
-// fCurrentExperiment = (TmfExperiment<LttngEvent>) signal.getExperiment();
-// fFullRangeHistogramCanvas.redraw();
-// fTimespanHistogramCanvas.redraw();
-// createCanvasAndRequests();
-// }
+ @TmfSignalHandler
+ @SuppressWarnings("unchecked")
+ public void experimentRangeUpdated(TmfExperimentRangeUpdatedSignal signal) {
+
+ fCurrentExperiment = (TmfExperiment<LttngEvent>) signal.getExperiment();
+ boolean drawTimeRangeHistogram = fExperimentStartTime == 0;
+ TmfTimeRange fullRange = signal.getRange();
+
+ fExperimentStartTime = fullRange.getStartTime().getValue();
+ fExperimentEndTime = fullRange.getEndTime().getValue();
+
+ fFullTraceHistogram.setFullRange(fExperimentStartTime, fExperimentEndTime);
+ fTimeRangeHistogram.setFullRange(fExperimentStartTime, fExperimentEndTime);
+
+ if (drawTimeRangeHistogram) {
+ fCurrentTimestamp = fExperimentStartTime;
+ fCurrentEventTimeControl.setValue(fCurrentTimestamp);
+ fFullTraceHistogram.setTimeRange(fExperimentStartTime, INITIAL_WINDOW_SPAN);
+ fTimeRangeHistogram.setTimeRange(fExperimentStartTime, INITIAL_WINDOW_SPAN);
+ sendTimeRangeRequest(fExperimentStartTime, fExperimentStartTime + INITIAL_WINDOW_SPAN);
+ }
+
+ sendFullRangeRequest(fullRange);
+ }
@TmfSignalHandler
public void currentTimeUpdated(TmfTimeSynchSignal signal) {
// ------------------------------------------------------------------------
private void initializeHistograms() {
- updateExperimentTimeRange(fCurrentExperiment);
+ TmfTimeRange fullRange = updateExperimentTimeRange(fCurrentExperiment);
+
+ fTimeRangeHistogram.clear();
fTimeRangeHistogram.setFullRange(fExperimentStartTime, fExperimentEndTime);
fTimeRangeHistogram.setTimeRange(fExperimentStartTime, INITIAL_WINDOW_SPAN);
fTimeRangeHistogram.setCurrentEvent(fExperimentStartTime);
+ fFullTraceHistogram.clear();
fFullTraceHistogram.setFullRange(fExperimentStartTime, fExperimentEndTime);
fFullTraceHistogram.setTimeRange(fExperimentStartTime, INITIAL_WINDOW_SPAN);
fFullTraceHistogram.setCurrentEvent(fExperimentStartTime);
fTimeSpanControl.setValue(fWindowSpan);
sendTimeRangeRequest(fExperimentStartTime, fExperimentStartTime + fWindowSpan);
- sendFullRangeRequest();
+ sendFullRangeRequest(fullRange);
+ }
+
+ private TmfTimeRange updateExperimentTimeRange(TmfExperiment<LttngEvent> experiment) {
+ fExperimentStartTime = 0;
+ fExperimentEndTime = 0;
+ fCurrentTimestamp = 0;
+
+ TmfTimeRange timeRange = fCurrentExperiment.getTimeRange();
+ if (timeRange != TmfTimeRange.Null) {
+ fExperimentStartTime = timeRange.getStartTime().getValue();
+ fExperimentEndTime = timeRange.getEndTime().getValue();
+ fCurrentTimestamp = fExperimentStartTime;
+ }
+ return timeRange;
}
private void sendTimeRangeRequest(long startTime, long endTime) {
fCurrentExperiment.sendRequest(fTimeRangeRequest);
}
- private void sendFullRangeRequest() {
+ private void sendFullRangeRequest(TmfTimeRange fullRange) {
if (fFullTraceRequest != null && !fFullTraceRequest.isCompleted()) {
fFullTraceRequest.cancel();
}
- fFullTraceHistogram.clear();
- TmfTimeRange timeRange = updateExperimentTimeRange(fCurrentExperiment);
- fFullTraceRequest = new HistogramRequest(fFullTraceHistogram, timeRange, ExecutionType.BACKGROUND);
+ fFullTraceRequest = new HistogramRequest(fFullTraceHistogram, fullRange, (int) fFullTraceHistogram.fDataModel.getNbEvents(),
+ ExecutionType.BACKGROUND);
fCurrentExperiment.sendRequest(fFullTraceRequest);
}
- private TmfTimeRange updateExperimentTimeRange(TmfExperiment<LttngEvent> experiment) {
- TmfTimestamp startTime = TmfTimestamp.BigCrunch;
- TmfTimestamp endTime = TmfTimestamp.BigBang;
- for (ITmfTrace trace : experiment.getTraces()) {
- TmfTimestamp traceStartTime = trace.getStartTime();
- if (traceStartTime.compareTo(startTime, true) < 0)
- startTime = traceStartTime;
- TmfTimestamp traceEndTime = trace.getEndTime();
- if (traceEndTime.compareTo(endTime, true) > 0)
- endTime = traceEndTime;
- }
- fExperimentStartTime = startTime.getValue();
- fExperimentEndTime = endTime.getValue();
-
- return new TmfTimeRange(startTime, endTime);
- }
-
}
}
public void setFullRange(long startTime, long endTime) {
- fZoom.setFullRange(startTime, endTime);
+ long currentFirstEvent = getStartTime();
+ fZoom.setFullRange((currentFirstEvent == 0) ? startTime : currentFirstEvent, endTime);
}
}
LTTngTrace lttngTrace = (LTTngTrace) trace;
JniTrace jniTrace = lttngTrace.getCurrentJniTrace();
jniTrace.updateTrace();
- startTime = Math.min(startTime, jniTrace.getStartTime().getTime());
+ startTime = Math.min(startTime, lttngTrace.getStartTime().getValue());
endTime = Math.max(endTime, jniTrace.getEndTime().getTime());
}
}
try {
sendRequest((ITmfDataRequest<T>) request);
request.waitForCompletion();
- if (timeRange != null) {
+ if (timeRange != null && timeRange != TmfTimeRange.Null) {
TmfExperimentRangeUpdatedSignal signal = new TmfExperimentRangeUpdatedSignal(LTTngExperiment.this, LTTngExperiment.this,
timeRange);
broadcast(signal);
}
- Thread.sleep(5000);
+ Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
icons/,\
about.html,\
plugin.properties,\
- plugin.xml
+ plugin.xml,\
+ schema/