1 /*******************************************************************************
2 * Copyright (c) 2009 Ericsson
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 * Alvaro Sanchez-Leon (alvsan09@gmail.com) - Initial API and implementation
11 * Michel Dagenais (michel.dagenais@polymtl.ca) - Reference C implementation, used with permission
12 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.internal
.lttng
.ui
.views
.controlflow
.evProcessor
;
15 import java
.util
.HashMap
;
18 import org
.eclipse
.linuxtools
.internal
.lttng
.core
.state
.StateStrings
;
19 import org
.eclipse
.linuxtools
.internal
.lttng
.core
.state
.evProcessor
.AbsEventToHandlerResolver
;
20 import org
.eclipse
.linuxtools
.internal
.lttng
.core
.state
.evProcessor
.ILttngEventProcessor
;
23 * Builds a Map from string event name to a processing handler object, the
24 * processors implement the same interface to facilitate transparent methods
27 * The map key STring is the entry point of the raw events, using a hash speeds
28 * up the resolution of the appropriate processor
33 public class FlowEventToHandlerFactory
extends AbsEventToHandlerResolver
{
34 // ========================================================================
36 // =======================================================================
37 private final Map
<String
, ILttngEventProcessor
> eventNametoBeforeProcessor
= new HashMap
<String
, ILttngEventProcessor
>();
38 private final Map
<String
, ILttngEventProcessor
> eventNametoAfterProcessor
= new HashMap
<String
, ILttngEventProcessor
>();
39 private ILttngEventProcessor finishProcesor
= null;
40 private static FlowEventToHandlerFactory instance
= null;
41 private FlowBeforeUpdateHandlers instantiateBeforeHandler
= new FlowBeforeUpdateHandlers();
42 private FlowAfterUpdateHandlers instantiateAfterHandler
= new FlowAfterUpdateHandlers();
44 // ========================================================================
46 // =======================================================================
47 private FlowEventToHandlerFactory() {
49 // Create one instance of each individual event handler and add the
50 // instance to the map
53 eventNametoBeforeProcessor
.put(
54 StateStrings
.Events
.LTT_EVENT_SYSCALL_ENTRY
.getInName(),
55 instantiateBeforeHandler
.getStateModesHandler());
57 eventNametoBeforeProcessor
.put(
58 StateStrings
.Events
.LTT_EVENT_SYSCALL_EXIT
.getInName(),
59 instantiateBeforeHandler
.getStateModesHandler());
61 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_TRAP_ENTRY
62 .getInName(), instantiateBeforeHandler
.getStateModesHandler());
64 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_TRAP_EXIT
65 .getInName(), instantiateBeforeHandler
.getStateModesHandler());
67 eventNametoBeforeProcessor
.put(
68 StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_ENTRY
.getInName(),
69 instantiateBeforeHandler
.getStateModesHandler());
71 eventNametoBeforeProcessor
.put(
72 StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_EXIT
.getInName(),
73 instantiateBeforeHandler
.getStateModesHandler());
75 eventNametoBeforeProcessor
.put(
76 StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY
77 .getInName(), instantiateBeforeHandler
78 .getStateModesHandler());
80 eventNametoBeforeProcessor
81 .put(StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_NOSEM_EXIT
82 .getInName(), instantiateBeforeHandler
83 .getStateModesHandler());
85 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_IRQ_ENTRY
86 .getInName(), instantiateBeforeHandler
.getStateModesHandler());
88 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_IRQ_EXIT
89 .getInName(), instantiateBeforeHandler
.getStateModesHandler());
91 eventNametoBeforeProcessor
.put(
92 StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_ENTRY
.getInName(),
93 instantiateBeforeHandler
.getStateModesHandler());
95 eventNametoBeforeProcessor
.put(
96 StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_EXIT
.getInName(),
97 instantiateBeforeHandler
.getStateModesHandler());
99 eventNametoBeforeProcessor
.put(
100 StateStrings
.Events
.LTT_EVENT_SCHED_SCHEDULE
.getInName(),
101 instantiateBeforeHandler
.getBeforeSchedChangeHandler());
103 eventNametoBeforeProcessor
.put(
104 StateStrings
.Events
.LTT_EVENT_PROCESS_EXIT
.getInName(),
105 instantiateBeforeHandler
.getProcessExitHandler());
107 eventNametoBeforeProcessor
.put(
108 StateStrings
.Events
.LTT_EVENT_PROCESS_FREE
.getInName(),
109 instantiateBeforeHandler
.getProcessFreeHandler());
111 eventNametoBeforeProcessor
.put(
112 StateStrings
.Events
.LTT_EVENT_STATEDUMP_END
.getInName(),
113 instantiateBeforeHandler
.getStateDumpEndHandler());
117 eventNametoAfterProcessor
.put(
118 StateStrings
.Events
.LTT_EVENT_SCHED_SCHEDULE
.getInName(),
119 instantiateAfterHandler
.getSchedChangeHandler());
121 eventNametoAfterProcessor
.put(
122 StateStrings
.Events
.LTT_EVENT_PROCESS_FORK
.getInName(),
123 instantiateAfterHandler
.getProcessForkHandler());
125 eventNametoAfterProcessor
.put(
126 StateStrings
.Events
.LTT_EVENT_PROCESS_EXIT
.getInName(),
127 instantiateAfterHandler
.getProcessExitHandler());
129 eventNametoAfterProcessor
.put(StateStrings
.Events
.LTT_EVENT_EXEC
130 .getInName(), instantiateAfterHandler
.getProcessExecHandler());
132 eventNametoAfterProcessor
.put(
133 StateStrings
.Events
.LTT_EVENT_THREAD_BRAND
.getInName(),
134 instantiateAfterHandler
.GetThreadBrandHandler());
136 eventNametoAfterProcessor
.put(
137 StateStrings
.Events
.LTT_EVENT_PROCESS_STATE
.getInName(),
138 instantiateAfterHandler
.getEnumProcessStateHandler());
140 finishProcesor
= new FlowFinishUpdateHandler();
143 // ========================================================================
145 // =======================================================================
147 * The event processors are common to all traces an multiple instances will
148 * use more memory unnecessarily
152 public static AbsEventToHandlerResolver
getInstance() {
153 if (instance
== null) {
154 instance
= new FlowEventToHandlerFactory();
160 public ILttngEventProcessor
getAfterProcessor(String eventType
) {
161 return eventNametoAfterProcessor
.get(eventType
);
165 public ILttngEventProcessor
getBeforeProcessor(String eventType
) {
166 return eventNametoBeforeProcessor
.get(eventType
);
170 public ILttngEventProcessor
getfinishProcessor() {
171 return finishProcesor
;
175 public ILttngEventProcessor
getStateUpdaterProcessor(String eventType
) {