\r
package org.eclipse.linuxtools.internal.lttng2.kernel.ui.views.controlflow;\r
\r
-import java.util.HashMap;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
import java.util.Map;\r
\r
import org.eclipse.linuxtools.internal.lttng2.kernel.core.Attributes;\r
import org.eclipse.linuxtools.internal.lttng2.kernel.core.StateValues;\r
import org.eclipse.linuxtools.internal.lttng2.kernel.ui.Messages;\r
import org.eclipse.linuxtools.tmf.core.exceptions.AttributeNotFoundException;\r
+import org.eclipse.linuxtools.tmf.core.exceptions.StateValueTypeException;\r
import org.eclipse.linuxtools.tmf.core.exceptions.TimeRangeException;\r
import org.eclipse.linuxtools.tmf.core.interval.ITmfStateInterval;\r
import org.eclipse.linuxtools.tmf.core.statesystem.IStateSystemQuerier;\r
\r
@Override\r
public Map<String, String> getEventHoverToolTipInfo(ITimeEvent event) {\r
- Map<String, String> retMap = new HashMap<String, String>();\r
+ Map<String, String> retMap = new LinkedHashMap<String, String>();\r
if (event instanceof ControlFlowEvent) {\r
+ ControlFlowEntry entry = (ControlFlowEntry) event.getEntry();\r
+ IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
+ int tid = entry.getThreadId();\r
+\r
+ try {\r
+ //Find every CPU first, then get the current thread\r
+ int cpusQuark = ssq.getQuarkAbsolute(Attributes.CPUS);\r
+ List<Integer> cpuQuarks = ssq.getSubAttributes(cpusQuark, false);\r
+ for (Integer cpuQuark : cpuQuarks) {\r
+ int currentThreadQuark = ssq.getQuarkRelative(cpuQuark, Attributes.CURRENT_THREAD);\r
+ ITmfStateInterval interval = ssq.querySingleState(event.getTime(), currentThreadQuark);\r
+ if (!interval.getStateValue().isNull()) {\r
+ ITmfStateValue state = interval.getStateValue();\r
+ int currentThreadId = state.unboxInt();\r
+ if (tid == currentThreadId) {\r
+ retMap.put(Messages.ControlFlowView_attributeCpuName, ssq.getAttributeName(cpuQuark));\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ } catch (AttributeNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (TimeRangeException e) {\r
+ e.printStackTrace();\r
+ } catch (StateValueTypeException e) {\r
+ e.printStackTrace();\r
+ }\r
int status = ((ControlFlowEvent) event).getStatus();\r
if (status == StateValues.PROCESS_STATUS_RUN_SYSCALL) {\r
- ControlFlowEntry entry = (ControlFlowEntry) event.getEntry();\r
- IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
try {\r
int syscallQuark = ssq.getQuarkRelative(entry.getThreadQuark(), Attributes.SYSTEM_CALL);\r
ITmfStateInterval value = ssq.querySingleState(event.getTime(), syscallQuark);\r