Commit | Line | Data |
---|---|---|
43adec95 ACM |
1 | /* |
2 | * Builtin evlist command: Show the list of event selectors present | |
3 | * in a perf.data file. | |
4 | */ | |
5 | #include "builtin.h" | |
6 | ||
7 | #include "util/util.h" | |
8 | ||
9 | #include <linux/list.h> | |
10 | ||
11 | #include "perf.h" | |
12 | #include "util/evlist.h" | |
13 | #include "util/evsel.h" | |
14 | #include "util/parse-events.h" | |
15 | #include "util/parse-options.h" | |
16 | #include "util/session.h" | |
17 | ||
26252ea6 ACM |
18 | struct perf_attr_details { |
19 | bool freq; | |
20 | bool verbose; | |
21 | }; | |
22 | ||
23 | static int comma_printf(bool *first, const char *fmt, ...) | |
24 | { | |
25 | va_list args; | |
26 | int ret = 0; | |
27 | ||
28 | if (!*first) { | |
29 | ret += printf(","); | |
30 | } else { | |
31 | ret += printf(":"); | |
32 | *first = false; | |
33 | } | |
34 | ||
35 | va_start(args, fmt); | |
36 | ret += vprintf(fmt, args); | |
37 | va_end(args); | |
38 | return ret; | |
39 | } | |
40 | ||
41 | static int __if_print(bool *first, const char *field, u64 value) | |
42 | { | |
43 | if (value == 0) | |
44 | return 0; | |
45 | ||
46 | return comma_printf(first, " %s: %" PRIu64, field, value); | |
47 | } | |
48 | ||
49 | #define if_print(field) __if_print(&first, #field, pos->attr.field) | |
43adec95 | 50 | |
26252ea6 | 51 | static int __cmd_evlist(const char *input_name, struct perf_attr_details *details) |
43adec95 ACM |
52 | { |
53 | struct perf_session *session; | |
54 | struct perf_evsel *pos; | |
55 | ||
56 | session = perf_session__new(input_name, O_RDONLY, 0, false, NULL); | |
57 | if (session == NULL) | |
58 | return -ENOMEM; | |
59 | ||
26252ea6 ACM |
60 | list_for_each_entry(pos, &session->evlist->entries, node) { |
61 | bool first = true; | |
62 | ||
7289f83c | 63 | printf("%s", perf_evsel__name(pos)); |
26252ea6 ACM |
64 | |
65 | if (details->verbose || details->freq) { | |
66 | comma_printf(&first, " sample_freq=%" PRIu64, | |
67 | (u64)pos->attr.sample_freq); | |
68 | } | |
69 | ||
70 | if (details->verbose) { | |
71 | if_print(type); | |
72 | if_print(config); | |
73 | if_print(config1); | |
74 | if_print(config2); | |
75 | if_print(size); | |
76 | if_print(sample_type); | |
77 | if_print(read_format); | |
78 | if_print(disabled); | |
79 | if_print(inherit); | |
80 | if_print(pinned); | |
81 | if_print(exclusive); | |
82 | if_print(exclude_user); | |
83 | if_print(exclude_kernel); | |
84 | if_print(exclude_hv); | |
85 | if_print(exclude_idle); | |
86 | if_print(mmap); | |
87 | if_print(comm); | |
88 | if_print(freq); | |
89 | if_print(inherit_stat); | |
90 | if_print(enable_on_exec); | |
91 | if_print(task); | |
92 | if_print(watermark); | |
93 | if_print(precise_ip); | |
94 | if_print(mmap_data); | |
95 | if_print(sample_id_all); | |
96 | if_print(exclude_host); | |
97 | if_print(exclude_guest); | |
98 | if_print(__reserved_1); | |
99 | if_print(wakeup_events); | |
100 | if_print(bp_type); | |
101 | if_print(branch_sample_type); | |
102 | } | |
103 | ||
104 | putchar('\n'); | |
105 | } | |
43adec95 ACM |
106 | |
107 | perf_session__delete(session); | |
108 | return 0; | |
109 | } | |
110 | ||
111 | static const char * const evlist_usage[] = { | |
112 | "perf evlist [<options>]", | |
113 | NULL | |
114 | }; | |
115 | ||
1d037ca1 | 116 | int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused) |
43adec95 | 117 | { |
26252ea6 | 118 | struct perf_attr_details details = { .verbose = false, }; |
a1d44b9a | 119 | const char *input_name = NULL; |
26252ea6 ACM |
120 | const struct option options[] = { |
121 | OPT_STRING('i', "input", &input_name, "file", | |
122 | "Input file name"), | |
123 | OPT_BOOLEAN('F', "freq", &details.freq, | |
124 | "Show the sample frequency"), | |
125 | OPT_BOOLEAN('v', "verbose", &details.verbose, | |
126 | "Show all event attr details"), | |
127 | OPT_END() | |
128 | }; | |
129 | ||
43adec95 ACM |
130 | argc = parse_options(argc, argv, options, evlist_usage, 0); |
131 | if (argc) | |
132 | usage_with_options(evlist_usage, options); | |
133 | ||
26252ea6 | 134 | return __cmd_evlist(input_name, &details); |
43adec95 | 135 | } |