2 * Copyright (C) 2017 EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
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 package org
.lttng
.scope
.lttng
.kernel
.core
.views
.timegraph
.resources
;
12 import java
.util
.Collections
;
13 import java
.util
.List
;
15 import java
.util
.function
.Function
;
17 import org
.eclipse
.jdt
.annotation
.Nullable
;
18 import org
.lttng
.scope
.lttng
.kernel
.core
.analysis
.os
.KernelAnalysisModule
;
19 import org
.lttng
.scope
.lttng
.kernel
.core
.analysis
.os
.StateValues
;
20 import org
.lttng
.scope
.lttng
.kernel
.core
.views
.timegraph
.KernelAnalysisStateDefinitions
;
21 import org
.lttng
.scope
.tmf2
.views
.core
.config
.ConfigOption
;
22 import org
.lttng
.scope
.tmf2
.views
.core
.timegraph
.model
.provider
.statesystem
.StateSystemModelStateProvider
;
23 import org
.lttng
.scope
.tmf2
.views
.core
.timegraph
.model
.render
.ColorDefinition
;
24 import org
.lttng
.scope
.tmf2
.views
.core
.timegraph
.model
.render
.LineThickness
;
25 import org
.lttng
.scope
.tmf2
.views
.core
.timegraph
.model
.render
.StateDefinition
;
27 import com
.google
.common
.annotations
.VisibleForTesting
;
28 import com
.google
.common
.collect
.ImmutableList
;
30 import ca
.polymtl
.dorsal
.libdelorean
.exceptions
.StateValueTypeException
;
31 import ca
.polymtl
.dorsal
.libdelorean
.statevalue
.ITmfStateValue
;
34 * State provider of the Resources time graph.
36 * @author Alexandre Montplaisir
38 public class ResourcesModelStateProvider
extends StateSystemModelStateProvider
{
40 // ------------------------------------------------------------------------
42 // ------------------------------------------------------------------------
44 private static final Function
<StateIntervalContext
, @Nullable String
> LABEL_MAPPING_FUNCTION
= ssCtx
-> null;
46 // ------------------------------------------------------------------------
47 // Color mapping, line thickness
48 // ------------------------------------------------------------------------
51 * State definitions used in this provider.
53 private static final List
<StateDefinition
> STATE_DEFINITIONS
= ImmutableList
.of(
54 KernelAnalysisStateDefinitions
.CPU_STATE_IDLE
,
55 KernelAnalysisStateDefinitions
.THREAD_STATE_SYSCALL
,
56 KernelAnalysisStateDefinitions
.THREAD_STATE_USERMODE
,
57 KernelAnalysisStateDefinitions
.CPU_STATE_IRQ_ACTIVE
,
58 KernelAnalysisStateDefinitions
.CPU_STATE_SOFTIRQ_ACTIVE
,
59 KernelAnalysisStateDefinitions
.CPU_STATE_SOFTIRQ_RAISED
);
61 private static final Function
<StateIntervalContext
, StateDefinition
> STATE_DEF_MAPPING_FUNCTION
= ssCtx
-> {
62 ITmfStateValue val
= ssCtx
.sourceInterval
.getStateValue();
63 return stateValueToStateDef(val
);
67 static final StateDefinition
stateValueToStateDef(ITmfStateValue val
) {
69 return KernelAnalysisStateDefinitions
.NO_STATE
;
73 int status
= val
.unboxInt();
75 case StateValues
.CPU_STATUS_IDLE
:
76 return KernelAnalysisStateDefinitions
.CPU_STATE_IDLE
;
77 case StateValues
.CPU_STATUS_RUN_SYSCALL
:
78 return KernelAnalysisStateDefinitions
.THREAD_STATE_SYSCALL
;
79 case StateValues
.CPU_STATUS_RUN_USERMODE
:
80 return KernelAnalysisStateDefinitions
.THREAD_STATE_USERMODE
;
81 case StateValues
.CPU_STATUS_IRQ
:
82 return KernelAnalysisStateDefinitions
.CPU_STATE_IRQ_ACTIVE
;
83 case StateValues
.CPU_STATUS_SOFTIRQ
:
84 return KernelAnalysisStateDefinitions
.CPU_STATE_SOFTIRQ_ACTIVE
;
85 case StateValues
.CPU_STATUS_SOFT_IRQ_RAISED
:
86 return KernelAnalysisStateDefinitions
.CPU_STATE_SOFTIRQ_RAISED
;
88 return KernelAnalysisStateDefinitions
.CPU_STATE_UNKNOWN
;
91 } catch (StateValueTypeException e
) {
92 return KernelAnalysisStateDefinitions
.CPU_STATE_UNKNOWN
;
96 private static final Function
<StateIntervalContext
, String
> STATE_NAME_MAPPING_FUNCTION
= ssCtx
-> STATE_DEF_MAPPING_FUNCTION
.apply(ssCtx
).getName();
98 private static final Function
<StateIntervalContext
, ConfigOption
<ColorDefinition
>> COLOR_MAPPING_FUNCTION
= ssCtx
-> STATE_DEF_MAPPING_FUNCTION
.apply(ssCtx
).getColor();
100 private static final Function
<StateIntervalContext
, ConfigOption
<LineThickness
>> LINE_THICKNESS_MAPPING_FUNCTION
= ssCtx
-> STATE_DEF_MAPPING_FUNCTION
.apply(ssCtx
).getLineThickness();
102 // ------------------------------------------------------------------------
104 // ------------------------------------------------------------------------
106 private static final Function
<StateIntervalContext
, Map
<String
, String
>> PROPERTIES_MAPPING_FUNCTION
= ssCtx
-> {
107 // TODO Add current thread on this CPU
108 return Collections
.emptyMap();
114 public ResourcesModelStateProvider() {
115 super(STATE_DEFINITIONS
,
116 KernelAnalysisModule
.ID
,
117 STATE_NAME_MAPPING_FUNCTION
,
118 LABEL_MAPPING_FUNCTION
,
119 COLOR_MAPPING_FUNCTION
,
120 LINE_THICKNESS_MAPPING_FUNCTION
,
121 PROPERTIES_MAPPING_FUNCTION
);