Commit | Line | Data |
---|---|---|
03c71d1e ASL |
1 | /** |
2 | * | |
3 | */ | |
4 | package org.eclipse.linuxtools.lttng.tests.jni; | |
5 | ||
6 | import junit.framework.TestCase; | |
7 | import java.util.HashMap; | |
8 | import java.util.HashSet; | |
9 | import java.util.List; | |
10 | import java.util.Set; | |
11 | ||
12 | import org.eclipse.linuxtools.lttng.jni.JniEvent; | |
13 | import org.eclipse.linuxtools.lttng.jni.JniMarker; | |
14 | import org.eclipse.linuxtools.lttng.jni.JniMarkerField; | |
15 | import org.eclipse.linuxtools.lttng.jni.JniTrace; | |
9c841e9c WB |
16 | import org.eclipse.linuxtools.lttng.jni.exception.JniException; |
17 | import org.eclipse.linuxtools.lttng.jni.factory.JniTraceFactory; | |
18 | ||
03c71d1e ASL |
19 | |
20 | /** | |
21 | * @author alvaro | |
22 | * | |
23 | */ | |
3b38ea61 | 24 | @SuppressWarnings("nls") |
03c71d1e ASL |
25 | public class Combinations extends TestCase { |
26 | ||
27 | private final static boolean printLttDebug = false; | |
28 | ||
29 | private final static String tracepath="traceset/trace-618339events-1293lost-1cpu"; | |
30 | private final static String eventName = "syscall_state"; | |
31 | ||
32 | private final static Integer expect_syscall_entry = 195596; | |
33 | private final static Integer expect_syscall_exit = 195598; | |
34 | private final static Integer expect_core_marker_format = 177; | |
35 | private final static Integer expect_core_marker_id = 177; | |
36 | ||
37 | // private static final String LTT_EVENT_SYSCALL_ENTRY = "syscall_entry"; | |
38 | // private static final String LTT_EVENT_SYSCALL_EXIT = "syscall_exit"; | |
39 | // private static final String LTT_EVENT_TRAP_ENTRY = "trap_entry"; | |
40 | // private static final String LTT_EVENT_TRAP_EXIT = "trap_exit"; | |
41 | // private static final String LTT_EVENT_PAGE_FAULT_ENTRY = | |
42 | // "page_fault_entry"; | |
43 | // private static final String LTT_EVENT_PAGE_FAULT_EXIT = | |
44 | // "page_fault_exit"; | |
45 | // private static final String LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY = | |
46 | // "page_fault_nosem_entry"; | |
47 | // private static final String LTT_EVENT_PAGE_FAULT_NOSEM_EXIT = | |
48 | // "page_fault_nosem_exit"; | |
49 | // private static final String LTT_EVENT_IRQ_ENTRY = "irq_entry"; | |
50 | // private static final String LTT_EVENT_IRQ_EXIT = "irq_exit"; | |
51 | // private static final String LTT_EVENT_SOFT_IRQ_RAISE = "softirq_raise"; | |
52 | // private static final String LTT_EVENT_SOFT_IRQ_ENTRY = "softirq_entry"; | |
53 | // private static final String LTT_EVENT_SOFT_IRQ_EXIT = "softirq_exit"; | |
54 | // private static final String LTT_EVENT_SCHED_SCHEDULE = "sched_schedule"; | |
55 | // private static final String LTT_EVENT_PROCESS_FORK = "process_fork"; | |
56 | // private static final String LTT_EVENT_KTHREAD_CREATE = "kthread_create"; | |
57 | // private static final String LTT_EVENT_PROCESS_EXIT = "process_exit"; | |
58 | // private static final String LTT_EVENT_PROCESS_FREE = "process_free"; | |
59 | // private static final String LTT_EVENT_EXEC = "exec"; | |
60 | // private static final String LTT_EVENT_PROCESS_STATE = "process_state"; | |
61 | // private static final String LTT_EVENT_STATEDUMP_END = "statedump_end"; | |
62 | // private static final String LTT_EVENT_FUNCTION_ENTRY = "function_entry"; | |
63 | // private static final String LTT_EVENT_FUNCTION_EXIT = "function_exit"; | |
64 | // private static final String LTT_EVENT_THREAD_BRAND = "thread_brand"; | |
65 | // private static final String LTT_EVENT_REQUEST_ISSUE = | |
66 | // "_blk_request_issue"; | |
67 | // private static final String LTT_EVENT_REQUEST_COMPLETE = | |
68 | // "_blk_request_complete"; | |
69 | // private static final String LTT_EVENT_LIST_INTERRUPT = "interrupt"; | |
70 | // private static final String LTT_EVENT_SYS_CALL_TABLE = "sys_call_table"; | |
71 | // private static final String LTT_EVENT_SOFTIRQ_VEC = "softirq_vec"; | |
72 | // private static final String LTT_EVENT_KPROBE_TABLE = "kprobe_table"; | |
73 | // private static final String LTT_EVENT_KPROBE = "kprobe"; | |
74 | ||
75 | // enum EventString { | |
76 | // syscall_entry, syscall_exit, trap_entry, trap_exit, page_fault_entry, | |
77 | // page_fault_exit, page_fault_nosem_entry, page_fault_nosem_exit, | |
78 | // irq_entry, irq_exit, softirq_raise, softirq_entry, softirq_exit, | |
79 | // sched_schedule, process_fork, kthread_create, process_exit, process_free, | |
80 | // exec, process_state, statedump_end, function_entry, function_exit, | |
81 | // thread_brand, _blk_request_issue, blk_request_complete, interrupt, | |
82 | // sys_call_table, softirq_vec, kprobe_table, kprobe | |
83 | // }; | |
84 | ||
85 | enum EvStateTrans { | |
86 | syscall_entry, syscall_exit, trap_entry, trap_exit, page_fault_entry, page_fault_exit, page_fault_nosem_entry, page_fault_nosem_exit, irq_entry, irq_exit, softirq_raise, softirq_entry, softirq_exit, sched_schedule, process_fork, kthread_create, process_exit, process_free, exec, thread_brand | |
87 | }; | |
88 | ||
89 | private static Set<String> stateSet; | |
90 | static { | |
91 | stateSet = new HashSet<String>(); | |
92 | EvStateTrans[] stateArr = EvStateTrans.values(); | |
93 | for (EvStateTrans event : stateArr) { | |
94 | stateSet.add(event.name()); | |
95 | } | |
96 | } | |
97 | ||
98 | private JniEvent prepareEventToTest() { | |
99 | ||
100 | JniEvent tmpEvent = null; | |
101 | // This trace should be valid | |
102 | try { | |
a3767fd9 | 103 | tmpEvent = JniTraceFactory.getJniTrace(tracepath, null, printLttDebug).requestEventByName(eventName); |
03c71d1e ASL |
104 | } catch (JniException e) { |
105 | } | |
106 | ||
107 | return tmpEvent; | |
108 | } | |
109 | ||
110 | public void testGetSpecEventFields() { | |
111 | JniEvent event = prepareEventToTest(); | |
112 | JniMarker dmarker = event.requestEventMarker(); | |
113 | List<JniMarkerField> markers = dmarker.getMarkerFieldsArrayList(); | |
114 | ||
115 | assertNotNull(markers); | |
116 | System.out.println("Markers: " + markers); | |
117 | ||
118 | } | |
119 | ||
120 | public void testEventsLoop() { | |
121 | JniTrace trace = null; | |
122 | JniEvent event = null; | |
123 | try { | |
a3767fd9 | 124 | trace = JniTraceFactory.getJniTrace(tracepath, null, printLttDebug); |
03c71d1e ASL |
125 | } catch (JniException e) { |
126 | e.printStackTrace(); | |
127 | } | |
128 | ||
129 | HashMap<String, Integer> eventCount = new HashMap<String, Integer>(); | |
130 | while (true) { | |
131 | event = trace.readNextEvent(); | |
132 | if (event == null) { | |
133 | break; | |
134 | } | |
135 | JniMarker dmarker = event.requestEventMarker(); | |
136 | assertNotNull(dmarker); | |
137 | ||
138 | String name = dmarker.getName(); | |
139 | ||
140 | if (eventCount.containsKey(name)) { | |
141 | Integer cnt = eventCount.get(name); | |
142 | eventCount.put(name, cnt + 1); | |
143 | } else { | |
144 | eventCount.put(name, 1); | |
145 | // Only print state transition states and it's format | |
146 | if (stateSet.contains(name)) { | |
147 | System.out.println("\nMarker name: " + name + "\nFields:"); | |
148 | ||
149 | Object[] tmpMarkerFields = dmarker.getMarkerFieldsArrayList().toArray(); | |
150 | String[] fields = new String[tmpMarkerFields.length]; | |
151 | ||
152 | for (int pos = 0; pos < tmpMarkerFields.length; pos++) { | |
153 | fields[pos] = ((JniMarkerField) tmpMarkerFields[pos]).getField() + ":" + ((JniMarkerField) tmpMarkerFields[pos]).getFormat(); | |
154 | } | |
155 | ||
156 | for (String field : fields) { | |
157 | System.out.println(field + " "); | |
158 | } | |
159 | } | |
160 | } | |
161 | } | |
162 | ||
163 | for (String state : eventCount.keySet()) { | |
164 | System.out.println(state + " : " + eventCount.get(state)); | |
165 | } | |
166 | ||
167 | assertEquals("syscall_entry mismatch", expect_syscall_entry, eventCount | |
168 | .get(EvStateTrans.syscall_entry.name())); | |
169 | assertEquals("syscall_exit mismatch", expect_syscall_exit, eventCount | |
170 | .get(EvStateTrans.syscall_exit.name())); | |
171 | assertEquals("core_market_format mismatch", expect_core_marker_format, | |
172 | eventCount.get("core_marker_format")); | |
173 | assertEquals("core_market_id mismatch", expect_core_marker_id, | |
174 | eventCount.get("core_marker_id")); | |
175 | } | |
176 | ||
177 | } |