Re-structure LTTng sub-project as per the Linux Tools guidelines
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / resources / evProcessor / ResourcesEventToHandlerFactory.java
CommitLineData
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 *******************************************************************************/
13package org.eclipse.linuxtools.lttng.ui.views.resources.evProcessor;
14
15import java.util.HashMap;
16import java.util.Map;
17
6c13869b
FC
18import org.eclipse.linuxtools.lttng.core.event.LttngEvent;
19import org.eclipse.linuxtools.lttng.core.event.LttngSyntheticEvent;
20import org.eclipse.linuxtools.lttng.core.event.LttngSyntheticEvent.SequenceInd;
21import org.eclipse.linuxtools.lttng.core.state.StateStrings;
22import org.eclipse.linuxtools.lttng.core.state.evProcessor.AbsEventToHandlerResolver;
23import org.eclipse.linuxtools.lttng.core.state.evProcessor.ILttngEventProcessor;
24import org.eclipse.linuxtools.lttng.core.state.model.LttngTraceState;
6e512b93
ASL
25
26/**
27 * Builds a Map from string event name to a processing handler object, the
28 * processors implement the same interface to facilitate transparent methods
29 * call,
30 *
31 * The map key String is the entry point of the raw events. Using a hash speeds
32 * up the resolution of the appropriate processor
33 *
34 * @author alvaro
35 *
36 */
37public class ResourcesEventToHandlerFactory extends AbsEventToHandlerResolver {
38 // ========================================================================
39 // Data
40 // =======================================================================
41 private final Map<String, ILttngEventProcessor> eventNametoBeforeProcessor = new HashMap<String, ILttngEventProcessor>();
42 private final Map<String, ILttngEventProcessor> eventNametoAfterProcessor = new HashMap<String, ILttngEventProcessor>();
43 private ResourcesFinishUpdateHandler finishProcessor = null;
44 private static ResourcesEventToHandlerFactory instance = null;
45 private ResourcesBeforeUpdateHandlers instantiateBeforeHandler = new ResourcesBeforeUpdateHandlers();
46 private ResourcesAfterUpdateHandlers instantiateAfterHandler = new ResourcesAfterUpdateHandlers();
47
48 private ResourcesEventToHandlerFactory() {
49 super();
50 // Create one instance of each individual event handler and add the
51 // instance to the map
52
53 // *** BEFORE HOOKS ***
54 eventNametoBeforeProcessor.put(
55 StateStrings.Events.LTT_EVENT_SCHED_SCHEDULE.getInName(),
56 instantiateBeforeHandler.getBeforeSchedChangeHandler());
57
58 eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_TRAP_ENTRY
59 .getInName(), instantiateBeforeHandler
60 .getBeforeExecutionModeTrap());
61 eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_TRAP_EXIT
62 .getInName(), instantiateBeforeHandler
63 .getBeforeExecutionModeTrap());
64 eventNametoBeforeProcessor.put(
65 StateStrings.Events.LTT_EVENT_PAGE_FAULT_ENTRY.getInName(),
66 instantiateBeforeHandler.getBeforeExecutionModeTrap());
67 eventNametoBeforeProcessor.put(
68 StateStrings.Events.LTT_EVENT_PAGE_FAULT_EXIT.getInName(),
69 instantiateBeforeHandler.getBeforeExecutionModeTrap());
70 eventNametoBeforeProcessor.put(
71 StateStrings.Events.LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY
72 .getInName(), instantiateBeforeHandler
73 .getBeforeExecutionModeTrap());
74 eventNametoBeforeProcessor
75 .put(StateStrings.Events.LTT_EVENT_PAGE_FAULT_NOSEM_EXIT
76 .getInName(), instantiateBeforeHandler
77 .getBeforeExecutionModeTrap());
78
79 eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_IRQ_ENTRY
80 .getInName(), instantiateBeforeHandler
81 .getBeforeExecutionModeIrq());
82 eventNametoBeforeProcessor.put(StateStrings.Events.LTT_EVENT_IRQ_EXIT
83 .getInName(), instantiateBeforeHandler
84 .getBeforeExecutionModeIrq());
85
86 eventNametoBeforeProcessor.put(
87 StateStrings.Events.LTT_EVENT_SOFT_IRQ_RAISE.getInName(),
88 instantiateBeforeHandler.getBeforeExecutionModeSoftIrq());
89 eventNametoBeforeProcessor.put(
90 StateStrings.Events.LTT_EVENT_SOFT_IRQ_ENTRY.getInName(),
91 instantiateBeforeHandler.getBeforeExecutionModeSoftIrq());
92 eventNametoBeforeProcessor.put(
93 StateStrings.Events.LTT_EVENT_SOFT_IRQ_EXIT.getInName(),
94 instantiateBeforeHandler.getBeforeExecutionModeSoftIrq());
95
96 eventNametoBeforeProcessor.put(
97 StateStrings.Events.LTT_EVENT_REQUEST_ISSUE.getInName(),
98 instantiateBeforeHandler.getBeforeBdevEvent());
99 eventNametoBeforeProcessor.put(
100 StateStrings.Events.LTT_EVENT_REQUEST_COMPLETE.getInName(),
101 instantiateBeforeHandler.getBeforeBdevEvent());
102
103 // *** AFTER HOOKS ***
104 eventNametoAfterProcessor.put(
105 StateStrings.Events.LTT_EVENT_SCHED_SCHEDULE.getInName(),
106 instantiateAfterHandler.getAfterSchedChangeHandler());
107
108 finishProcessor = new ResourcesFinishUpdateHandler();
109 }
110
111 /**
112 *
113 */
114 public static AbsEventToHandlerResolver getInstance() {
115 if (instance == null) {
116 instance = new ResourcesEventToHandlerFactory();
117 }
118 return instance;
119 }
120
121 @Override
122 public ILttngEventProcessor getAfterProcessor(String eventType) {
123 return eventNametoAfterProcessor.get(eventType);
124 }
125
126 @Override
127 public ILttngEventProcessor getBeforeProcessor(String eventType) {
128 return eventNametoBeforeProcessor.get(eventType);
129 }
130
131 @Override
132 public ILttngEventProcessor getfinishProcessor() {
133 return finishProcessor;
134 }
135
550d787e 136 @Override
6e512b93
ASL
137 public boolean process(LttngEvent trcEvent, LttngTraceState traceSt) {
138 if (trcEvent instanceof LttngSyntheticEvent) {
139
140 LttngSyntheticEvent synEvent = (LttngSyntheticEvent) trcEvent;
141 String eventType = synEvent.getMarkerName();
142 ILttngEventProcessor processor = null;
143 if (synEvent.getSynType() == SequenceInd.BEFORE) {
144 processor = getBeforeProcessor(eventType);
145 }
146
147 if (synEvent.getSynType() == SequenceInd.AFTER) {
148 processor = getAfterProcessor(eventType);
149 }
150
151 if (synEvent.getSynType() == SequenceInd.ENDREQ) {
152 processor = getfinishProcessor();
153 }
154
155 if (processor != null) {
156 processor.process(trcEvent, traceSt);
157 }
158 }
159 return false;
160 }
161
162 @Override
163 public ILttngEventProcessor getStateUpdaterProcessor(String eventType) {
164 return null;
165 }
166}
This page took 0.035005 seconds and 5 git commands to generate.