1 /*******************************************************************************
2 * Copyright (c) 2009, 2010 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
.lttng
.core
.state
.evProcessor
.state
;
15 import java
.util
.HashMap
;
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
;
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 StateEventToHandlerFactory
extends AbsEventToHandlerResolver
{
34 // ========================================================================
36 // =======================================================================
37 private final Map
<String
, ILttngEventProcessor
> eventNametoStateProcessor
= new HashMap
<String
, ILttngEventProcessor
>();
38 private final static StateEventToHandlerFactory instance
= new StateEventToHandlerFactory();
39 private StateUpdateHandlers instantiateHandler
= new StateUpdateHandlers();
41 // ========================================================================
43 // =======================================================================
44 protected StateEventToHandlerFactory() {
45 //create one instance of each individual event handler and add the instance to the map
46 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SYSCALL_ENTRY
47 .getInName(), instantiateHandler
.getSyscallEntryHandler());
49 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SYSCALL_EXIT
50 .getInName(), instantiateHandler
.getsySyscallExitHandler());
52 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_TRAP_ENTRY
53 .getInName(), instantiateHandler
.getTrapEntryHandler());
55 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_TRAP_EXIT
56 .getInName(), instantiateHandler
.getTrapExitHandler());
58 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_ENTRY
59 .getInName(), instantiateHandler
.getTrapEntryHandler());
61 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_EXIT
62 .getInName(), instantiateHandler
.getTrapExitHandler());
64 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY
65 .getInName(), instantiateHandler
.getTrapEntryHandler());
67 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PAGE_FAULT_NOSEM_EXIT
68 .getInName(), instantiateHandler
.getTrapExitHandler());
70 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_IRQ_ENTRY
71 .getInName(), instantiateHandler
.getIrqEntryHandler());
73 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_IRQ_EXIT
74 .getInName(), instantiateHandler
.getIrqExitHandler());
76 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_RAISE
77 .getInName(), instantiateHandler
.getSoftIrqRaiseHandler());
79 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_ENTRY
80 .getInName(), instantiateHandler
.getSoftIrqEntryHandler());
82 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SOFT_IRQ_EXIT
83 .getInName(), instantiateHandler
.getSoftIrqExitHandler());
85 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_LIST_INTERRUPT
86 .getInName(), instantiateHandler
.getEnumInterruptHandler());
88 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_REQUEST_ISSUE
89 .getInName(), instantiateHandler
.getBdevRequestIssueHandler());
91 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_REQUEST_COMPLETE
92 .getInName(), instantiateHandler
.getBdevRequestCompleteHandler());
94 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_FUNCTION_ENTRY
95 .getInName(), instantiateHandler
.getFunctionEntryHandler());
97 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_FUNCTION_EXIT
98 .getInName(), instantiateHandler
.getFunctionExitHandler());
100 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SYS_CALL_TABLE
101 .getInName(), instantiateHandler
.getDumpSyscallHandler());
103 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_KPROBE_TABLE
104 .getInName(), instantiateHandler
.getDumpKprobeHandler());
106 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SOFTIRQ_VEC
107 .getInName(), instantiateHandler
.getDumpSoftIrqHandler());
109 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_SCHED_SCHEDULE
110 .getInName(), instantiateHandler
.getSchedChangeHandler());
112 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PROCESS_FORK
113 .getInName(), instantiateHandler
.getProcessForkHandler());
115 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_KTHREAD_CREATE
116 .getInName(), instantiateHandler
.getProcessKernelThreadHandler());
118 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PROCESS_EXIT
119 .getInName(), instantiateHandler
.getProcessExitHandler());
121 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PROCESS_FREE
122 .getInName(), instantiateHandler
.getProcessFreeHandler());
124 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_EXEC
125 .getInName(), instantiateHandler
.getProcessExecHandler());
127 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_THREAD_BRAND
128 .getInName(), instantiateHandler
.GetThreadBrandHandler());
130 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_STATEDUMP_END
131 .getInName(), instantiateHandler
.getStateDumpEndHandler());
133 eventNametoStateProcessor
.put(StateStrings
.Events
.LTT_EVENT_PROCESS_STATE
134 .getInName(), instantiateHandler
.getEnumProcessStateHandler());
139 // ========================================================================
141 // =======================================================================
143 * The event processors are common to all traces an multiple instances will
144 * use more memory unnecessarily
148 public static AbsEventToHandlerResolver
getInstance() {
154 * @see org.eclipse.linuxtools.lttng.state.evProcessor.AbsEventProcessorFactory#getAfterProcessor(java.lang.String)
157 public ILttngEventProcessor
getAfterProcessor(String eventType
) {
162 * @see org.eclipse.linuxtools.lttng.state.evProcessor.AbsEventProcessorFactory#getBeforeProcessor(java.lang.String)
165 public ILttngEventProcessor
getBeforeProcessor(String eventType
) {
170 * This is the only event handler to update the State provider
175 public ILttngEventProcessor
getStateUpdaterProcessor(String eventType
) {
176 return eventNametoStateProcessor
.get(eventType
);
180 public ILttngEventProcessor
getfinishProcessor() {
181 // No finishing processor used