1 #include <linux/perf_event.h>
2 #include <perf/evlist.h>
3 #include <perf/evsel.h>
4 #include <perf/cpumap.h>
5 #include <perf/threadmap.h>
8 #include <perf/event.h>
12 static int libperf_print(enum libperf_print_level level,
13 const char *fmt, va_list ap)
15 return vfprintf(stderr, fmt, ap);
18 int main(int argc, char **argv)
20 int count = 100000, err = 0;
21 struct perf_evlist *evlist;
22 struct perf_evsel *evsel;
23 struct perf_thread_map *threads;
24 struct perf_counts_values counts;
26 struct perf_event_attr attr1 = {
27 .type = PERF_TYPE_SOFTWARE,
28 .config = PERF_COUNT_SW_CPU_CLOCK,
29 .read_format = PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING,
32 struct perf_event_attr attr2 = {
33 .type = PERF_TYPE_SOFTWARE,
34 .config = PERF_COUNT_SW_TASK_CLOCK,
35 .read_format = PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING,
39 libperf_init(libperf_print);
40 threads = perf_thread_map__new_dummy();
42 fprintf(stderr, "failed to create threads\n");
45 perf_thread_map__set_pid(threads, 0, 0);
46 evlist = perf_evlist__new();
48 fprintf(stderr, "failed to create evlist\n");
51 evsel = perf_evsel__new(&attr1);
53 fprintf(stderr, "failed to create evsel1\n");
56 perf_evlist__add(evlist, evsel);
57 evsel = perf_evsel__new(&attr2);
59 fprintf(stderr, "failed to create evsel2\n");
62 perf_evlist__add(evlist, evsel);
63 perf_evlist__set_maps(evlist, NULL, threads);
64 err = perf_evlist__open(evlist);
66 fprintf(stderr, "failed to open evsel\n");
69 perf_evlist__enable(evlist);
71 perf_evlist__disable(evlist);
72 perf_evlist__for_each_evsel(evlist, evsel) {
73 perf_evsel__read(evsel, 0, 0, &counts);
74 fprintf(stdout, "count %llu, enabled %llu, run %llu\n",
75 counts.val, counts.ena, counts.run);
77 perf_evlist__close(evlist);
79 perf_evlist__delete(evlist);
81 perf_thread_map__put(threads);