diff options
Diffstat (limited to 'tools/perf/builtin-evlist.c')
| -rw-r--r-- | tools/perf/builtin-evlist.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c index 26760322c4f..c99e0de7e54 100644 --- a/tools/perf/builtin-evlist.c +++ b/tools/perf/builtin-evlist.c @@ -14,41 +14,53 @@ #include "util/parse-events.h" #include "util/parse-options.h" #include "util/session.h" +#include "util/data.h" -static const char *input_name; - -static int __cmd_evlist(void) +static int __cmd_evlist(const char *file_name, struct perf_attr_details *details) { struct perf_session *session; struct perf_evsel *pos; + struct perf_data_file file = { + .path = file_name, + .mode = PERF_DATA_MODE_READ, + }; - session = perf_session__new(input_name, O_RDONLY, 0, false, NULL); + session = perf_session__new(&file, 0, NULL); if (session == NULL) return -ENOMEM; - list_for_each_entry(pos, &session->evlist->entries, node) - printf("%s\n", event_name(pos)); + evlist__for_each(session->evlist, pos) + perf_evsel__fprintf(pos, details, stdout); perf_session__delete(session); return 0; } -static const char * const evlist_usage[] = { - "perf evlist [<options>]", - NULL -}; - -static const struct option options[] = { - OPT_STRING('i', "input", &input_name, "file", - "input file name"), +int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused) +{ + struct perf_attr_details details = { .verbose = false, }; + const struct option options[] = { + OPT_STRING('i', "input", &input_name, "file", "Input file name"), + OPT_BOOLEAN('F', "freq", &details.freq, "Show the sample frequency"), + OPT_BOOLEAN('v', "verbose", &details.verbose, + "Show all event attr details"), + OPT_BOOLEAN('g', "group", &details.event_group, + "Show event group information"), OPT_END() -}; + }; + const char * const evlist_usage[] = { + "perf evlist [<options>]", + NULL + }; -int cmd_evlist(int argc, const char **argv, const char *prefix __used) -{ argc = parse_options(argc, argv, options, evlist_usage, 0); if (argc) usage_with_options(evlist_usage, options); - return __cmd_evlist(); + if (details.event_group && (details.verbose || details.freq)) { + pr_err("--group option is not compatible with other options\n"); + usage_with_options(evlist_usage, options); + } + + return __cmd_evlist(input_name, &details); } |
