package org.eclipse.tracecompass.internal.lttng2.ust.ui.views.memusage;
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tracecompass.common.core.format.DataSizeWithUnitFormat;
import org.eclipse.tracecompass.internal.lttng2.ust.core.analysis.memory.UstMemoryStrings;
import org.eclipse.tracecompass.internal.tmf.core.Activator;
import org.eclipse.tracecompass.lttng2.ust.core.analysis.memory.UstMemoryAnalysisModule;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfCommonXLineChartViewer;
+import org.swtchart.Chart;
/**
* Memory usage view
private final Map<Integer, Integer> fMemoryQuarks = new HashMap<>();
private final Map<Integer, String> fSeriesName = new HashMap<>();
- private static final int BYTES_TO_KB = 1024;
-
// Timeout between updates in the updateData thread
private static final long BUILD_UPDATE_TIMEOUT = 500;
*/
public MemoryUsageViewer(Composite parent) {
super(parent, Messages.MemoryUsageViewer_Title, Messages.MemoryUsageViewer_XAxis, Messages.MemoryUsageViewer_YAxis);
+ Chart chart = getSwtChart();
+ chart.getLegend().setPosition(SWT.LEFT);
+ chart.getAxisSet().getYAxis(0).getTick().setFormat(new DataSizeWithUnitFormat());
}
@Override
if (getTrace() == null || fModule == null) {
return;
}
- fModule.waitForInitialization();
+ if (!fModule.waitForInitialization()) {
+ return;
+ }
ITmfStateSystem ss = fModule.getStateSystem();
/* Don't wait for the module completion, when it's ready, we'll know */
if (ss == null) {
fYValues.put(quark, new double[xvalues.length]);
fMemoryQuarks.put(quark, ss.getQuarkRelative(quark, UstMemoryStrings.UST_MEMORY_MEMORY_ATTRIBUTE));
int procNameQuark = ss.getQuarkRelative(quark, UstMemoryStrings.UST_MEMORY_PROCNAME_ATTRIBUTE);
+ String oldSeriesName = fSeriesName.get(quark);
+ String seriesName = null;
try {
ITmfStateValue procnameValue = ss.querySingleState(start, procNameQuark).getStateValue();
String procname = ""; //$NON-NLS-1$
if (!procnameValue.isNull()) {
procname = procnameValue.unboxStr();
}
- fSeriesName.put(quark, new String(procname + ' ' + '(' + ss.getAttributeName(quark) + ')').trim());
+ seriesName = (procname + ' ' + '(' + ss.getAttributeName(quark) + ')').trim();
} catch (TimeRangeException e) {
- fSeriesName.put(quark, '(' + ss.getAttributeName(quark) + ')');
+ seriesName = '(' + ss.getAttributeName(quark) + ')';
+ }
+
+ if (oldSeriesName != null && !oldSeriesName.equals(seriesName)) {
+ deleteSeries(oldSeriesName);
}
+ fSeriesName.put(quark, seriesName);
}
/*
time = time > traceEnd ? traceEnd : time;
for (int quark : tidQuarks) {
+ double[] values = checkNotNull(fYValues.get(quark));
try {
- yvalue = ss.querySingleState(time, fMemoryQuarks.get(quark)).getStateValue().unboxLong() / BYTES_TO_KB;
- fYValues.get(quark)[i] = yvalue;
+ Integer memQuark = checkNotNull(fMemoryQuarks.get(quark));
+ yvalue = ss.querySingleState(time, memQuark.intValue()).getStateValue().unboxLong();
+ values[i] = yvalue;
} catch (TimeRangeException e) {
- fYValues.get(quark)[i] = 0;
+ values[i] = 0;
}
}
}