From 2d9aed5e7269820c26f99e061bbaf2257f3aa5df Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Thu, 7 Apr 2016 16:19:12 -0400 Subject: [PATCH] linux: make TID analysis handle no TID more gracefully - Bug 491275 This stops AttributNotFoundExceptions from being thrown in the beginning of a trace. Change-Id: I917fa81b3882ce3c98f23f782a87a6f7f8947b10 Signed-off-by: Matthew Khouzam Reviewed-on: https://git.eclipse.org/r/70170 Reviewed-by: Hudson CI Reviewed-by: Patrick Tasse Tested-by: Patrick Tasse --- .../core/tid/ActiveTidStateProvider.java | 19 ++++++++++--------- .../os/linux/core/tid/TidAnalysisModule.java | 5 ++++- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/ActiveTidStateProvider.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/ActiveTidStateProvider.java index b15bcf9339..d9f9dee5ff 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/ActiveTidStateProvider.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/ActiveTidStateProvider.java @@ -72,20 +72,21 @@ class ActiveTidStateProvider extends AbstractTmfStateProvider { if (cpu == null) { return; } - if (!event.getName().equals(fSchedSwitch)) { - return; - } ITmfStateSystemBuilder ssb = getStateSystemBuilder(); if (ssb == null) { return; } + Integer cpuQuark = fCpuNumToQuark.get(cpu); + if (cpuQuark == null) { + // this will only happen once + String cpuAttributeName = NonNullUtils.nullToEmptyString(cpu); + cpuQuark = ssb.getQuarkAbsoluteAndAdd(cpuAttributeName); + fCpuNumToQuark.put(cpu, cpuQuark); + } + if (!event.getName().equals(fSchedSwitch)) { + return; + } try { - Integer cpuQuark = fCpuNumToQuark.get(cpu); - if (cpuQuark == null) { - String cpuAttributeName = NonNullUtils.nullToEmptyString(cpu); - cpuQuark = ssb.getQuarkAbsoluteAndAdd(cpuAttributeName); - fCpuNumToQuark.put(cpu, cpuQuark); - } int nextTid = ((Long) event.getContent().getField(fNextTid).getValue()).intValue(); final TmfStateValue value = TmfStateValue.newValueInt(nextTid); ssb.modifyAttribute(event.getTimestamp().toNanos(), value, cpuQuark); diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/TidAnalysisModule.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/TidAnalysisModule.java index 6aadd40b31..b4f63a9e17 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/TidAnalysisModule.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/analysis/os/linux/core/tid/TidAnalysisModule.java @@ -82,7 +82,10 @@ public class TidAnalysisModule extends TmfStateSystemAnalysisModule { Integer tid = null; try { - int cpuQuark = stateSystem.getQuarkAbsolute(Integer.toString(cpu)); + int cpuQuark = stateSystem.optQuarkAbsolute(Integer.toString(cpu)); + if (cpuQuark == ITmfStateSystem.INVALID_ATTRIBUTE) { + return null; + } ITmfStateValue value = stateSystem.querySingleState(time, cpuQuark).getStateValue(); if (value.getType().equals(Type.INTEGER)) { tid = value.unboxInt(); -- 2.34.1