Import lttng.kernel.core plugins from Scope
[deliverable/tracecompass.git] / lttng / org.lttng.scope.lttng.kernel.core / src / org / lttng / scope / lttng / kernel / core / analysis / os / Attributes.java
1 /*******************************************************************************
2 * Copyright (c) 2012, 2015 Ericsson
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
10 package org.lttng.scope.lttng.kernel.core.analysis.os;
11
12 import org.eclipse.jdt.annotation.Nullable;
13 import org.eclipse.tracecompass.tmf.core.util.Pair;
14
15 /**
16 * This file defines all the attribute names used in the handler. Both the
17 * construction and query steps should use them.
18 *
19 * These should not be externalized! The values here are used as-is in the
20 * history file on disk, so they should be kept the same to keep the file format
21 * compatible. If a view shows attribute names directly, the localization should
22 * be done on the viewer side.
23 *
24 * @author Alexandre Montplaisir
25 */
26 @SuppressWarnings({ "nls", "javadoc" })
27 public interface Attributes {
28
29 /* First-level attributes */
30 String CPUS = "CPUs";
31 String THREADS = "Threads";
32
33 /* Sub-attributes of the CPU nodes */
34 String CURRENT_THREAD = "Current_thread";
35 String SOFT_IRQS = "Soft_IRQs";
36 String IRQS = "IRQs";
37
38 /* Sub-attributes of the Thread nodes */
39 String CURRENT_CPU_RQ = "Current_cpu_rq";
40 String PPID = "PPID";
41 String EXEC_NAME = "Exec_name";
42
43 String PRIO = "Prio";
44 String SYSTEM_CALL = "System_call";
45
46 /* Misc stuff */
47 String UNKNOWN = "Unknown";
48 String THREAD_0_PREFIX = "0_";
49 String THREAD_0_SEPARATOR = "_";
50
51 /**
52 * Build the thread attribute name.
53 *
54 * For all threads except "0" this is the string representation of the
55 * threadId. For thread "0" which is the idle thread and can be running
56 * concurrently on multiple CPUs, append "_cpuId".
57 *
58 * @param threadId
59 * the thread id
60 * @param cpuId
61 * the cpu id
62 * @return the thread attribute name null if the threadId is zero and the
63 * cpuId is null
64 */
65 public static @Nullable String buildThreadAttributeName(int threadId, @Nullable Integer cpuId) {
66 if (threadId == 0) {
67 if (cpuId == null) {
68 return null;
69 }
70 return Attributes.THREAD_0_PREFIX + String.valueOf(cpuId);
71 }
72
73 return String.valueOf(threadId);
74 }
75
76 /**
77 * Parse the thread id and CPU id from the thread attribute name string
78 *
79 * For thread "0" the attribute name is in the form "threadId_cpuId",
80 * extract both values from the string.
81 *
82 * For all other threads, the attribute name is the string representation of
83 * the threadId and there is no cpuId.
84 *
85 * @param threadAttributeName
86 * the thread attribute name
87 * @return the thread id and cpu id
88 */
89 public static Pair<Integer, Integer> parseThreadAttributeName(String threadAttributeName) {
90 Integer threadId = -1;
91 Integer cpuId = -1;
92
93 try {
94 if (threadAttributeName.startsWith(Attributes.THREAD_0_PREFIX)) {
95 threadId = 0;
96 String[] tokens = threadAttributeName.split(Attributes.THREAD_0_SEPARATOR);
97 cpuId = Integer.parseInt(tokens[1]);
98 } else {
99 threadId = Integer.parseInt(threadAttributeName);
100 }
101 } catch (NumberFormatException e1) {
102 // pass
103 }
104
105 return new Pair<>(threadId, cpuId);
106 }
107 }
This page took 0.034977 seconds and 5 git commands to generate.