From: Marc-Andre Laperle Date: Mon, 14 Mar 2016 01:16:11 +0000 (-0400) Subject: lttng: Fix intermittent MemoryUsageViewTest failure X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=6206fd7500118cd99d6e0a449bab8de87646bd89;p=deliverable%2Ftracecompass.git lttng: Fix intermittent MemoryUsageViewTest failure It is possible that a thread gets added to the memory usage chart before the process name is determined. Once the process name is determined, a new series is added to the chart but the old one is not deleted. Not only this fails the test because the chart contains too many series, but it shows the wrong information to the user. To reproduce the issue, you can add a Thread.sleep(5000) in UstMemoryStateProvider around line 222, before the process name gets added to the state system. Change-Id: I95631758e0fdffbc094a3adb923b7019841a4a60 Signed-off-by: Marc-Andre Laperle Reviewed-on: https://git.eclipse.org/r/68312 Reviewed-by: Hudson CI Reviewed-by: Bernd Hufmann Tested-by: Bernd Hufmann --- diff --git a/lttng/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/internal/lttng2/ust/ui/views/memusage/MemoryUsageViewer.java b/lttng/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/internal/lttng2/ust/ui/views/memusage/MemoryUsageViewer.java index 425124b0be..ff3cf944a9 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/internal/lttng2/ust/ui/views/memusage/MemoryUsageViewer.java +++ b/lttng/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/internal/lttng2/ust/ui/views/memusage/MemoryUsageViewer.java @@ -113,17 +113,23 @@ public class MemoryUsageViewer extends TmfCommonXLineChartViewer { 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(); } - String seriesName = procname + ' ' + '(' + ss.getAttributeName(quark) + ')'; - fSeriesName.put(quark, seriesName.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); } /*