linux/tools/perf/builtin-evlist.c
<<
>>
Prefs
   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
  18struct perf_attr_details {
  19        bool freq;
  20        bool verbose;
  21};
  22
  23static 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
  41static 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)
  50
  51static int __cmd_evlist(const char *input_name, struct perf_attr_details *details)
  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
  60        list_for_each_entry(pos, &session->evlist->entries, node) {
  61                bool first = true;
  62
  63                printf("%s", perf_evsel__name(pos));
  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        }
 106
 107        perf_session__delete(session);
 108        return 0;
 109}
 110
 111int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
 112{
 113        struct perf_attr_details details = { .verbose = false, };
 114        const char *input_name = NULL;
 115        const struct option options[] = {
 116        OPT_STRING('i', "input", &input_name, "file", "Input file name"),
 117        OPT_BOOLEAN('F', "freq", &details.freq, "Show the sample frequency"),
 118        OPT_BOOLEAN('v', "verbose", &details.verbose,
 119                    "Show all event attr details"),
 120        OPT_END()
 121        };
 122        const char * const evlist_usage[] = {
 123                "perf evlist [<options>]",
 124                NULL
 125        };
 126
 127        argc = parse_options(argc, argv, options, evlist_usage, 0);
 128        if (argc)
 129                usage_with_options(evlist_usage, options);
 130
 131        return __cmd_evlist(input_name, &details);
 132}
 133
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.