Commit | Line | Data |
---|---|---|
6e512b93 ASL |
1 | /******************************************************************************* |
2 | * Copyright (c) 2009 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 | * Alvaro Sanchez-Leon (alvsan09@gmail.com) - Initial API and implementation | |
860cadcf | 11 | * Michel Dagenais (michel.dagenais@polymtl.ca) - Reference C implementation, used with permission |
6e512b93 ASL |
12 | *******************************************************************************/ |
13 | package org.eclipse.linuxtools.lttng.ui.views.controlflow.evProcessor; | |
14 | ||
15 | import java.util.HashMap; | |
16 | import java.util.Map; | |
17 | ||
6c13869b FC |
18 | import org.eclipse.linuxtools.lttng.core.state.StateStrings; |
19 | import org.eclipse.linuxtools.lttng.core.state.evProcessor.AbsEventToHandlerResolver; | |
20 | import org.eclipse.linuxtools.lttng.core.state.evProcessor.ILttngEventProcessor; | |
6e512b93 ASL |
21 | |
22 | /** | |
23 | * Builds a Map from string event name to a processing handler object, the | |
24 | * processors implement the same interface to facilitate transparent methods | |
25 | * call, | |
26 | * | |
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 | |
29 | * | |
30 | * @author alvaro | |
31 | * | |
32 | */ | |
33 | public class FlowEventToHandlerFactory extends AbsEventToHandlerResolver { | |
34 | // ======================================================================== | |
35 | // Data | |
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(); | |
43 | ||
44 | // ======================================================================== | |
45 | // Constructors | |
46 | // ======================================================================= | |
47 | private FlowEventToHandlerFactory() { | |
48 | super(); | |
49 | // Create one instance of each individual event handler and add the | |
50 | // instance to the map | |
51 | ||
52 | // BEFORE HOOKS | |
53 | eventNametoBeforeProcessor.put( | |
54 | StateStrings.Events.LTT_EVENT_SYSCALL_ENTRY.getInName(), | |
55 | instantiateBeforeHandler.getStateModesHandler()); | |
56 | ||
57 | eventNametoBeforeProcessor.put( | |
58 | StateStrings.Events.LTT_EVENT_SYSCALL_EXIT.getInName(), | |
59 | instantiateBeforeHandler.getStateModesHandler()); | |
60 | ||
61 | eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_TRAP_ENTRY | |
62 | .getInName(), instantiateBeforeHandler.getStateModesHandler()); | |
63 | ||
64 | eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_TRAP_EXIT | |
65 | .getInName(), instantiateBeforeHandler.getStateModesHandler()); | |
66 | ||
67 | eventNametoBeforeProcessor.put( | |
68 | StateStrings.Events.LTT_EVENT_PAGE_FAULT_ENTRY.getInName(), | |
69 | instantiateBeforeHandler.getStateModesHandler()); | |
70 | ||
71 | eventNametoBeforeProcessor.put( | |
72 | StateStrings.Events.LTT_EVENT_PAGE_FAULT_EXIT.getInName(), | |
73 | instantiateBeforeHandler.getStateModesHandler()); | |
74 | ||
75 | eventNametoBeforeProcessor.put( | |
76 | StateStrings.Events.LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY | |
77 | .getInName(), instantiateBeforeHandler | |
78 | .getStateModesHandler()); | |
79 | ||
80 | eventNametoBeforeProcessor | |
81 | .put(StateStrings.Events.LTT_EVENT_PAGE_FAULT_NOSEM_EXIT | |
82 | .getInName(), instantiateBeforeHandler | |
83 | .getStateModesHandler()); | |
84 | ||
85 | eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_IRQ_ENTRY | |
86 | .getInName(), instantiateBeforeHandler.getStateModesHandler()); | |
87 | ||
88 | eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_IRQ_EXIT | |
89 | .getInName(), instantiateBeforeHandler.getStateModesHandler()); | |
90 | ||
91 | eventNametoBeforeProcessor.put( | |
92 | StateStrings.Events.LTT_EVENT_SOFT_IRQ_ENTRY.getInName(), | |
93 | instantiateBeforeHandler.getStateModesHandler()); | |
94 | ||
95 | eventNametoBeforeProcessor.put( | |
96 | StateStrings.Events.LTT_EVENT_SOFT_IRQ_EXIT.getInName(), | |
97 | instantiateBeforeHandler.getStateModesHandler()); | |
98 | ||
99 | eventNametoBeforeProcessor.put( | |
100 | StateStrings.Events.LTT_EVENT_SCHED_SCHEDULE.getInName(), | |
101 | instantiateBeforeHandler.getBeforeSchedChangeHandler()); | |
102 | ||
103 | eventNametoBeforeProcessor.put( | |
104 | StateStrings.Events.LTT_EVENT_PROCESS_EXIT.getInName(), | |
105 | instantiateBeforeHandler.getProcessExitHandler()); | |
106 | ||
107 | eventNametoBeforeProcessor.put( | |
108 | StateStrings.Events.LTT_EVENT_PROCESS_FREE.getInName(), | |
109 | instantiateBeforeHandler.getProcessFreeHandler()); | |
110 | ||
111 | eventNametoBeforeProcessor.put( | |
112 | StateStrings.Events.LTT_EVENT_STATEDUMP_END.getInName(), | |
113 | instantiateBeforeHandler.getStateDumpEndHandler()); | |
114 | ||
115 | ||
116 | // AFTER HOOKS | |
117 | eventNametoAfterProcessor.put( | |
118 | StateStrings.Events.LTT_EVENT_SCHED_SCHEDULE.getInName(), | |
119 | instantiateAfterHandler.getSchedChangeHandler()); | |
120 | ||
121 | eventNametoAfterProcessor.put( | |
122 | StateStrings.Events.LTT_EVENT_PROCESS_FORK.getInName(), | |
123 | instantiateAfterHandler.getProcessForkHandler()); | |
124 | ||
125 | eventNametoAfterProcessor.put( | |
126 | StateStrings.Events.LTT_EVENT_PROCESS_EXIT.getInName(), | |
127 | instantiateAfterHandler.getProcessExitHandler()); | |
128 | ||
129 | eventNametoAfterProcessor.put(StateStrings.Events.LTT_EVENT_EXEC | |
130 | .getInName(), instantiateAfterHandler.getProcessExecHandler()); | |
131 | ||
132 | eventNametoAfterProcessor.put( | |
133 | StateStrings.Events.LTT_EVENT_THREAD_BRAND.getInName(), | |
134 | instantiateAfterHandler.GetThreadBrandHandler()); | |
135 | ||
136 | eventNametoAfterProcessor.put( | |
137 | StateStrings.Events.LTT_EVENT_PROCESS_STATE.getInName(), | |
138 | instantiateAfterHandler.getEnumProcessStateHandler()); | |
139 | ||
140 | finishProcesor = new FlowFinishUpdateHandler(); | |
141 | } | |
142 | ||
143 | // ======================================================================== | |
144 | // Public methods | |
145 | // ======================================================================= | |
146 | /** | |
147 | * The event processors are common to all traces an multiple instances will | |
148 | * use more memory unnecessarily | |
149 | * | |
150 | * @return | |
151 | */ | |
152 | public static AbsEventToHandlerResolver getInstance() { | |
153 | if (instance == null) { | |
154 | instance = new FlowEventToHandlerFactory(); | |
155 | } | |
156 | return instance; | |
157 | } | |
158 | ||
159 | @Override | |
160 | public ILttngEventProcessor getAfterProcessor(String eventType) { | |
161 | return eventNametoAfterProcessor.get(eventType); | |
162 | } | |
163 | ||
164 | @Override | |
165 | public ILttngEventProcessor getBeforeProcessor(String eventType) { | |
166 | return eventNametoBeforeProcessor.get(eventType); | |
167 | } | |
168 | ||
169 | @Override | |
170 | public ILttngEventProcessor getfinishProcessor() { | |
171 | return finishProcesor; | |
172 | } | |
173 | ||
174 | @Override | |
175 | public ILttngEventProcessor getStateUpdaterProcessor(String eventType) { | |
176 | return null; | |
177 | } | |
178 | } |