e8889f3ce65d25b3d3bc8db0fa1fe055bbed42a8
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.core / src / org / eclipse / tracecompass / internal / analysis / os / linux / core / kernel / 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.eclipse.tracecompass.internal.analysis.os.linux.core.kernel;
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 PPID = "PPID";
40 String EXEC_NAME = "Exec_name";
41
42 String PRIO = "Prio";
43 String SYSTEM_CALL = "System_call";
44
45 /* Misc stuff */
46 String UNKNOWN = "Unknown";
47 String THREAD_0_PREFIX = "0_";
48 String THREAD_0_SEPARATOR = "_";
49
50 /**
51 * Build the thread attribute name.
52 *
53 * For all threads except "0" this is the string representation of the
54 * threadId. For thread "0" which is the idle thread and can be running
55 * concurrently on multiple CPUs, append "_cpuId".
56 *
57 * @param threadId
58 * the thread id
59 * @param cpuId
60 * the cpu id
61 * @return the thread attribute name null if the threadId is zero and the
62 * cpuId is null
63 */
64 public static @Nullable String buildThreadAttributeName(int threadId, @Nullable Integer cpuId) {
65 if (threadId == 0) {
66 if (cpuId == null) {
67 return null;
68 }
69 return Attributes.THREAD_0_PREFIX + String.valueOf(cpuId);
70 }
71
72 return String.valueOf(threadId);
73 }
74
75 /**
76 * Parse the thread id and CPU id from the thread attribute name string
77 *
78 * For thread "0" the attribute name is in the form "threadId_cpuId",
79 * extract both values from the string.
80 *
81 * For all other threads, the attribute name is the string representation of
82 * the threadId and there is no cpuId.
83 *
84 * @param threadAttributeName
85 * the thread attribute name
86 * @return the thread id and cpu id
87 */
88 public static Pair<Integer, Integer> parseThreadAttributeName(String threadAttributeName) {
89 Integer threadId = -1;
90 Integer cpuId = -1;
91
92 try {
93 if (threadAttributeName.startsWith(Attributes.THREAD_0_PREFIX)) {
94 threadId = 0;
95 String[] tokens = threadAttributeName.split(Attributes.THREAD_0_SEPARATOR);
96 cpuId = Integer.parseInt(tokens[1]);
97 } else {
98 threadId = Integer.parseInt(threadAttributeName);
99 }
100 } catch (NumberFormatException e1) {
101 // pass
102 }
103
104 return new Pair<>(threadId, cpuId);
105 }
106 }
This page took 0.032456 seconds and 4 git commands to generate.