aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-annotate.c
diff options
context:
space:
mode:
authorJohn Kacur <jkacur@redhat.com>2009-11-24 09:35:01 -0500
committerIngo Molnar <mingo@elte.hu>2009-11-24 10:37:01 -0500
commite74328d3a17ed75ffdf72b86f289965823a47240 (patch)
tree03b0db84b69f2cb3dce994db0d058804a8748fb1 /tools/perf/builtin-annotate.c
parentc9c7ccaf3a2686ed3a44d69bb1f8b55eeead8a4e (diff)
perf tools: Use common process_event functions for annotate and report
Prevent bit-rot in perf-annotate by using common functions where possible. Here we create process_events.[ch] to hold the common functions. Signed-off-by: John Kacur <jkacur@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: acme@redhat.com LKML-Reference: <1259073301-11506-3-git-send-email-jkacur@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/builtin-annotate.c')
-rw-r--r--tools/perf/builtin-annotate.c56
1 files changed, 2 insertions, 54 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index 6b13a1ecf1e7..59b6123abec2 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -24,6 +24,7 @@
24#include "util/thread.h" 24#include "util/thread.h"
25#include "util/sort.h" 25#include "util/sort.h"
26#include "util/hist.h" 26#include "util/hist.h"
27#include "util/process_events.h"
27 28
28static char const *input_name = "perf.data"; 29static char const *input_name = "perf.data";
29 30
@@ -202,32 +203,6 @@ got_map:
202} 203}
203 204
204static int 205static int
205process_mmap_event(event_t *event, unsigned long offset, unsigned long head)
206{
207 struct map *map = map__new(&event->mmap, NULL, 0);
208 struct thread *thread = threads__findnew(event->mmap.pid);
209
210 dump_printf("%p [%p]: PERF_RECORD_MMAP %d: [%p(%p) @ %p]: %s\n",
211 (void *)(offset + head),
212 (void *)(long)(event->header.size),
213 event->mmap.pid,
214 (void *)(long)event->mmap.start,
215 (void *)(long)event->mmap.len,
216 (void *)(long)event->mmap.pgoff,
217 event->mmap.filename);
218
219 if (thread == NULL || map == NULL) {
220 dump_printf("problem processing PERF_RECORD_MMAP, skipping event.\n");
221 return 0;
222 }
223
224 thread__insert_map(thread, map);
225 total_mmap++;
226
227 return 0;
228}
229
230static int
231process_comm_event(event_t *event, unsigned long offset, unsigned long head) 206process_comm_event(event_t *event, unsigned long offset, unsigned long head)
232{ 207{
233 struct thread *thread = threads__findnew(event->comm.pid); 208 struct thread *thread = threads__findnew(event->comm.pid);
@@ -248,33 +223,6 @@ process_comm_event(event_t *event, unsigned long offset, unsigned long head)
248} 223}
249 224
250static int 225static int
251process_fork_event(event_t *event, unsigned long offset, unsigned long head)
252{
253 struct thread *thread = threads__findnew(event->fork.pid);
254 struct thread *parent = threads__findnew(event->fork.ppid);
255
256 dump_printf("%p [%p]: PERF_RECORD_FORK: %d:%d\n",
257 (void *)(offset + head),
258 (void *)(long)(event->header.size),
259 event->fork.pid, event->fork.ppid);
260
261 /*
262 * A thread clone will have the same PID for both
263 * parent and child.
264 */
265 if (thread == parent)
266 return 0;
267
268 if (!thread || !parent || thread__fork(thread, parent)) {
269 dump_printf("problem processing PERF_RECORD_FORK, skipping event.\n");
270 return -1;
271 }
272 total_fork++;
273
274 return 0;
275}
276
277static int
278process_event(event_t *event, unsigned long offset, unsigned long head) 226process_event(event_t *event, unsigned long offset, unsigned long head)
279{ 227{
280 switch (event->header.type) { 228 switch (event->header.type) {
@@ -288,7 +236,7 @@ process_event(event_t *event, unsigned long offset, unsigned long head)
288 return process_comm_event(event, offset, head); 236 return process_comm_event(event, offset, head);
289 237
290 case PERF_RECORD_FORK: 238 case PERF_RECORD_FORK:
291 return process_fork_event(event, offset, head); 239 return process_task_event(event, offset, head);
292 /* 240 /*
293 * We dont process them right now but they are fine: 241 * We dont process them right now but they are fine:
294 */ 242 */