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 *******************************************************************************/
12 package org
.eclipse
.linuxtools
.lttng
.ui
.views
.resources
.evProcessor
;
14 import java
.util
.HashMap
;
17 import org
.eclipse
.linuxtools
.lttng
.event
.LttngEvent
;
18 import org
.eclipse
.linuxtools
.lttng
.event
.LttngSyntheticEvent
;
19 import org
.eclipse
.linuxtools
.lttng
.event
.LttngSyntheticEvent
.SequenceInd
;
20 import org
.eclipse
.linuxtools
.lttng
.state
.StateStrings
;
21 import org
.eclipse
.linuxtools
.lttng
.state
.evProcessor
.AbsEventToHandlerResolver
;
22 import org
.eclipse
.linuxtools
.lttng
.state
.evProcessor
.ILttngEventProcessor
;
23 import org
.eclipse
.linuxtools
.lttng
.state
.model
.LttngTraceState
;
26 * Builds a Map from string event name to a processing handler object, the
27 * processors implement the same interface to facilitate transparent methods
30 * The map key String is the entry point of the raw events. Using a hash speeds
31 * up the resolution of the appropriate processor
36 public class ResourcesEventToHandlerFactory
extends AbsEventToHandlerResolver
{
37 // ========================================================================
39 // =======================================================================
40 private final Map
<String
, ILttngEventProcessor
> eventNametoBeforeProcessor
= new HashMap
<String
, ILttngEventProcessor
>();
41 private final Map
<String
, ILttngEventProcessor
> eventNametoAfterProcessor
= new HashMap
<String
, ILttngEventProcessor
>();
42 private ResourcesFinishUpdateHandler finishProcessor
= null;
43 private static ResourcesEventToHandlerFactory instance
= null;
44 private ResourcesBeforeUpdateHandlers instantiateBeforeHandler
= new ResourcesBeforeUpdateHandlers();
45 private ResourcesAfterUpdateHandlers instantiateAfterHandler
= new ResourcesAfterUpdateHandlers();
47 private ResourcesEventToHandlerFactory() {
49 // Create one instance of each individual event handler and add the
50 // instance to the map
52 // *** BEFORE HOOKS ***
53 eventNametoBeforeProcessor
.put(
54 StateStrings
.Events
.LTT_EVENT_SCHED_SCHEDULE
.getInName(),
55 instantiateBeforeHandler
.getBeforeSchedChangeHandler());
57 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_TRAP_ENTRY
58 .getInName(), instantiateBeforeHandler
59 .getBeforeExecutionModeTrap());
60 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_TRAP_EXIT
61 .getInName(), instantiateBeforeHandler
62 .getBeforeExecutionModeTrap());
63 eventNametoBeforeProcessor
.put(
64 StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_ENTRY
.getInName(),
65 instantiateBeforeHandler
.getBeforeExecutionModeTrap());
66 eventNametoBeforeProcessor
.put(
67 StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_EXIT
.getInName(),
68 instantiateBeforeHandler
.getBeforeExecutionModeTrap());
69 eventNametoBeforeProcessor
.put(
70 StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY
71 .getInName(), instantiateBeforeHandler
72 .getBeforeExecutionModeTrap());
73 eventNametoBeforeProcessor
74 .put(StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_NOSEM_EXIT
75 .getInName(), instantiateBeforeHandler
76 .getBeforeExecutionModeTrap());
78 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_IRQ_ENTRY
79 .getInName(), instantiateBeforeHandler
80 .getBeforeExecutionModeIrq());
81 eventNametoBeforeProcessor
.put(StateStrings
.Events
.LTT_EVENT_IRQ_EXIT
82 .getInName(), instantiateBeforeHandler
83 .getBeforeExecutionModeIrq());
85 eventNametoBeforeProcessor
.put(
86 StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_RAISE
.getInName(),
87 instantiateBeforeHandler
.getBeforeExecutionModeSoftIrq());
88 eventNametoBeforeProcessor
.put(
89 StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_ENTRY
.getInName(),
90 instantiateBeforeHandler
.getBeforeExecutionModeSoftIrq());
91 eventNametoBeforeProcessor
.put(
92 StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_EXIT
.getInName(),
93 instantiateBeforeHandler
.getBeforeExecutionModeSoftIrq());
95 eventNametoBeforeProcessor
.put(
96 StateStrings
.Events
.LTT_EVENT_REQUEST_ISSUE
.getInName(),
97 instantiateBeforeHandler
.getBeforeBdevEvent());
98 eventNametoBeforeProcessor
.put(
99 StateStrings
.Events
.LTT_EVENT_REQUEST_COMPLETE
.getInName(),
100 instantiateBeforeHandler
.getBeforeBdevEvent());
102 // *** AFTER HOOKS ***
103 eventNametoAfterProcessor
.put(
104 StateStrings
.Events
.LTT_EVENT_SCHED_SCHEDULE
.getInName(),
105 instantiateAfterHandler
.getAfterSchedChangeHandler());
107 finishProcessor
= new ResourcesFinishUpdateHandler();
113 public static AbsEventToHandlerResolver
getInstance() {
114 if (instance
== null) {
115 instance
= new ResourcesEventToHandlerFactory();
121 public ILttngEventProcessor
getAfterProcessor(String eventType
) {
122 return eventNametoAfterProcessor
.get(eventType
);
126 public ILttngEventProcessor
getBeforeProcessor(String eventType
) {
127 return eventNametoBeforeProcessor
.get(eventType
);
131 public ILttngEventProcessor
getfinishProcessor() {
132 return finishProcessor
;
136 public boolean process(LttngEvent trcEvent
, LttngTraceState traceSt
) {
137 if (trcEvent
instanceof LttngSyntheticEvent
) {
139 LttngSyntheticEvent synEvent
= (LttngSyntheticEvent
) trcEvent
;
140 String eventType
= synEvent
.getMarkerName();
141 ILttngEventProcessor processor
= null;
142 if (synEvent
.getSynType() == SequenceInd
.BEFORE
) {
143 processor
= getBeforeProcessor(eventType
);
146 if (synEvent
.getSynType() == SequenceInd
.AFTER
) {
147 processor
= getAfterProcessor(eventType
);
150 if (synEvent
.getSynType() == SequenceInd
.ENDREQ
) {
151 processor
= getfinishProcessor();
154 if (processor
!= null) {
155 processor
.process(trcEvent
, traceSt
);
162 public ILttngEventProcessor
getStateUpdaterProcessor(String eventType
) {