1 /*******************************************************************************
2 * Copyright (c) 2009 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Alvaro Sanchez-Leon (alvsan09@gmail.com) - Initial API and implementation
11 *******************************************************************************/
12 package org
.eclipse
.linuxtools
.lttng
.ui
.model
.trange
;
14 import java
.util
.HashMap
;
17 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
.BdevMode
;
18 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
.CpuMode
;
19 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
.ExecutionMode
;
20 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
.IRQMode
;
21 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
.ProcessStatus
;
22 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
.SoftIRQMode
;
23 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
.TrapMode
;
24 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.TmfTimeAnalysisProvider
;
25 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.model
.ITimeEvent
;
26 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.model
.ITmfTimeAnalysisEntry
;
28 public class TimeRangeViewerProvider
extends TmfTimeAnalysisProvider
{
29 // ========================================================================
31 // =======================================================================
32 Map
<String
, StateColor
> procStateToColor
= new HashMap
<String
, StateColor
>(
34 Map
<String
, StateColor
> bdevStateToColor
= new HashMap
<String
, StateColor
>(
36 Map
<String
, StateColor
> softIrqStateToColor
= new HashMap
<String
, StateColor
>(
38 Map
<String
, StateColor
> trapStateToColor
= new HashMap
<String
, StateColor
>(
40 Map
<String
, StateColor
> irqStateToColor
= new HashMap
<String
, StateColor
>(4);
41 Map
<String
, StateColor
> cpuStateToColor
= new HashMap
<String
, StateColor
>(8);
43 // ========================================================================
45 // =======================================================================
46 public TimeRangeViewerProvider() {
47 // Fill the statemode to color maps
48 fillProcessStateToColor();
49 fillBdevStateToColor();
50 fillSoftIRQStateToColor();
51 fillTrapStateToColor();
52 fillIrqStateToColor();
53 fillCpuStateToColor();
56 // ========================================================================
58 // =======================================================================
60 public StateColor
getEventColor(ITimeEvent event
) {
61 StateColor retColor
= null;
63 if (event
instanceof TimeRangeEvent
) {
64 TimeRangeEvent devent
= (TimeRangeEvent
) event
;
65 String stateMode
= devent
.getStateMode();
66 switch (devent
.getEventType()) {
68 retColor
= procStateToColor
.get(stateMode
);
71 retColor
= bdevStateToColor
.get(stateMode
);
74 retColor
= irqStateToColor
.get(stateMode
);
77 retColor
= softIrqStateToColor
.get(stateMode
);
80 retColor
= cpuStateToColor
.get(stateMode
);
83 retColor
= trapStateToColor
.get(stateMode
);
88 if (retColor
== null) {
89 return StateColor
.MAGENTA3
;
95 * @see org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.api.TsfTmAbstractImplProvider#getStateName(org.eclipse.linuxtools.tmf.ui.widgets.timeAnalysis.api.TsfTmAbstractImplProvider.StateColor)
98 public String
getStateName(StateColor color
) {
99 //Override to multiple instances of the widget, the same color can have multiple meanings
104 public Map
<String
, String
> getEventHoverToolTipInfo(ITimeEvent revent
) {
105 Map
<String
, String
> toolTipEventMsgs
= new HashMap
<String
, String
>();
106 //if the selected resource is a Process, add the Process type to the tool tip
107 if (revent
instanceof TimeRangeComponent
) {
108 ITimeRangeComponent parent
= ((TimeRangeComponent
) revent
)
110 if (parent
!= null && parent
instanceof TimeRangeEventProcess
) {
111 TimeRangeEventProcess localProcess
= (TimeRangeEventProcess
) parent
;
112 toolTipEventMsgs
.put("Process Type", localProcess
117 return toolTipEventMsgs
;
121 public String
getEventName(ITimeEvent event
, boolean upper
, boolean extInfo
) {
123 //The relevant event name for the time range is the actual state mode
124 if (event
instanceof TimeRangeEvent
) {
125 TimeRangeEvent devent
= (TimeRangeEvent
) event
;
126 StringBuilder sb
= new StringBuilder(devent
.getStateMode());
127 name
= sb
.toString();
137 public String
getTraceClassName(ITmfTimeAnalysisEntry trace
) {
139 if (trace
instanceof TimeRangeComposite
) {
140 TimeRangeComposite dTrace
= (TimeRangeComposite
) trace
;
141 name
= dTrace
.getClassName();
146 private void fillCpuStateToColor() {
147 cpuStateToColor
.put(CpuMode
.LTTV_CPU_UNKNOWN
.getInName(),
149 cpuStateToColor
.put(CpuMode
.LTTV_CPU_IDLE
.getInName(), StateColor
.GRAY
);
150 cpuStateToColor
.put(CpuMode
.LTTV_CPU_BUSY
.getInName(),
151 StateColor
.LIGHT_BLUE
);
153 .put(CpuMode
.LTTV_CPU_IRQ
.getInName(), StateColor
.ORANGE
);
154 cpuStateToColor
.put(CpuMode
.LTTV_CPU_SOFT_IRQ
.getInName(),
156 cpuStateToColor
.put(CpuMode
.LTTV_CPU_TRAP
.getInName(), StateColor
.GOLD
);
159 private void fillIrqStateToColor() {
160 irqStateToColor
.put(IRQMode
.LTTV_IRQ_UNKNOWN
.getInName(),
162 irqStateToColor
.put(IRQMode
.LTTV_IRQ_IDLE
.getInName(), StateColor
.GRAY
);
163 irqStateToColor
.put(IRQMode
.LTTV_IRQ_BUSY
.getInName(),
167 private void fillTrapStateToColor() {
168 trapStateToColor
.put(TrapMode
.LTTV_TRAP_UNKNOWN
.getInName(),
170 trapStateToColor
.put(TrapMode
.LTTV_TRAP_IDLE
.getInName(),
172 trapStateToColor
.put(TrapMode
.LTTV_TRAP_BUSY
.getInName(),
176 private void fillSoftIRQStateToColor() {
177 softIrqStateToColor
.put(SoftIRQMode
.LTTV_SOFT_IRQ_UNKNOWN
.getInName(),
179 softIrqStateToColor
.put(SoftIRQMode
.LTTV_SOFT_IRQ_IDLE
.getInName(),
181 softIrqStateToColor
.put(SoftIRQMode
.LTTV_SOFT_IRQ_PENDING
.getInName(),
183 softIrqStateToColor
.put(SoftIRQMode
.LTTV_SOFT_IRQ_BUSY
.getInName(),
187 private void fillBdevStateToColor() {
188 softIrqStateToColor
.put(BdevMode
.LTTV_BDEV_UNKNOWN
.getInName(),
190 softIrqStateToColor
.put(BdevMode
.LTTV_BDEV_IDLE
.getInName(),
192 softIrqStateToColor
.put(BdevMode
.LTTV_BDEV_BUSY_READING
.getInName(),
193 StateColor
.DARK_BLUE
);
194 softIrqStateToColor
.put(BdevMode
.LTTV_BDEV_BUSY_WRITING
.getInName(),
198 private void fillProcessStateToColor() {
200 procStateToColor
.put(ProcessStatus
.LTTV_STATE_UNNAMED
.getInName(),
202 procStateToColor
.put(ProcessStatus
.LTTV_STATE_DEAD
.getInName(),
204 procStateToColor
.put(ProcessStatus
.LTTV_STATE_WAIT_FORK
.getInName(),
205 StateColor
.DARK_GREEN
);
206 procStateToColor
.put(ProcessStatus
.LTTV_STATE_WAIT_CPU
.getInName(),
207 StateColor
.DARK_YELLOW
);
208 procStateToColor
.put(ProcessStatus
.LTTV_STATE_EXIT
.getInName(),
209 StateColor
.MAGENTA3
);
210 procStateToColor
.put(ProcessStatus
.LTTV_STATE_ZOMBIE
.getInName(),
212 procStateToColor
.put(ProcessStatus
.LTTV_STATE_WAIT
.getInName(),
216 procStateToColor
.put(ExecutionMode
.LTTV_STATE_MODE_UNKNOWN
.getInName(),
218 procStateToColor
.put(ExecutionMode
.LTTV_STATE_USER_MODE
.getInName(),
220 procStateToColor
.put(ExecutionMode
.LTTV_STATE_SYSCALL
.getInName(),
221 StateColor
.DARK_BLUE
);
222 procStateToColor
.put(ExecutionMode
.LTTV_STATE_TRAP
.getInName(),
224 procStateToColor
.put(ExecutionMode
.LTTV_STATE_IRQ
.getInName(),
226 procStateToColor
.put(ExecutionMode
.LTTV_STATE_SOFT_IRQ
.getInName(),