Import lttng.kernel.core plugins from Scope
[deliverable/tracecompass.git] / lttng / org.lttng.scope.lttng.kernel.core / src / org / lttng / scope / lttng / kernel / core / views / timegraph / resources / ResourcesModelStateProvider.java
CommitLineData
af3275f8
AM
1/*
2 * Copyright (C) 2017 EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
3 *
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
8 */
9
10package org.lttng.scope.lttng.kernel.core.views.timegraph.resources;
11
12import java.util.Collections;
13import java.util.List;
14import java.util.Map;
15import java.util.function.Function;
16
17import org.eclipse.jdt.annotation.Nullable;
18import org.lttng.scope.lttng.kernel.core.analysis.os.KernelAnalysisModule;
19import org.lttng.scope.lttng.kernel.core.analysis.os.StateValues;
20import org.lttng.scope.lttng.kernel.core.views.timegraph.KernelAnalysisStateDefinitions;
21import org.lttng.scope.tmf2.views.core.config.ConfigOption;
22import org.lttng.scope.tmf2.views.core.timegraph.model.provider.statesystem.StateSystemModelStateProvider;
23import org.lttng.scope.tmf2.views.core.timegraph.model.render.ColorDefinition;
24import org.lttng.scope.tmf2.views.core.timegraph.model.render.LineThickness;
25import org.lttng.scope.tmf2.views.core.timegraph.model.render.StateDefinition;
26
27import com.google.common.annotations.VisibleForTesting;
28import com.google.common.collect.ImmutableList;
29
30import ca.polymtl.dorsal.libdelorean.exceptions.StateValueTypeException;
31import ca.polymtl.dorsal.libdelorean.statevalue.ITmfStateValue;
32
33/**
34 * State provider of the Resources time graph.
35 *
36 * @author Alexandre Montplaisir
37 */
38public class ResourcesModelStateProvider extends StateSystemModelStateProvider {
39
40 // ------------------------------------------------------------------------
41 // Label mapping
42 // ------------------------------------------------------------------------
43
44 private static final Function<StateIntervalContext, @Nullable String> LABEL_MAPPING_FUNCTION = ssCtx -> null;
45
46 // ------------------------------------------------------------------------
47 // Color mapping, line thickness
48 // ------------------------------------------------------------------------
49
50 /**
51 * State definitions used in this provider.
52 */
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);
60
61 private static final Function<StateIntervalContext, StateDefinition> STATE_DEF_MAPPING_FUNCTION = ssCtx -> {
62 ITmfStateValue val = ssCtx.sourceInterval.getStateValue();
63 return stateValueToStateDef(val);
64 };
65
66 @VisibleForTesting
67 static final StateDefinition stateValueToStateDef(ITmfStateValue val) {
68 if (val.isNull()) {
69 return KernelAnalysisStateDefinitions.NO_STATE;
70 }
71
72 try {
73 int status = val.unboxInt();
74 switch (status) {
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;
87 default:
88 return KernelAnalysisStateDefinitions.CPU_STATE_UNKNOWN;
89 }
90
91 } catch (StateValueTypeException e) {
92 return KernelAnalysisStateDefinitions.CPU_STATE_UNKNOWN;
93 }
94 }
95
96 private static final Function<StateIntervalContext, String> STATE_NAME_MAPPING_FUNCTION = ssCtx -> STATE_DEF_MAPPING_FUNCTION.apply(ssCtx).getName();
97
98 private static final Function<StateIntervalContext, ConfigOption<ColorDefinition>> COLOR_MAPPING_FUNCTION = ssCtx -> STATE_DEF_MAPPING_FUNCTION.apply(ssCtx).getColor();
99
100 private static final Function<StateIntervalContext, ConfigOption<LineThickness>> LINE_THICKNESS_MAPPING_FUNCTION = ssCtx -> STATE_DEF_MAPPING_FUNCTION.apply(ssCtx).getLineThickness();
101
102 // ------------------------------------------------------------------------
103 // Properties
104 // ------------------------------------------------------------------------
105
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();
109 };
110
111 /**
112 * Constructor
113 */
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);
122 }
123}
This page took 0.028263 seconds and 5 git commands to generate.