Commit | Line | Data |
---|---|---|
fbd124dd BH |
1 | /*******************************************************************************\r |
2 | * Copyright (c) 2011 Ericsson\r | |
0c32e4c5 | 3 | *\r |
fbd124dd BH |
4 | * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse\r |
5 | * Public License v1.0 which accompanies this distribution, and is available at\r | |
6 | * http://www.eclipse.org/legal/epl-v10.html\r | |
0c32e4c5 AM |
7 | *\r |
8 | * Contributors:\r | |
fbd124dd BH |
9 | * Philippe Sawicki (INF4990.A2010@gmail.com) - Initial API and implementation\r |
10 | * Mathieu Denis (mathieu.denis55@gmail.com) - Refactored code\r | |
11 | *******************************************************************************/\r | |
5945cec9 | 12 | package org.eclipse.linuxtools.internal.lttng.core.latency.analyzer;\r |
fbd124dd BH |
13 | \r |
14 | import java.util.Collection;\r | |
15 | import java.util.Collections;\r | |
16 | import java.util.HashMap;\r | |
17 | import java.util.Iterator;\r | |
18 | import java.util.Map.Entry;\r | |
19 | import java.util.Set;\r | |
20 | import java.util.Stack;\r | |
21 | import java.util.Vector;\r | |
22 | \r | |
5945cec9 FC |
23 | import org.eclipse.linuxtools.internal.lttng.core.event.LttngEvent;\r |
24 | import org.eclipse.linuxtools.internal.lttng.core.util.EventsPair;\r | |
0c32e4c5 | 25 | import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r |
fbd124dd BH |
26 | \r |
27 | /**\r | |
28 | * <b><u>EventMatcher</u></b>\r | |
29 | * <p>\r | |
30 | * Event matching class. Saves events in a list and returns the previously saved event if the currently processed one is\r | |
31 | * its response, so that the latency can be computed by subtracting their respective timestamps.\r | |
0c32e4c5 | 32 | *\r |
fbd124dd BH |
33 | * @author Philippe Sawicki\r |
34 | */\r | |
35 | public class EventMatcher {\r | |
36 | \r | |
37 | // ------------------------------------------------------------------------\r | |
38 | // Attributes\r | |
39 | // ------------------------------------------------------------------------\r | |
0c32e4c5 | 40 | \r |
fbd124dd BH |
41 | /**\r |
42 | * Class instance (Singleton pattern).\r | |
43 | */\r | |
44 | private static EventMatcher fInstance = null;\r | |
45 | \r | |
46 | /**\r | |
47 | * Stack abstraction, used to save the events in a list.\r | |
48 | */\r | |
0c32e4c5 | 49 | private final StackWrapper fStack;\r |
fbd124dd BH |
50 | \r |
51 | /**\r | |
52 | * Match table, associates a request class to a response class.\r | |
53 | */\r | |
0c32e4c5 | 54 | private final HashMap<String, String> fMatch;\r |
fbd124dd BH |
55 | /**\r |
56 | * Inverse match table, associates a response class to a request class.\r | |
57 | */\r | |
0c32e4c5 | 58 | private final HashMap<String, String> fInverseMatch;\r |
fbd124dd BH |
59 | \r |
60 | /**\r | |
61 | * The number of events processed.\r | |
62 | */\r | |
63 | private int fProcessedEvents;\r | |
64 | /**\r | |
65 | * The number of events matched.\r | |
66 | */\r | |
67 | private int fMatchedEvents;\r | |
0c32e4c5 | 68 | \r |
fbd124dd BH |
69 | /**\r |
70 | * Event types identification Strings.\r | |
71 | */\r | |
72 | @SuppressWarnings("nls")\r | |
1cceddbe | 73 | public static final String\r |
fbd124dd BH |
74 | ADD_TO_PAGE_CACHE = "add_to_page_cache",\r |
75 | BIO_BACKMERGE = "bio_backmerge",\r | |
76 | BIO_FRONTMERGE = "bio_frontmerge",\r | |
77 | BIO_QUEUE = "bio_queue",\r | |
78 | BUFFER_WAIT_END = "buffer_wait_end",\r | |
79 | BUFFER_WAIT_START = "buffer_wait_start",\r | |
80 | CALL = "call",\r | |
81 | CLOSE = "close",\r | |
82 | CORE_MARKER_FORMAT = "core_marker_format",\r | |
83 | CORE_MARKER_ID = "core_marker_id",\r | |
84 | DEV_RECEIVE = "dev_receive",\r | |
85 | DEV_XMIT = "dev_xmit",\r | |
86 | END_COMMIT = "end_commit",\r | |
87 | EXEC = "exec",\r | |
88 | FILE_DESCRIPTOR = "file_descriptor",\r | |
89 | GETRQ = "getrq",\r | |
90 | GETRQ_BIO = "getrq_bio",\r | |
91 | IDT_TABLE = "idt_table",\r | |
92 | INTERRUPT = "interrupt",\r | |
93 | IOCTL = "ioctl",\r | |
94 | IRQ_ENTRY = "irq_entry",\r | |
95 | IRQ_EXIT = "irq_exit",\r | |
96 | LIST_MODULE = "list_module",\r | |
97 | LLSEEK = "llseek",\r | |
98 | LSEEK = "lseek",\r | |
99 | NAPI_COMPLETE = "napi_complete",\r | |
100 | NAPI_POLL = "napi_poll",\r | |
101 | NAPI_SCHEDULE = "napi_schedule",\r | |
102 | NETWORK_IPV4_INTERFACE = "network_ipv4_interface",\r | |
103 | NETWORK_IP_INTERFACE = "network_ip_interface",\r | |
104 | OPEN = "open",\r | |
105 | PAGE_FAULT_ENTRY = "page_fault_entry",\r | |
106 | PAGE_FAULT_EXIT = "page_fault_exit",\r | |
107 | PAGE_FAULT_GET_USER_ENTRY = "page_fault_get_user_entry",\r | |
108 | PAGE_FAULT_GET_USER_EXIT = "page_fault_get_user_exit",\r | |
109 | PAGE_FREE = "page_free",\r | |
110 | PLUG = "plug",\r | |
111 | POLLFD = "pollfd",\r | |
112 | PREAD64 = "pread64",\r | |
113 | PRINTF = "printf",\r | |
114 | PRINTK = "printk",\r | |
115 | PROCESS_EXIT = "process_exit",\r | |
116 | PROCESS_FORK = "process_fork",\r | |
117 | PROCESS_FREE = "process_free",\r | |
118 | PROCESS_STATE = "process_state",\r | |
119 | PROCESS_WAIT = "process_wait",\r | |
120 | READ = "read",\r | |
121 | REMAP = "remap",\r | |
122 | REMOVE_FROM_PAGE_CACHE = "remove_from_page_cache",\r | |
123 | RQ_COMPLETE_FS = "rq_complete_fs",\r | |
124 | RQ_COMPLETE_PC = "rq_complete_pc",\r | |
125 | RQ_INSERT_FS = "rq_insert_fs",\r | |
126 | RQ_INSERT_PC = "rq_insert_pc",\r | |
127 | RQ_ISSUE_FS = "rq_issue_fs",\r | |
128 | RQ_ISSUE_PC = "rq_issue_pc",\r | |
129 | RQ_REQUEUE_PC = "rq_requeue_pc",\r | |
130 | SCHED_MIGRATE_TASK = "sched_migrate_task",\r | |
131 | SCHED_SCHEDULE = "sched_schedule",\r | |
132 | SCHED_TRY_WAKEUP = "sched_try_wakeup",\r | |
133 | SCHED_WAKEUP_NEW_TASK = "sched_wakeup_new_task",\r | |
134 | SELECT = "select",\r | |
135 | SEM_CREATE = "sem_create",\r | |
136 | SEND_SIGNAL = "send_signal",\r | |
137 | SHM_CREATE = "shm_create",\r | |
138 | SLEEPRQ_BIO = "sleeprq_bio",\r | |
139 | SOCKET_ACCEPT = "socket_accept",\r | |
140 | SOCKET_BIND = "socket_bind",\r | |
141 | SOCKET_CALL = "socket_call",\r | |
142 | SOCKET_CONNECT = "socket_connect",\r | |
143 | SOCKET_CREATE = "socket_create",\r | |
144 | SOCKET_GETPEERNAME = "socket_getpeername",\r | |
145 | SOCKET_GETSOCKNAME = "socket_getsockname",\r | |
146 | SOCKET_GETSOCKOPT = "socket_getsockopt",\r | |
147 | SOCKET_LISTEN = "socket_listen",\r | |
148 | SOCKET_SETSOCKOPT = "socket_setsockopt",\r | |
149 | SOCKET_SHUTDOWN = "socket_shutdown",\r | |
150 | SOCKET_SOCKETPAIR = "socket_socketpair",\r | |
151 | SOFTIRQ_ENTRY = "softirq_entry",\r | |
152 | SOFTIRQ_EXIT = "softirq_exit",\r | |
153 | SOFTIRQ_RAISE = "softirq_raise",\r | |
154 | SOFTIRQ_VEC = "softirq_vec",\r | |
155 | START_COMMIT = "start_commit",\r | |
156 | STATEDUMP_END = "statedump_end",\r | |
157 | SYS_CALL_TABLE = "sys_call_table",\r | |
158 | SYSCALL_ENTRY = "syscall_entry",\r | |
159 | SYSCALL_EXIT = "syscall_exit",\r | |
160 | TASKLET_LOW_ENTRY = "tasklet_low_entry",\r | |
161 | TASKLET_LOW_EXIT = "tasklet_low_exit",\r | |
162 | TCPV4_RCV = "tcpv4_rcv",\r | |
163 | TIMER_ITIMER_EXPIRED = "timer_itimer_expired",\r | |
164 | TIMER_ITIMER_SET = "timer_itimer_set",\r | |
165 | TIMER_SET = "timer_set",\r | |
166 | TIMER_TIMEOUT = "timer_timeout",\r | |
167 | TIMER_UPDATE_TIME = "timer_update_time",\r | |
168 | UDPV4_RCV = "udpv4_rcv",\r | |
169 | UNPLUG_IO = "unplug_io",\r | |
170 | UNPLUG_TIMER = "unplug_timer",\r | |
171 | VM_MAP = "vm_map",\r | |
172 | VPRINTK = "vprintk",\r | |
173 | WAIT_ON_PAGE_END = "wait_on_page_end",\r | |
174 | WAIT_ON_PAGE_START = "wait_on_page_start",\r | |
175 | WRITE = "write",\r | |
176 | WRITEV = "writev";\r | |
177 | \r | |
178 | // ------------------------------------------------------------------------\r | |
179 | // Constructor\r | |
180 | // ------------------------------------------------------------------------\r | |
0c32e4c5 | 181 | \r |
fbd124dd BH |
182 | /**\r |
183 | * Private constructor to defeat instantiation (Singleton pattern).\r | |
184 | */\r | |
185 | private EventMatcher() {\r | |
186 | fStack = new StackWrapper();\r | |
187 | fMatch = new HashMap<String, String>();\r | |
188 | fInverseMatch = new HashMap<String, String>();\r | |
189 | \r | |
190 | fProcessedEvents = 0;\r | |
191 | fMatchedEvents = 0;\r | |
192 | \r | |
193 | createMatchTable();\r | |
194 | }\r | |
195 | \r | |
196 | // ------------------------------------------------------------------------\r | |
197 | // Accessors\r | |
198 | // ------------------------------------------------------------------------\r | |
199 | \r | |
200 | /**\r | |
201 | * Returns an instance to the EventMatcher class (Singleton pattern).\r | |
202 | * @return An instance to the EventMatcher class (Singleton pattern).\r | |
203 | */\r | |
204 | public static EventMatcher getInstance() {\r | |
0c32e4c5 | 205 | if (fInstance == null) {\r |
fbd124dd | 206 | fInstance = new EventMatcher();\r |
0c32e4c5 | 207 | }\r |
fbd124dd BH |
208 | return fInstance;\r |
209 | }\r | |
210 | \r | |
211 | /**\r | |
212 | * Returns the number of events processed.\r | |
213 | * @return The number of events processed.\r | |
214 | */\r | |
215 | public int getNBProcessedEvents() {\r | |
216 | return fProcessedEvents;\r | |
217 | }\r | |
218 | \r | |
219 | /**\r | |
220 | * Returns the number of events matched.\r | |
221 | * @return The number of events matched.\r | |
222 | */\r | |
223 | public int getNBMatchedEvents() {\r | |
224 | return fMatchedEvents;\r | |
225 | }\r | |
0c32e4c5 | 226 | \r |
fbd124dd BH |
227 | // ------------------------------------------------------------------------\r |
228 | // Operations\r | |
229 | // ------------------------------------------------------------------------\r | |
0c32e4c5 | 230 | \r |
fbd124dd BH |
231 | /**\r |
232 | * Releases the instance to the EventMatcher class.\r | |
233 | */\r | |
234 | public static void releaseInstance() {\r | |
235 | fInstance = null;\r | |
236 | }\r | |
237 | \r | |
238 | /**\r | |
239 | * Creates the event matching table, linking a response class to a request class.\r | |
240 | */\r | |
241 | private void createMatchTable() {\r | |
242 | // Build the default matches\r | |
243 | fMatch.put(PAGE_FAULT_GET_USER_EXIT, PAGE_FAULT_GET_USER_ENTRY);\r | |
244 | fMatch.put(TASKLET_LOW_EXIT, TASKLET_LOW_ENTRY);\r | |
245 | fMatch.put(PAGE_FAULT_EXIT, PAGE_FAULT_ENTRY);\r | |
246 | fMatch.put(SYSCALL_EXIT, SYSCALL_ENTRY);\r | |
247 | fMatch.put(IRQ_EXIT, IRQ_ENTRY);\r | |
248 | fMatch.put(WRITE, READ);\r | |
249 | fMatch.put(CLOSE, OPEN);\r | |
250 | fMatch.put(BUFFER_WAIT_END, BUFFER_WAIT_START);\r | |
251 | fMatch.put(END_COMMIT, START_COMMIT);\r | |
252 | fMatch.put(WAIT_ON_PAGE_END, WAIT_ON_PAGE_START);\r | |
253 | \r | |
254 | // Build the inverse matches based on the matches\r | |
255 | Set<Entry<String, String>> pairs = fMatch.entrySet();\r | |
256 | Iterator<Entry<String, String>> it = pairs.iterator();\r | |
257 | while (it.hasNext()) {\r | |
258 | Entry<String, String> pair = it.next();\r | |
259 | fInverseMatch.put(pair.getValue(), pair.getKey());\r | |
260 | }\r | |
261 | }\r | |
262 | \r | |
263 | /**\r | |
264 | * Processes an event received: if it is identified as a response, try to get its request to remove it from the\r | |
265 | * list. If no request was saved, dismiss the current response. If it is a request, save it to the list of requests\r | |
266 | * waiting for a response.\r | |
267 | * @param event\r | |
268 | * The event to identify, and maybe process if it is a response.\r | |
269 | * @return The request event associated with the current event (a response), or null if nothing was found (no\r | |
270 | * request associated with this response, or the event to identify was a request that was added to the\r | |
271 | * list).\r | |
272 | */\r | |
0c32e4c5 AM |
273 | public LttngEvent process(ITmfEvent ev) {\r |
274 | LttngEvent event = (LttngEvent) ev;\r | |
fbd124dd BH |
275 | fProcessedEvents++;\r |
276 | \r | |
277 | String markerName = event.getMarkerName();\r | |
278 | if (fMatch.containsKey(markerName)) {\r | |
279 | String startEventType = fMatch.get(markerName);\r | |
280 | Stack<LttngEvent> events = fStack.getStackOf(startEventType);\r | |
0c32e4c5 | 281 | \r |
fbd124dd BH |
282 | if (events != null) {\r |
283 | for (int i = events.size() - 1; i >= 0; i--) {\r | |
284 | LttngEvent request = events.get(i);\r | |
285 | \r | |
286 | if (request.getCpuId() == event.getCpuId() && event.getTimestamp().getValue() > request.getTimestamp().getValue()) {\r | |
287 | fStack.removeEvent(startEventType, request);\r | |
288 | fMatchedEvents++;\r | |
289 | return request;\r | |
290 | }\r | |
291 | }\r | |
292 | }\r | |
293 | return null;\r | |
294 | } else {\r | |
295 | // Add only if there can later be a match for this request\r | |
296 | if (fMatch.containsValue(event.getMarkerName())) {\r | |
297 | fStack.put(event.clone());\r | |
298 | }\r | |
299 | return null;\r | |
300 | }\r | |
301 | }\r | |
302 | \r | |
303 | /**\r | |
304 | * Clears the stack content.\r | |
305 | */\r | |
306 | public void clearStack() {\r | |
307 | fStack.clear();\r | |
308 | \r | |
309 | // Reset the processed and matched events counter\r | |
310 | fProcessedEvents = 0;\r | |
311 | fMatchedEvents = 0;\r | |
312 | }\r | |
313 | \r | |
314 | /**\r | |
315 | * Resets all.\r | |
316 | */\r | |
317 | public void resetMatches() {\r | |
318 | fMatch.clear();\r | |
319 | fInverseMatch.clear();\r | |
320 | \r | |
321 | fStack.clear();\r | |
322 | \r | |
323 | // Reset the processed and matched events counter\r | |
324 | fProcessedEvents = 0;\r | |
325 | fMatchedEvents = 0;\r | |
326 | }\r | |
327 | \r | |
328 | /**\r | |
329 | * Returns the list of start events.\r | |
330 | * @return The list of start events.\r | |
331 | */\r | |
332 | public Collection<String> getStartEvents() {\r | |
333 | return fMatch.values();\r | |
334 | }\r | |
335 | \r | |
336 | /**\r | |
337 | * Returns the list of end events.\r | |
338 | * @return The list of end events.\r | |
339 | */\r | |
340 | public Set<String> getEndEvents() {\r | |
341 | return fMatch.keySet();\r | |
342 | }\r | |
343 | \r | |
344 | /**\r | |
345 | * Returns the alphabetically-sorted list of start/end events pairs.\r | |
346 | * @return The alphabetically-sorted list of start/end events pairs.\r | |
347 | */\r | |
348 | public EventsPair getEvents() {\r | |
349 | Vector<String> start = new Vector<String>(getStartEvents());\r | |
350 | Vector<String> end = new Vector<String>(fMatch.size());\r | |
351 | \r | |
352 | Collections.sort(start);\r | |
353 | for (int i = 0; i < start.size(); i++) {\r | |
354 | end.add(fInverseMatch.get(start.get(i)));\r | |
355 | }\r | |
356 | return new EventsPair(start, end);\r | |
357 | }\r | |
358 | \r | |
359 | /**\r | |
360 | * Adds a match to the list of events pairs.\r | |
361 | * @param startType\r | |
362 | * The start event type.\r | |
363 | * @param endType\r | |
364 | * The end event type.\r | |
365 | */\r | |
366 | public void addMatch(String startType, String endType) {\r | |
367 | fMatch.put(endType, startType);\r | |
368 | fInverseMatch.put(startType, endType);\r | |
369 | }\r | |
370 | \r | |
371 | /**\r | |
372 | * Removes a matched pair based on the their type.\r | |
0c32e4c5 | 373 | *\r |
fbd124dd BH |
374 | * <b>Note :</b> For now, only the pair's end type is used, since a type can only be either one start or one end.\r |
375 | * This function takes both types to account for the future, if a pairing process ever becomes more complex.\r | |
0c32e4c5 | 376 | *\r |
fbd124dd BH |
377 | * @param startType\r |
378 | * The type of the pair's start type.\r | |
379 | * @param endType\r | |
380 | * The type of the pair's end type.\r | |
381 | */\r | |
382 | public void removeMatch(String startType, String endType) {\r | |
383 | fMatch.remove(endType);\r | |
384 | fInverseMatch.remove(startType);\r | |
385 | }\r | |
386 | \r | |
387 | /**\r | |
388 | * Returns the list of all event possible types.\r | |
389 | * @return The list of all event possible types.\r | |
390 | */\r | |
391 | public Vector<String> getTypeList() {\r | |
392 | // Reserve some space for the 103 default event types.\r | |
393 | Vector<String> eventsList = new Vector<String>(103);\r | |
394 | \r | |
395 | eventsList.add(ADD_TO_PAGE_CACHE);\r | |
396 | eventsList.add(BIO_BACKMERGE);\r | |
397 | eventsList.add(BIO_FRONTMERGE);\r | |
398 | eventsList.add(BIO_QUEUE);\r | |
399 | eventsList.add(BUFFER_WAIT_END);\r | |
400 | eventsList.add(BUFFER_WAIT_START);\r | |
401 | eventsList.add(CALL);\r | |
402 | eventsList.add(CLOSE);\r | |
403 | eventsList.add(CORE_MARKER_FORMAT);\r | |
404 | eventsList.add(CORE_MARKER_ID);\r | |
405 | eventsList.add(DEV_RECEIVE);\r | |
406 | eventsList.add(DEV_XMIT);\r | |
407 | eventsList.add(END_COMMIT);\r | |
408 | eventsList.add(EXEC);\r | |
409 | eventsList.add(FILE_DESCRIPTOR);\r | |
410 | eventsList.add(GETRQ);\r | |
411 | eventsList.add(GETRQ_BIO);\r | |
412 | eventsList.add(IDT_TABLE);\r | |
413 | eventsList.add(INTERRUPT);\r | |
414 | eventsList.add(IOCTL);\r | |
415 | eventsList.add(IRQ_ENTRY);\r | |
416 | eventsList.add(IRQ_EXIT);\r | |
417 | eventsList.add(LIST_MODULE);\r | |
418 | eventsList.add(LLSEEK);\r | |
419 | eventsList.add(LSEEK);\r | |
420 | eventsList.add(NAPI_COMPLETE);\r | |
421 | eventsList.add(NAPI_POLL);\r | |
422 | eventsList.add(NAPI_SCHEDULE);\r | |
423 | eventsList.add(NETWORK_IPV4_INTERFACE);\r | |
424 | eventsList.add(NETWORK_IP_INTERFACE);\r | |
425 | eventsList.add(OPEN);\r | |
426 | eventsList.add(PAGE_FAULT_ENTRY);\r | |
427 | eventsList.add(PAGE_FAULT_EXIT);\r | |
428 | eventsList.add(PAGE_FAULT_GET_USER_ENTRY);\r | |
429 | eventsList.add(PAGE_FAULT_GET_USER_EXIT);\r | |
430 | eventsList.add(PAGE_FREE);\r | |
431 | eventsList.add(PLUG);\r | |
432 | eventsList.add(POLLFD);\r | |
433 | eventsList.add(PREAD64);\r | |
434 | eventsList.add(PRINTF);\r | |
435 | eventsList.add(PRINTK);\r | |
436 | eventsList.add(PROCESS_EXIT);\r | |
437 | eventsList.add(PROCESS_FORK);\r | |
438 | eventsList.add(PROCESS_FREE);\r | |
439 | eventsList.add(PROCESS_STATE);\r | |
440 | eventsList.add(PROCESS_WAIT);\r | |
441 | eventsList.add(READ);\r | |
442 | eventsList.add(REMAP);\r | |
443 | eventsList.add(REMOVE_FROM_PAGE_CACHE);\r | |
444 | eventsList.add(RQ_COMPLETE_FS);\r | |
445 | eventsList.add(RQ_COMPLETE_PC);\r | |
446 | eventsList.add(RQ_INSERT_FS);\r | |
447 | eventsList.add(RQ_INSERT_PC);\r | |
448 | eventsList.add(RQ_ISSUE_FS);\r | |
449 | eventsList.add(RQ_ISSUE_PC);\r | |
450 | eventsList.add(RQ_REQUEUE_PC);\r | |
451 | eventsList.add(SCHED_MIGRATE_TASK);\r | |
452 | eventsList.add(SCHED_SCHEDULE);\r | |
453 | eventsList.add(SCHED_TRY_WAKEUP);\r | |
454 | eventsList.add(SCHED_WAKEUP_NEW_TASK);\r | |
455 | eventsList.add(SELECT);\r | |
456 | eventsList.add(SEM_CREATE);\r | |
457 | eventsList.add(SEND_SIGNAL);\r | |
458 | eventsList.add(SHM_CREATE);\r | |
459 | eventsList.add(SLEEPRQ_BIO);\r | |
460 | eventsList.add(SOCKET_ACCEPT);\r | |
461 | eventsList.add(SOCKET_BIND);\r | |
462 | eventsList.add(SOCKET_CALL);\r | |
463 | eventsList.add(SOCKET_CONNECT);\r | |
464 | eventsList.add(SOCKET_CREATE);\r | |
465 | eventsList.add(SOCKET_GETPEERNAME);\r | |
466 | eventsList.add(SOCKET_GETSOCKNAME);\r | |
467 | eventsList.add(SOCKET_GETSOCKOPT);\r | |
468 | eventsList.add(SOCKET_LISTEN);\r | |
469 | eventsList.add(SOCKET_SETSOCKOPT);\r | |
470 | eventsList.add(SOCKET_SHUTDOWN);\r | |
471 | eventsList.add(SOCKET_SOCKETPAIR);\r | |
472 | eventsList.add(SOFTIRQ_ENTRY);\r | |
473 | eventsList.add(SOFTIRQ_EXIT);\r | |
474 | eventsList.add(SOFTIRQ_RAISE);\r | |
475 | eventsList.add(SOFTIRQ_VEC);\r | |
476 | eventsList.add(START_COMMIT);\r | |
477 | eventsList.add(STATEDUMP_END);\r | |
478 | eventsList.add(SYS_CALL_TABLE);\r | |
479 | eventsList.add(SYSCALL_ENTRY);\r | |
480 | eventsList.add(SYSCALL_EXIT);\r | |
481 | eventsList.add(TASKLET_LOW_ENTRY);\r | |
482 | eventsList.add(TASKLET_LOW_EXIT);\r | |
483 | eventsList.add(TCPV4_RCV);\r | |
484 | eventsList.add(TIMER_ITIMER_EXPIRED);\r | |
485 | eventsList.add(TIMER_ITIMER_SET);\r | |
486 | eventsList.add(TIMER_SET);\r | |
487 | eventsList.add(TIMER_TIMEOUT);\r | |
488 | eventsList.add(TIMER_UPDATE_TIME);\r | |
489 | eventsList.add(UDPV4_RCV);\r | |
490 | eventsList.add(UNPLUG_IO);\r | |
491 | eventsList.add(UNPLUG_TIMER);\r | |
492 | eventsList.add(VM_MAP);\r | |
493 | eventsList.add(VPRINTK);\r | |
494 | eventsList.add(WAIT_ON_PAGE_END);\r | |
495 | eventsList.add(WAIT_ON_PAGE_START);\r | |
496 | eventsList.add(WRITE);\r | |
497 | eventsList.add(WRITEV);\r | |
498 | \r | |
499 | return eventsList;\r | |
500 | }\r | |
501 | \r | |
502 | /**\r | |
503 | * Prints the stack content to the console.\r | |
504 | */\r | |
505 | public void print() {\r | |
506 | fStack.printContent();\r | |
507 | }\r | |
508 | } |