diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/util/event.h | 1 | ||||
| -rw-r--r-- | tools/perf/util/session.c | 64 |
2 files changed, 40 insertions, 25 deletions
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index 4716a8f6d3eb..2b7e91902f10 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h | |||
| @@ -85,6 +85,7 @@ struct build_id_event { | |||
| 85 | }; | 85 | }; |
| 86 | 86 | ||
| 87 | enum perf_user_event_type { /* above any possible kernel type */ | 87 | enum perf_user_event_type { /* above any possible kernel type */ |
| 88 | PERF_RECORD_USER_TYPE_START = 64, | ||
| 88 | PERF_RECORD_HEADER_ATTR = 64, | 89 | PERF_RECORD_HEADER_ATTR = 64, |
| 89 | PERF_RECORD_HEADER_EVENT_TYPE = 65, | 90 | PERF_RECORD_HEADER_EVENT_TYPE = 65, |
| 90 | PERF_RECORD_HEADER_TRACING_DATA = 66, | 91 | PERF_RECORD_HEADER_TRACING_DATA = 66, |
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index e5d0ed9603ee..12761d5bc92a 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
| @@ -665,6 +665,35 @@ static void perf_session__print_tstamp(struct perf_session *session, | |||
| 665 | printf("%Lu ", sample->time); | 665 | printf("%Lu ", sample->time); |
| 666 | } | 666 | } |
| 667 | 667 | ||
| 668 | static void dump_event(struct perf_session *session, event_t *event, | ||
| 669 | u64 file_offset, struct sample_data *sample) | ||
| 670 | { | ||
| 671 | if (!dump_trace) | ||
| 672 | return; | ||
| 673 | |||
| 674 | dump_printf("\n%#Lx [%#x]: event: %d\n", file_offset, | ||
| 675 | event->header.size, event->header.type); | ||
| 676 | |||
| 677 | trace_event(event); | ||
| 678 | |||
| 679 | if (sample) | ||
| 680 | perf_session__print_tstamp(session, event, sample); | ||
| 681 | |||
| 682 | dump_printf("%#Lx [%#x]: PERF_RECORD_%s", | ||
| 683 | file_offset, event->header.size, | ||
| 684 | event__get_event_name(event->header.type)); | ||
| 685 | } | ||
| 686 | |||
| 687 | static void dump_sample(struct perf_session *session, event_t *event, | ||
| 688 | struct sample_data *sample) | ||
| 689 | { | ||
| 690 | dump_printf("(IP, %d): %d/%d: %#Lx period: %Ld\n", event->header.misc, | ||
| 691 | sample->pid, sample->tid, sample->ip, sample->period); | ||
| 692 | |||
| 693 | if (session->sample_type & PERF_SAMPLE_CALLCHAIN) | ||
| 694 | callchain__dump(sample); | ||
| 695 | } | ||
| 696 | |||
| 668 | static int perf_session_deliver_event(struct perf_session *session, | 697 | static int perf_session_deliver_event(struct perf_session *session, |
| 669 | event_t *event, | 698 | event_t *event, |
| 670 | struct sample_data *sample, | 699 | struct sample_data *sample, |
| @@ -703,32 +732,24 @@ static int perf_session__process_event(struct perf_session *session, | |||
| 703 | struct sample_data sample; | 732 | struct sample_data sample; |
| 704 | int ret; | 733 | int ret; |
| 705 | 734 | ||
| 706 | trace_event(event); | ||
| 707 | |||
| 708 | if (session->header.needs_swap && event__swap_ops[event->header.type]) | 735 | if (session->header.needs_swap && event__swap_ops[event->header.type]) |
| 709 | event__swap_ops[event->header.type](event); | 736 | event__swap_ops[event->header.type](event); |
| 710 | 737 | ||
| 711 | if (event->header.type >= PERF_RECORD_MMAP && | 738 | if (event->header.type >= PERF_RECORD_HEADER_MAX) |
| 712 | event->header.type <= PERF_RECORD_SAMPLE) { | 739 | return -EINVAL; |
| 713 | event__parse_sample(event, session, &sample); | ||
| 714 | if (dump_trace) | ||
| 715 | perf_session__print_tstamp(session, event, &sample); | ||
| 716 | } | ||
| 717 | 740 | ||
| 718 | if (event->header.type < PERF_RECORD_HEADER_MAX) { | 741 | hists__inc_nr_events(&session->hists, event->header.type); |
| 719 | dump_printf("%#Lx [%#x]: PERF_RECORD_%s", | 742 | |
| 720 | file_offset, event->header.size, | 743 | if (event->header.type >= PERF_RECORD_USER_TYPE_START) |
| 721 | event__get_event_name(event->header.type)); | 744 | dump_event(session, event, file_offset, NULL); |
| 722 | hists__inc_nr_events(&session->hists, event->header.type); | 745 | else { |
| 746 | event__parse_sample(event, session, &sample); | ||
| 747 | dump_event(session, event, file_offset, &sample); | ||
| 723 | } | 748 | } |
| 724 | 749 | ||
| 725 | /* These events are processed right away */ | 750 | /* These events are processed right away */ |
| 726 | switch (event->header.type) { | 751 | switch (event->header.type) { |
| 727 | case PERF_RECORD_SAMPLE: | 752 | case PERF_RECORD_SAMPLE: |
| 728 | dump_printf("(IP, %d): %d/%d: %#Lx period: %Ld\n", | ||
| 729 | event->header.misc, | ||
| 730 | sample.pid, sample.tid, sample.ip, sample.period); | ||
| 731 | |||
| 732 | if (session->sample_type & PERF_SAMPLE_CALLCHAIN) { | 753 | if (session->sample_type & PERF_SAMPLE_CALLCHAIN) { |
| 733 | if (!ip_callchain__valid(sample.callchain, event)) { | 754 | if (!ip_callchain__valid(sample.callchain, event)) { |
| 734 | pr_debug("call-chain problem with event, " | 755 | pr_debug("call-chain problem with event, " |
| @@ -738,9 +759,8 @@ static int perf_session__process_event(struct perf_session *session, | |||
| 738 | sample.period; | 759 | sample.period; |
| 739 | return 0; | 760 | return 0; |
| 740 | } | 761 | } |
| 741 | |||
| 742 | callchain__dump(&sample); | ||
| 743 | } | 762 | } |
| 763 | dump_sample(session, event, &sample); | ||
| 744 | break; | 764 | break; |
| 745 | 765 | ||
| 746 | case PERF_RECORD_HEADER_ATTR: | 766 | case PERF_RECORD_HEADER_ATTR: |
| @@ -870,9 +890,6 @@ more: | |||
| 870 | 890 | ||
| 871 | head += size; | 891 | head += size; |
| 872 | 892 | ||
| 873 | dump_printf("\n%#Lx [%#x]: event: %d\n", | ||
| 874 | head, event.header.size, event.header.type); | ||
| 875 | |||
| 876 | if (skip > 0) | 893 | if (skip > 0) |
| 877 | head += skip; | 894 | head += skip; |
| 878 | 895 | ||
| @@ -961,9 +978,6 @@ more: | |||
| 961 | 978 | ||
| 962 | size = event->header.size; | 979 | size = event->header.size; |
| 963 | 980 | ||
| 964 | dump_printf("\n%#Lx [%#x]: event: %d\n", | ||
| 965 | file_pos, event->header.size, event->header.type); | ||
| 966 | |||
| 967 | if (size == 0 || | 981 | if (size == 0 || |
| 968 | perf_session__process_event(session, event, ops, file_pos) < 0) { | 982 | perf_session__process_event(session, event, ops, file_pos) < 0) { |
| 969 | dump_printf("%#Lx [%#x]: skipping unknown header type: %d\n", | 983 | dump_printf("%#Lx [%#x]: skipping unknown header type: %d\n", |
