public class ResourcesPresentationProvider extends TimeGraphPresentationProvider {\r
\r
private enum State {\r
- UNKNOWN (new RGB(100, 100, 100)),\r
- IDLE (new RGB(200, 200, 200)),\r
- BUSY (new RGB(0, 200, 0)),\r
- INTERRUPTED (new RGB(200, 100, 100)),\r
- RAISED (new RGB(200, 200, 0)),\r
- ACTIVE (new RGB(200, 150, 100));\r
+ UNKNOWN (new RGB(100, 100, 100)),\r
+ IDLE (new RGB(200, 200, 200)),\r
+ USERMODE (new RGB(0, 200, 0)),\r
+ SYSCALL (new RGB(0, 0, 200)),\r
+ IRQ (new RGB(200, 100, 100)),\r
+ SOFT_IRQ (new RGB(200, 150, 100)),\r
+ IRQ_ACTIVE (new RGB(200, 100, 100)),\r
+ SOFT_IRQ_RAISED (new RGB(200, 200, 0)),\r
+ SOFT_IRQ_ACTIVE (new RGB(200, 150, 100));\r
\r
public final RGB rgb;\r
\r
if (status == StateValues.CPU_STATUS_IDLE) {\r
return State.IDLE.ordinal();\r
} else if (status == StateValues.CPU_STATUS_RUN_USERMODE) {\r
- return State.BUSY.ordinal();\r
+ return State.USERMODE.ordinal();\r
+ } else if (status == StateValues.CPU_STATUS_RUN_SYSCALL) {\r
+ return State.SYSCALL.ordinal();\r
} else if (status == StateValues.CPU_STATUS_IRQ) {\r
- return State.INTERRUPTED.ordinal();\r
+ return State.IRQ.ordinal();\r
+ } else if (status == StateValues.CPU_STATUS_SOFTIRQ) {\r
+ return State.SOFT_IRQ.ordinal();\r
}\r
- } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
+ } else if (resourcesEvent.getType() == Type.IRQ) {\r
+ return State.IRQ_ACTIVE.ordinal();\r
+ } else if (resourcesEvent.getType() == Type.SOFT_IRQ) {\r
int cpu = resourcesEvent.getValue();\r
if (cpu == StateValues.SOFT_IRQ_RAISED) {\r
- return State.RAISED.ordinal();\r
+ return State.SOFT_IRQ_RAISED.ordinal();\r
}\r
- return State.ACTIVE.ordinal();\r
+ return State.SOFT_IRQ_ACTIVE.ordinal();\r
} else {\r
return -1; // NULL\r
}\r
if (status == StateValues.CPU_STATUS_IDLE) {\r
return State.IDLE.toString();\r
} else if (status == StateValues.CPU_STATUS_RUN_USERMODE) {\r
- return State.BUSY.toString();\r
+ return State.USERMODE.toString();\r
+ } else if (status == StateValues.CPU_STATUS_RUN_SYSCALL) {\r
+ return State.SYSCALL.toString();\r
} else if (status == StateValues.CPU_STATUS_IRQ) {\r
- return State.INTERRUPTED.toString();\r
+ return State.IRQ.toString();\r
+ } else if (status == StateValues.CPU_STATUS_SOFTIRQ) {\r
+ return State.SOFT_IRQ.toString();\r
}\r
- } else if (resourcesEvent.getType() == Type.IRQ || resourcesEvent.getType() == Type.SOFT_IRQ) {\r
+ } else if (resourcesEvent.getType() == Type.IRQ) {\r
+ return State.IRQ_ACTIVE.toString();\r
+ } else if (resourcesEvent.getType() == Type.SOFT_IRQ) {\r
int cpu = resourcesEvent.getValue();\r
if (cpu == StateValues.SOFT_IRQ_RAISED) {\r
- return State.RAISED.toString();\r
+ return State.SOFT_IRQ_RAISED.toString();\r
}\r
- return State.ACTIVE.toString();\r
+ return State.SOFT_IRQ_ACTIVE.toString();\r
} else {\r
return null;\r
}\r
int status = resourcesEvent.getValue();\r
\r
if (status == StateValues.CPU_STATUS_IRQ) {\r
- // In interrupted state get the IRQ or SOFT_IRQ that caused the interruption\r
+ // In IRQ state get the IRQ that caused the interruption\r
ResourcesEntry entry = (ResourcesEntry) event.getEntry();\r
IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
int cpu = entry.getId();\r
- \r
+\r
IStateSystemQuerier ss = entry.getTrace().getStateSystem();\r
try {\r
- int resultQuark = 0;\r
- String attributeName = null;\r
- \r
- // First check for IRQ\r
List<ITmfStateInterval> fullState = ss.queryFullState(event.getTime());\r
List<Integer> irqQuarks = ss.getQuarks(Attributes.RESOURCES, Attributes.IRQS, "*"); //$NON-NLS-1$\r
\r
- for (int curQuark : irqQuarks) {\r
- if (fullState.get(curQuark).getStateValue().unboxInt() == cpu) {\r
- resultQuark = curQuark;\r
- attributeName = Messages.ResourcesView_attributeIrqName;\r
+ for (int irqQuark : irqQuarks) {\r
+ if (fullState.get(irqQuark).getStateValue().unboxInt() == cpu) {\r
+ ITmfStateInterval value = ssq.querySingleState(event.getTime(), irqQuark);\r
+ if (!value.getStateValue().isNull()) {\r
+ int irq = Integer.parseInt(ssq.getAttributeName(irqQuark));\r
+ retMap.put(Messages.ResourcesView_attributeIrqName, String.valueOf(irq));\r
+ }\r
break;\r
}\r
}\r
- \r
- // If not found check for SOFT_IRQ\r
- if (attributeName == null) {\r
- List<Integer> softIrqQuarks = ssq.getQuarks(Attributes.RESOURCES, Attributes.SOFT_IRQS, "*"); //$NON-NLS-1$\r
- for (int curQuark : softIrqQuarks) {\r
- if (fullState.get(curQuark).getStateValue().unboxInt() == cpu) {\r
- resultQuark = curQuark;\r
- attributeName = Messages.ResourcesView_attributeSoftIrqName;\r
- break;\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
+ } else if (status == StateValues.CPU_STATUS_SOFTIRQ) {\r
+ // In SOFT_IRQ state get the SOFT_IRQ that caused the interruption\r
+ ResourcesEntry entry = (ResourcesEntry) event.getEntry();\r
+ IStateSystemQuerier ssq = entry.getTrace().getStateSystem();\r
+ int cpu = entry.getId();\r
\r
- if (attributeName != null) {\r
- // A IRQ or SOFT_IRQ was found\r
- ITmfStateInterval value = ssq.querySingleState(event.getTime(), resultQuark);\r
- if (!value.getStateValue().isNull()) {\r
- int irq = Integer.parseInt(ssq.getAttributeName(resultQuark));\r
- retMap.put(attributeName, String.valueOf(irq));\r
+ IStateSystemQuerier ss = entry.getTrace().getStateSystem();\r
+ try {\r
+ List<ITmfStateInterval> fullState = ss.queryFullState(event.getTime());\r
+ List<Integer> softIrqQuarks = ss.getQuarks(Attributes.RESOURCES, Attributes.SOFT_IRQS, "*"); //$NON-NLS-1$\r
+\r
+ for (int softIrqQuark : softIrqQuarks) {\r
+ if (fullState.get(softIrqQuark).getStateValue().unboxInt() == cpu) {\r
+ ITmfStateInterval value = ssq.querySingleState(event.getTime(), softIrqQuark);\r
+ if (!value.getStateValue().isNull()) {\r
+ int softIrq = Integer.parseInt(ssq.getAttributeName(softIrqQuark));\r
+ retMap.put(Messages.ResourcesView_attributeSoftIrqName, String.valueOf(softIrq));\r
+ }\r
+ break;\r
}\r
}\r
} catch (AttributeNotFoundException e) {\r