aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2012-08-07 22:50:21 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2012-08-07 22:50:21 -0400
commit9782243353ec135327a80c76c63464e592949cd1 (patch)
tree74e7269019ba3d7cb63b8fb9bd933fdc41c070d7
parent7f7f8d0bea5d6bb985f4ae84ca3daff34802fd32 (diff)
perf script: Stop using pevent directly
We can get all that is needed using just event_format, that is available via evsel->tp_format now. Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-2hsr1686epa9f0vx4yg7z2zj@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/builtin-script.c48
-rw-r--r--tools/perf/util/scripting-engines/trace-event-perl.c14
-rw-r--r--tools/perf/util/scripting-engines/trace-event-python.c5
-rw-r--r--tools/perf/util/trace-event-parse.c4
-rw-r--r--tools/perf/util/trace-event-scripting.c1
-rw-r--r--tools/perf/util/trace-event.h3
6 files changed, 28 insertions, 47 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 8dba4707b03f..6425612b4d99 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -28,11 +28,6 @@ static bool system_wide;
28static const char *cpu_list; 28static const char *cpu_list;
29static DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS); 29static DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
30 30
31struct perf_script {
32 struct perf_tool tool;
33 struct perf_session *session;
34};
35
36enum perf_output_field { 31enum perf_output_field {
37 PERF_OUTPUT_COMM = 1U << 0, 32 PERF_OUTPUT_COMM = 1U << 0,
38 PERF_OUTPUT_TID = 1U << 1, 33 PERF_OUTPUT_TID = 1U << 1,
@@ -399,11 +394,8 @@ static void print_sample_bts(union perf_event *event,
399 printf("\n"); 394 printf("\n");
400} 395}
401 396
402static void process_event(union perf_event *event __unused, 397static void process_event(union perf_event *event, struct perf_sample *sample,
403 struct pevent *pevent __unused, 398 struct perf_evsel *evsel, struct machine *machine,
404 struct perf_sample *sample,
405 struct perf_evsel *evsel,
406 struct machine *machine,
407 struct thread *thread) 399 struct thread *thread)
408{ 400{
409 struct perf_event_attr *attr = &evsel->attr; 401 struct perf_event_attr *attr = &evsel->attr;
@@ -488,7 +480,6 @@ static int process_sample_event(struct perf_tool *tool __used,
488 struct machine *machine) 480 struct machine *machine)
489{ 481{
490 struct addr_location al; 482 struct addr_location al;
491 struct perf_script *scr = container_of(tool, struct perf_script, tool);
492 struct thread *thread = machine__findnew_thread(machine, event->ip.tid); 483 struct thread *thread = machine__findnew_thread(machine, event->ip.tid);
493 484
494 if (thread == NULL) { 485 if (thread == NULL) {
@@ -520,27 +511,24 @@ static int process_sample_event(struct perf_tool *tool __used,
520 if (cpu_list && !test_bit(sample->cpu, cpu_bitmap)) 511 if (cpu_list && !test_bit(sample->cpu, cpu_bitmap))
521 return 0; 512 return 0;
522 513
523 scripting_ops->process_event(event, scr->session->pevent, 514 scripting_ops->process_event(event, sample, evsel, machine, thread);
524 sample, evsel, machine, thread);
525 515
526 evsel->hists.stats.total_period += sample->period; 516 evsel->hists.stats.total_period += sample->period;
527 return 0; 517 return 0;
528} 518}
529 519
530static struct perf_script perf_script = { 520static struct perf_tool perf_script = {
531 .tool = { 521 .sample = process_sample_event,
532 .sample = process_sample_event, 522 .mmap = perf_event__process_mmap,
533 .mmap = perf_event__process_mmap, 523 .comm = perf_event__process_comm,
534 .comm = perf_event__process_comm, 524 .exit = perf_event__process_task,
535 .exit = perf_event__process_task, 525 .fork = perf_event__process_task,
536 .fork = perf_event__process_task, 526 .attr = perf_event__process_attr,
537 .attr = perf_event__process_attr, 527 .event_type = perf_event__process_event_type,
538 .event_type = perf_event__process_event_type, 528 .tracing_data = perf_event__process_tracing_data,
539 .tracing_data = perf_event__process_tracing_data, 529 .build_id = perf_event__process_build_id,
540 .build_id = perf_event__process_build_id, 530 .ordered_samples = true,
541 .ordered_samples = true, 531 .ordering_requires_timestamps = true,
542 .ordering_requires_timestamps = true,
543 },
544}; 532};
545 533
546extern volatile int session_done; 534extern volatile int session_done;
@@ -556,7 +544,7 @@ static int __cmd_script(struct perf_session *session)
556 544
557 signal(SIGINT, sig_handler); 545 signal(SIGINT, sig_handler);
558 546
559 ret = perf_session__process_events(session, &perf_script.tool); 547 ret = perf_session__process_events(session, &perf_script);
560 548
561 if (debug_mode) 549 if (debug_mode)
562 pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered); 550 pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered);
@@ -1339,12 +1327,10 @@ int cmd_script(int argc, const char **argv, const char *prefix __used)
1339 setup_pager(); 1327 setup_pager();
1340 1328
1341 session = perf_session__new(input_name, O_RDONLY, 0, false, 1329 session = perf_session__new(input_name, O_RDONLY, 0, false,
1342 &perf_script.tool); 1330 &perf_script);
1343 if (session == NULL) 1331 if (session == NULL)
1344 return -ENOMEM; 1332 return -ENOMEM;
1345 1333
1346 perf_script.session = session;
1347
1348 if (cpu_list) { 1334 if (cpu_list) {
1349 if (perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap)) 1335 if (perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap))
1350 return -1; 1336 return -1;
diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c
index c26628116593..52580d09d75c 100644
--- a/tools/perf/util/scripting-engines/trace-event-perl.c
+++ b/tools/perf/util/scripting-engines/trace-event-perl.c
@@ -258,7 +258,6 @@ static inline struct event_format *find_cache_event(struct perf_evsel *evsel)
258} 258}
259 259
260static void perl_process_tracepoint(union perf_event *perf_event __unused, 260static void perl_process_tracepoint(union perf_event *perf_event __unused,
261 struct pevent *pevent,
262 struct perf_sample *sample, 261 struct perf_sample *sample,
263 struct perf_evsel *evsel, 262 struct perf_evsel *evsel,
264 struct machine *machine __unused, 263 struct machine *machine __unused,
@@ -284,7 +283,7 @@ static void perl_process_tracepoint(union perf_event *perf_event __unused,
284 if (!event) 283 if (!event)
285 die("ug! no event found for type %d", evsel->attr.config); 284 die("ug! no event found for type %d", evsel->attr.config);
286 285
287 pid = trace_parse_common_pid(pevent, data); 286 pid = raw_field_value(event, "common_pid", data);
288 287
289 sprintf(handler, "%s::%s", event->system, event->name); 288 sprintf(handler, "%s::%s", event->system, event->name);
290 289
@@ -317,7 +316,7 @@ static void perl_process_tracepoint(union perf_event *perf_event __unused,
317 offset = field->offset; 316 offset = field->offset;
318 XPUSHs(sv_2mortal(newSVpv((char *)data + offset, 0))); 317 XPUSHs(sv_2mortal(newSVpv((char *)data + offset, 0)));
319 } else { /* FIELD_IS_NUMERIC */ 318 } else { /* FIELD_IS_NUMERIC */
320 val = read_size(pevent, data + field->offset, 319 val = read_size(event, data + field->offset,
321 field->size); 320 field->size);
322 if (field->flags & FIELD_IS_SIGNED) { 321 if (field->flags & FIELD_IS_SIGNED) {
323 XPUSHs(sv_2mortal(newSViv(val))); 322 XPUSHs(sv_2mortal(newSViv(val)));
@@ -346,9 +345,9 @@ static void perl_process_tracepoint(union perf_event *perf_event __unused,
346 LEAVE; 345 LEAVE;
347} 346}
348 347
349static void perl_process_event_generic(union perf_event *pevent __unused, 348static void perl_process_event_generic(union perf_event *event,
350 struct perf_sample *sample, 349 struct perf_sample *sample,
351 struct perf_evsel *evsel __unused, 350 struct perf_evsel *evsel,
352 struct machine *machine __unused, 351 struct machine *machine __unused,
353 struct thread *thread __unused) 352 struct thread *thread __unused)
354{ 353{
@@ -360,7 +359,7 @@ static void perl_process_event_generic(union perf_event *pevent __unused,
360 ENTER; 359 ENTER;
361 SAVETMPS; 360 SAVETMPS;
362 PUSHMARK(SP); 361 PUSHMARK(SP);
363 XPUSHs(sv_2mortal(newSVpvn((const char *)pevent, pevent->header.size))); 362 XPUSHs(sv_2mortal(newSVpvn((const char *)event, event->header.size)));
364 XPUSHs(sv_2mortal(newSVpvn((const char *)&evsel->attr, sizeof(evsel->attr)))); 363 XPUSHs(sv_2mortal(newSVpvn((const char *)&evsel->attr, sizeof(evsel->attr))));
365 XPUSHs(sv_2mortal(newSVpvn((const char *)sample, sizeof(*sample)))); 364 XPUSHs(sv_2mortal(newSVpvn((const char *)sample, sizeof(*sample))));
366 XPUSHs(sv_2mortal(newSVpvn((const char *)sample->raw_data, sample->raw_size))); 365 XPUSHs(sv_2mortal(newSVpvn((const char *)sample->raw_data, sample->raw_size)));
@@ -373,13 +372,12 @@ static void perl_process_event_generic(union perf_event *pevent __unused,
373} 372}
374 373
375static void perl_process_event(union perf_event *event, 374static void perl_process_event(union perf_event *event,
376 struct pevent *pevent,
377 struct perf_sample *sample, 375 struct perf_sample *sample,
378 struct perf_evsel *evsel, 376 struct perf_evsel *evsel,
379 struct machine *machine, 377 struct machine *machine,
380 struct thread *thread) 378 struct thread *thread)
381{ 379{
382 perl_process_tracepoint(event, pevent, sample, evsel, machine, thread); 380 perl_process_tracepoint(event, sample, evsel, machine, thread);
383 perl_process_event_generic(event, sample, evsel, machine, thread); 381 perl_process_event_generic(event, sample, evsel, machine, thread);
384} 382}
385 383
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 8006978d8398..df7d33d1de0f 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -221,7 +221,6 @@ static inline struct event_format *find_cache_event(struct perf_evsel *evsel)
221} 221}
222 222
223static void python_process_event(union perf_event *perf_event __unused, 223static void python_process_event(union perf_event *perf_event __unused,
224 struct pevent *pevent,
225 struct perf_sample *sample, 224 struct perf_sample *sample,
226 struct perf_evsel *evsel, 225 struct perf_evsel *evsel,
227 struct machine *machine __unused, 226 struct machine *machine __unused,
@@ -248,7 +247,7 @@ static void python_process_event(union perf_event *perf_event __unused,
248 if (!event) 247 if (!event)
249 die("ug! no event found for type %d", (int)evsel->attr.config); 248 die("ug! no event found for type %d", (int)evsel->attr.config);
250 249
251 pid = trace_parse_common_pid(pevent, data); 250 pid = raw_field_value(event, "common_pid", data);
252 251
253 sprintf(handler_name, "%s__%s", event->system, event->name); 252 sprintf(handler_name, "%s__%s", event->system, event->name);
254 253
@@ -293,7 +292,7 @@ static void python_process_event(union perf_event *perf_event __unused,
293 offset = field->offset; 292 offset = field->offset;
294 obj = PyString_FromString((char *)data + offset); 293 obj = PyString_FromString((char *)data + offset);
295 } else { /* FIELD_IS_NUMERIC */ 294 } else { /* FIELD_IS_NUMERIC */
296 val = read_size(pevent, data + field->offset, 295 val = read_size(event, data + field->offset,
297 field->size); 296 field->size);
298 if (field->flags & FIELD_IS_SIGNED) { 297 if (field->flags & FIELD_IS_SIGNED) {
299 if ((long long)val >= LONG_MIN && 298 if ((long long)val >= LONG_MIN &&
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c
index 12088348ac02..4cb7f3831f78 100644
--- a/tools/perf/util/trace-event-parse.c
+++ b/tools/perf/util/trace-event-parse.c
@@ -162,9 +162,9 @@ int trace_parse_common_pid(struct pevent *pevent, void *data)
162 return pevent_data_pid(pevent, &record); 162 return pevent_data_pid(pevent, &record);
163} 163}
164 164
165unsigned long long read_size(struct pevent *pevent, void *ptr, int size) 165unsigned long long read_size(struct event_format *event, void *ptr, int size)
166{ 166{
167 return pevent_read_number(pevent, ptr, size); 167 return pevent_read_number(event->pevent, ptr, size);
168} 168}
169 169
170void event_format__print(struct event_format *event, 170void event_format__print(struct event_format *event,
diff --git a/tools/perf/util/trace-event-scripting.c b/tools/perf/util/trace-event-scripting.c
index 474aa7a7df43..aceb8eea15fc 100644
--- a/tools/perf/util/trace-event-scripting.c
+++ b/tools/perf/util/trace-event-scripting.c
@@ -36,7 +36,6 @@ static int stop_script_unsupported(void)
36} 36}
37 37
38static void process_event_unsupported(union perf_event *event __unused, 38static void process_event_unsupported(union perf_event *event __unused,
39 struct pevent *pevent __unused,
40 struct perf_sample *sample __unused, 39 struct perf_sample *sample __unused,
41 struct perf_evsel *evsel __unused, 40 struct perf_evsel *evsel __unused,
42 struct machine *machine __unused, 41 struct machine *machine __unused,
diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h
index 069d105e0fc0..cee16350cd86 100644
--- a/tools/perf/util/trace-event.h
+++ b/tools/perf/util/trace-event.h
@@ -58,7 +58,7 @@ int trace_parse_common_pid(struct pevent *pevent, void *data);
58 58
59struct event_format *trace_find_next_event(struct pevent *pevent, 59struct event_format *trace_find_next_event(struct pevent *pevent,
60 struct event_format *event); 60 struct event_format *event);
61unsigned long long read_size(struct pevent *pevent, void *ptr, int size); 61unsigned long long read_size(struct event_format *event, void *ptr, int size);
62unsigned long long eval_flag(const char *flag); 62unsigned long long eval_flag(const char *flag);
63 63
64struct pevent_record *trace_read_data(struct pevent *pevent, int cpu); 64struct pevent_record *trace_read_data(struct pevent *pevent, int cpu);
@@ -81,7 +81,6 @@ struct scripting_ops {
81 int (*start_script) (const char *script, int argc, const char **argv); 81 int (*start_script) (const char *script, int argc, const char **argv);
82 int (*stop_script) (void); 82 int (*stop_script) (void);
83 void (*process_event) (union perf_event *event, 83 void (*process_event) (union perf_event *event,
84 struct pevent *pevent,
85 struct perf_sample *sample, 84 struct perf_sample *sample,
86 struct perf_evsel *evsel, 85 struct perf_evsel *evsel,
87 struct machine *machine, 86 struct machine *machine,