~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/tests/pfm.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 /*
  3  * Test support for libpfm4 event encodings.
  4  *
  5  * Copyright 2020 Google LLC.
  6  */
  7 #include "tests.h"
  8 #include "util/debug.h"
  9 #include "util/evlist.h"
 10 #include "util/pfm.h"
 11 
 12 #include <linux/kernel.h>
 13 
 14 #ifdef HAVE_LIBPFM
 15 static int count_pfm_events(struct perf_evlist *evlist)
 16 {
 17         struct perf_evsel *evsel;
 18         int count = 0;
 19 
 20         perf_evlist__for_each_entry(evlist, evsel) {
 21                 count++;
 22         }
 23         return count;
 24 }
 25 
 26 static int test__pfm_events(struct test_suite *test __maybe_unused,
 27                             int subtest __maybe_unused)
 28 {
 29         struct evlist *evlist;
 30         struct option opt;
 31         size_t i;
 32         const struct {
 33                 const char *events;
 34                 int nr_events;
 35         } table[] = {
 36                 {
 37                         .events = "",
 38                         .nr_events = 0,
 39                 },
 40                 {
 41                         .events = "instructions",
 42                         .nr_events = 1,
 43                 },
 44                 {
 45                         .events = "instructions,cycles",
 46                         .nr_events = 2,
 47                 },
 48                 {
 49                         .events = "stereolab",
 50                         .nr_events = 0,
 51                 },
 52                 {
 53                         .events = "instructions,instructions",
 54                         .nr_events = 2,
 55                 },
 56                 {
 57                         .events = "stereolab,instructions",
 58                         .nr_events = 0,
 59                 },
 60                 {
 61                         .events = "instructions,stereolab",
 62                         .nr_events = 1,
 63                 },
 64         };
 65 
 66         for (i = 0; i < ARRAY_SIZE(table); i++) {
 67                 evlist = evlist__new();
 68                 if (evlist == NULL)
 69                         return -ENOMEM;
 70 
 71                 opt.value = evlist;
 72                 parse_libpfm_events_option(&opt,
 73                                         table[i].events,
 74                                         0);
 75                 TEST_ASSERT_EQUAL(table[i].events,
 76                                 count_pfm_events(&evlist->core),
 77                                 table[i].nr_events);
 78                 TEST_ASSERT_EQUAL(table[i].events,
 79                                 evlist__nr_groups(evlist),
 80                                 0);
 81 
 82                 evlist__delete(evlist);
 83         }
 84         return 0;
 85 }
 86 
 87 static int test__pfm_group(struct test_suite *test __maybe_unused,
 88                            int subtest __maybe_unused)
 89 {
 90         struct evlist *evlist;
 91         struct option opt;
 92         size_t i;
 93         const struct {
 94                 const char *events;
 95                 int nr_events;
 96                 int nr_groups;
 97         } table[] = {
 98                 {
 99                         .events = "{},",
100                         .nr_events = 0,
101                         .nr_groups = 0,
102                 },
103                 {
104                         .events = "{instructions}",
105                         .nr_events = 1,
106                         .nr_groups = 0,
107                 },
108                 {
109                         .events = "{instructions},{}",
110                         .nr_events = 1,
111                         .nr_groups = 0,
112                 },
113                 {
114                         .events = "{},{instructions}",
115                         .nr_events = 1,
116                         .nr_groups = 0,
117                 },
118                 {
119                         .events = "{instructions},{instructions}",
120                         .nr_events = 2,
121                         .nr_groups = 0,
122                 },
123                 {
124                         .events = "{instructions,cycles},{instructions,cycles}",
125                         .nr_events = 4,
126                         .nr_groups = 2,
127                 },
128                 {
129                         .events = "{stereolab}",
130                         .nr_events = 0,
131                         .nr_groups = 0,
132                 },
133                 {
134                         .events =
135                         "{instructions,cycles},{instructions,stereolab}",
136                         .nr_events = 3,
137                         .nr_groups = 1,
138                 },
139                 {
140                         .events = "instructions}",
141                         .nr_events = 1,
142                         .nr_groups = 0,
143                 },
144                 {
145                         .events = "{{instructions}}",
146                         .nr_events = 0,
147                         .nr_groups = 0,
148                 },
149         };
150 
151         for (i = 0; i < ARRAY_SIZE(table); i++) {
152                 evlist = evlist__new();
153                 if (evlist == NULL)
154                         return -ENOMEM;
155 
156                 opt.value = evlist;
157                 parse_libpfm_events_option(&opt,
158                                         table[i].events,
159                                         0);
160                 TEST_ASSERT_EQUAL(table[i].events,
161                                 count_pfm_events(&evlist->core),
162                                 table[i].nr_events);
163                 TEST_ASSERT_EQUAL(table[i].events,
164                                 evlist__nr_groups(evlist),
165                                 table[i].nr_groups);
166 
167                 evlist__delete(evlist);
168         }
169         return 0;
170 }
171 #else
172 static int test__pfm_events(struct test_suite *test __maybe_unused,
173                             int subtest __maybe_unused)
174 {
175         return TEST_SKIP;
176 }
177 
178 static int test__pfm_group(struct test_suite *test __maybe_unused,
179                            int subtest __maybe_unused)
180 {
181         return TEST_SKIP;
182 }
183 #endif
184 
185 static struct test_case pfm_tests[] = {
186         TEST_CASE_REASON("test of individual --pfm-events", pfm_events, "not compiled in"),
187         TEST_CASE_REASON("test groups of --pfm-events", pfm_group, "not compiled in"),
188         { .name = NULL, }
189 };
190 
191 struct test_suite suite__pfm = {
192         .desc = "Test libpfm4 support",
193         .test_cases = pfm_tests,
194 };
195 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php