os.linux: Do not rely on static initialisation order for layouts
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.core / src / org / eclipse / tracecompass / analysis / os / linux / core / trace / DefaultEventLayout.java
1 /*******************************************************************************
2 * Copyright (c) 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 * Contributors:
10 * Alexandre Montplaisir - Initial API and implementation
11 ******************************************************************************/
12
13 package org.eclipse.tracecompass.analysis.os.linux.core.trace;
14
15 import java.util.Collection;
16
17 import org.eclipse.jdt.annotation.NonNull;
18 import org.eclipse.jdt.annotation.Nullable;
19
20 import com.google.common.collect.ImmutableList;
21
22 /**
23 * A kernel event layout to be used by default. This can be useful for
24 * data-driven traces for example, where they can provide whatever event names
25 * they want.
26 *
27 * Due to historical reasons, the definitions are the same as LTTng event names.
28 *
29 * @author Alexandre Montplaisir
30 * @since 1.0
31 */
32 public class DefaultEventLayout implements IKernelAnalysisEventLayout {
33
34 private static @Nullable DefaultEventLayout INSTANCE;
35
36 /**
37 * The instance of this event layout
38 *
39 * This object is completely immutable, so no need to create additional
40 * instances via the constructor.
41 *
42 * @return the instance
43 * @since 2.0
44 */
45 public static synchronized DefaultEventLayout getInstance() {
46 DefaultEventLayout inst = INSTANCE;
47 if (inst == null) {
48 inst = new DefaultEventLayout();
49 INSTANCE = inst;
50 }
51 return inst;
52 }
53
54 /* Event names */
55 private static final String IRQ_HANDLER_ENTRY = "irq_handler_entry"; //$NON-NLS-1$
56 private static final String IRQ_HANDLER_EXIT = "irq_handler_exit"; //$NON-NLS-1$
57 private static final String SOFTIRQ_ENTRY = "softirq_entry"; //$NON-NLS-1$
58 private static final String SOFTIRQ_EXIT = "softirq_exit"; //$NON-NLS-1$
59 private static final String SOFTIRQ_RAISE = "softirq_raise"; //$NON-NLS-1$
60 private static final String HRTIMER_START = "hrtimer_start"; //$NON-NLS-1$
61 private static final String HRTIMER_CANCEL = "hrtimer_cancel"; //$NON-NLS-1$
62 private static final String HRTIMER_EXPIRE_ENTRY = "hrtimer_expire_entry"; //$NON-NLS-1$
63 private static final String HRTIMER_EXPIRE_EXIT = "hrtimer_expire_exit"; //$NON-NLS-1$
64 private static final String SCHED_SWITCH = "sched_switch"; //$NON-NLS-1$
65 private static final String SCHED_PI_SETPRIO = "sched_pi_setprio"; //$NON-NLS-1$
66
67 private static final String SCHED_TTWU = "sched_ttwu"; //$NON-NLS-1$
68 private static final String SCHED_WAKING = "sched_waking"; //$NON-NLS-1$
69 private static final String SCHED_WAKEUP = "sched_wakeup"; //$NON-NLS-1$
70 private static final String SCHED_WAKEUP_NEW = "sched_wakeup_new"; //$NON-NLS-1$
71 private static final Collection<String> SCHED_WAKEUP_EVENTS = ImmutableList.of(SCHED_WAKEUP, SCHED_WAKEUP_NEW);
72
73 private static final String SCHED_PROCESS_FORK = "sched_process_fork"; //$NON-NLS-1$
74 private static final String SCHED_PROCESS_EXIT = "sched_process_exit"; //$NON-NLS-1$
75 private static final String SCHED_PROCESS_FREE = "sched_process_free"; //$NON-NLS-1$
76 private static final String SCHED_PROCESS_EXEC = "sched_process_exec"; //$NON-NLS-1$
77 private static final String STATEDUMP_PROCESS_STATE = "lttng_statedump_process_state"; //$NON-NLS-1$
78
79 private static final String SYSCALL_ENTRY_PREFIX = "sys_"; //$NON-NLS-1$
80 private static final String COMPAT_SYSCALL_ENTRY_PREFIX = "compat_sys_"; //$NON-NLS-1$
81 private static final String SYSCALL_EXIT_PREFIX = "exit_syscall"; //$NON-NLS-1$
82
83 /* Field names */
84 private static final String IRQ = "irq"; //$NON-NLS-1$
85 private static final String TID = "tid"; //$NON-NLS-1$
86 private static final String VEC = "vec"; //$NON-NLS-1$
87 private static final String PREV_TID = "prev_tid"; //$NON-NLS-1$
88 private static final String PREV_STATE = "prev_state"; //$NON-NLS-1$
89 private static final String NEXT_COMM = "next_comm"; //$NON-NLS-1$
90 private static final String NEXT_TID = "next_tid"; //$NON-NLS-1$
91 private static final String PARENT_TID = "parent_tid"; //$NON-NLS-1$
92 private static final String CHILD_COMM = "child_comm"; //$NON-NLS-1$
93 private static final String CHILD_TID = "child_tid"; //$NON-NLS-1$
94 private static final String PRIO = "prio"; //$NON-NLS-1$
95 private static final String NEW_PRIO = "newprio"; //$NON-NLS-1$
96 private static final String NEXT_PRIO = "next_prio"; //$NON-NLS-1$
97 private static final String COMM = "comm"; //$NON-NLS-1$
98 private static final String NAME = "name"; //$NON-NLS-1$
99 private static final String STATUS = "status"; //$NON-NLS-1$
100 private static final String PREV_COMM = "prev_comm"; //$NON-NLS-1$
101 private static final String FILENAME = "filename"; //$NON-NLS-1$
102 private static final String HRTIMER = "hrtimer"; //$NON-NLS-1$
103 private static final String FUNCTION = "function"; //$NON-NLS-1$
104 private static final String EXPIRES = "expires"; //$NON-NLS-1$
105 private static final String NOW = "now"; //$NON-NLS-1$
106 private static final String SOFT_EXPIRES = "softexpires"; //$NON-NLS-1$
107 private static final String KMEM_ALLOC = "kmem_mm_page_alloc"; //$NON-NLS-1$
108 private static final String KMEM_FREE = "kmem_mm_page_free"; //$NON-NLS-1$
109
110 /**
111 * Constructor, to be used by classes extending this one. To get an instance
112 * of this class, INSTANCE should be used.
113 *
114 * @since 2.0
115 */
116 protected DefaultEventLayout() {
117 }
118
119 // ------------------------------------------------------------------------
120 // Event names
121 // ------------------------------------------------------------------------
122
123 @Override
124 public String eventIrqHandlerEntry() {
125 return IRQ_HANDLER_ENTRY;
126 }
127
128 @Override
129 public String eventIrqHandlerExit() {
130 return IRQ_HANDLER_EXIT;
131 }
132
133 @Override
134 public String eventSoftIrqEntry() {
135 return SOFTIRQ_ENTRY;
136 }
137
138 @Override
139 public String eventSoftIrqExit() {
140 return SOFTIRQ_EXIT;
141 }
142
143 @Override
144 public String eventSoftIrqRaise() {
145 return SOFTIRQ_RAISE;
146 }
147
148 @Override
149 public String eventSchedSwitch() {
150 return SCHED_SWITCH;
151 }
152
153 /**
154 * @since 1.0
155 */
156 @Override
157 public String eventSchedPiSetprio() {
158 return SCHED_PI_SETPRIO;
159 }
160
161 @Override
162 public Collection<String> eventsSchedWakeup() {
163 return SCHED_WAKEUP_EVENTS;
164 }
165
166 @Override
167 public String eventSchedProcessFork() {
168 return SCHED_PROCESS_FORK;
169 }
170
171 @Override
172 public String eventSchedProcessExit() {
173 return SCHED_PROCESS_EXIT;
174 }
175
176 @Override
177 public String eventSchedProcessFree() {
178 return SCHED_PROCESS_FREE;
179 }
180
181 @Override
182 public @NonNull String eventStatedumpProcessState() {
183 return STATEDUMP_PROCESS_STATE;
184 }
185
186 @Override
187 public String eventSyscallEntryPrefix() {
188 return SYSCALL_ENTRY_PREFIX;
189 }
190
191 @Override
192 public String eventCompatSyscallEntryPrefix() {
193 return COMPAT_SYSCALL_ENTRY_PREFIX;
194 }
195
196 @Override
197 public String eventSyscallExitPrefix() {
198 return SYSCALL_EXIT_PREFIX;
199 }
200
201 /** @since 2.0 */
202 @Override
203 public String eventCompatSyscallExitPrefix() {
204 return SYSCALL_EXIT_PREFIX;
205 }
206
207 /**
208 * @since 2.0
209 */
210 @Override
211 public String eventKmemPageAlloc() {
212 return KMEM_ALLOC;
213 }
214
215 /**
216 * @since 2.0
217 */
218 @Override
219 public String eventKmemPageFree() {
220 return KMEM_FREE;
221
222 }
223
224 // ------------------------------------------------------------------------
225 // Event field names
226 // ------------------------------------------------------------------------
227
228 @Override
229 public String fieldIrq() {
230 return IRQ;
231 }
232
233 @Override
234 public String fieldVec() {
235 return VEC;
236 }
237
238 @Override
239 public String fieldTid() {
240 return TID;
241 }
242
243 @Override
244 public String fieldPrevTid() {
245 return PREV_TID;
246 }
247
248 @Override
249 public String fieldPrevState() {
250 return PREV_STATE;
251 }
252
253 @Override
254 public String fieldNextComm() {
255 return NEXT_COMM;
256 }
257
258 @Override
259 public String fieldNextTid() {
260 return NEXT_TID;
261 }
262
263 @Override
264 public String fieldChildComm() {
265 return CHILD_COMM;
266 }
267
268 @Override
269 public String fieldParentTid() {
270 return PARENT_TID;
271 }
272
273 @Override
274 public String fieldChildTid() {
275 return CHILD_TID;
276 }
277
278 /** @since 1.0 */
279 @Override
280 public String fieldPrio() {
281 return PRIO;
282 }
283
284 /** @since 1.0 */
285 @Override
286 public String fieldNewPrio() {
287 return NEW_PRIO;
288 }
289
290 /** @since 1.0 */
291 @Override
292 public String fieldNextPrio() {
293 return NEXT_PRIO;
294 }
295
296 /** @since 2.0 */
297 @Override
298 public String fieldComm() {
299 return COMM;
300 }
301
302 /** @since 2.0 */
303 @Override
304 public String fieldName() {
305 return NAME;
306 }
307
308 /** @since 2.0 */
309 @Override
310 public String fieldStatus() {
311 return STATUS;
312 }
313
314 /** @since 2.0 */
315 @Override
316 public String fieldPrevComm() {
317 return PREV_COMM;
318 }
319
320 /** @since 2.0 */
321 @Override
322 public String fieldFilename() {
323 return FILENAME;
324 }
325
326 /** @since 2.0 */
327 @Override
328 public String eventSchedProcessExec() {
329 return SCHED_PROCESS_EXEC;
330 }
331
332 /** @since 2.0 */
333 @Override
334 public String eventSchedProcessWakeup() {
335 return SCHED_WAKEUP;
336 }
337
338 /** @since 2.0 */
339 @Override
340 public String eventSchedProcessWakeupNew() {
341 return SCHED_WAKEUP_NEW;
342 }
343
344 /** @since 2.0 */
345 @Override
346 public String eventHRTimerStart() {
347 return HRTIMER_START;
348 }
349
350 /** @since 2.0 */
351 @Override
352 public String eventHRTimerCancel() {
353 return HRTIMER_CANCEL;
354 }
355
356 /** @since 2.0 */
357 @Override
358 public String eventHRTimerExpireEntry() {
359 return HRTIMER_EXPIRE_ENTRY;
360 }
361
362 /** @since 2.0 */
363 @Override
364 public String eventHRTimerExpireExit() {
365 return HRTIMER_EXPIRE_EXIT;
366 }
367
368 /**
369 * Event indicating the source of the wakeup signal.
370 *
371 * @return The name of the event
372 * @since 2.0
373 */
374 public String eventSchedProcessTTWU() {
375 return SCHED_TTWU;
376 }
377
378 /** @since 2.0 */
379 @Override
380 public String fieldHRtimer() {
381 return HRTIMER;
382 }
383
384 /** @since 2.0 */
385 @Override
386 public String fieldHRtimerFunction() {
387 return FUNCTION;
388 }
389
390 /** @since 2.0 */
391 @Override
392 public String fieldHRtimerExpires() {
393 return EXPIRES;
394 }
395
396 /** @since 2.0 */
397 @Override
398 public String fieldHRtimerSoftexpires() {
399 return SOFT_EXPIRES;
400 }
401
402 /** @since 2.0 */
403 @Override
404 public String fieldHRtimerNow() {
405 return NOW;
406 }
407
408 /**
409 * Event indicating the source of the wakeup signal.
410 *
411 * @return The name of the event
412 * @since 2.0
413 */
414 public String eventSchedProcessWaking() {
415 return SCHED_WAKING;
416 }
417
418 }
This page took 0.072231 seconds and 5 git commands to generate.