Linux Perf
builtin-evlist.c
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Builtin evlist command: Show the list of event selectors present
4  * in a perf.data file.
5  */
6 #include "builtin.h"
7 
8 #include "util/util.h"
9 
10 #include <linux/list.h>
11 
12 #include "perf.h"
13 #include "util/evlist.h"
14 #include "util/evsel.h"
15 #include "util/parse-events.h"
16 #include <subcmd/parse-options.h>
17 #include "util/session.h"
18 #include "util/data.h"
19 #include "util/debug.h"
20 
21 static int __cmd_evlist(const char *file_name, struct perf_attr_details *details)
22 {
23  struct perf_session *session;
24  struct perf_evsel *pos;
25  struct perf_data data = {
26  .file = {
27  .path = file_name,
28  },
29  .mode = PERF_DATA_MODE_READ,
30  .force = details->force,
31  };
32  bool has_tracepoint = false;
33 
34  session = perf_session__new(&data, 0, NULL);
35  if (session == NULL)
36  return -1;
37 
38  evlist__for_each_entry(session->evlist, pos) {
39  perf_evsel__fprintf(pos, details, stdout);
40 
41  if (pos->attr.type == PERF_TYPE_TRACEPOINT)
42  has_tracepoint = true;
43  }
44 
45  if (has_tracepoint && !details->trace_fields)
46  printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
47 
48  perf_session__delete(session);
49  return 0;
50 }
51 
52 int cmd_evlist(int argc, const char **argv)
53 {
54  struct perf_attr_details details = { .verbose = false, };
55  const struct option options[] = {
56  OPT_STRING('i', "input", &input_name, "file", "Input file name"),
57  OPT_BOOLEAN('F', "freq", &details.freq, "Show the sample frequency"),
58  OPT_BOOLEAN('v', "verbose", &details.verbose,
59  "Show all event attr details"),
60  OPT_BOOLEAN('g', "group", &details.event_group,
61  "Show event group information"),
62  OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
63  OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
64  OPT_END()
65  };
66  const char * const evlist_usage[] = {
67  "perf evlist [<options>]",
68  NULL
69  };
70 
71  argc = parse_options(argc, argv, options, evlist_usage, 0);
72  if (argc)
73  usage_with_options(evlist_usage, options);
74 
75  if (details.event_group && (details.verbose || details.freq)) {
76  usage_with_options_msg(evlist_usage, options,
77  "--group option is not compatible with other options\n");
78  }
79 
80  return __cmd_evlist(input_name, &details);
81 }
bool event_group
Definition: evsel.h:414
struct perf_evlist * evlist
Definition: session.h:25
bool trace_fields
Definition: evsel.h:416
struct perf_data_file file
Definition: data.h:18
static int __cmd_evlist(const char *file_name, struct perf_attr_details *details)
void perf_session__delete(struct perf_session *session)
Definition: session.c:187
int perf_evsel__fprintf(struct perf_evsel *evsel, struct perf_attr_details *details, FILE *fp)
Definition: evsel_fprintf.c:36
static struct perf_session * session
Definition: builtin-lock.c:34
#define evlist__for_each_entry(evlist, evsel)
Definition: evlist.h:247
const char * input_name
Definition: perf.c:40
Definition: data.h:17
struct perf_session * perf_session__new(struct perf_data *data, bool repipe, struct perf_tool *tool)
Definition: session.c:116
int cmd_evlist(int argc, const char **argv)
const char * path
Definition: data.h:13
struct perf_event_attr attr
Definition: evsel.h:93