diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-12-10 16:17:08 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-12-11 15:19:53 -0500 |
commit | 0698aeddcfe0c2514af1d012082665a3bb55d01b (patch) | |
tree | 1dbff17ae0ee374457d202cac26178581c07bfd2 /tools/perf/util/evsel.c | |
parent | f77a951826b44b763e4d9fbd2479b6132d2bd7fc (diff) |
perf evsel: Adopt fprintf routine from 'perf evlist'
So that we can print all the details when debugging other tools,
when we have just evlists and evsels, not a perf.data file.
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-mktq5fy2h5z7jyeqvvf5mbc8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/evsel.c')
-rw-r--r-- | tools/perf/util/evsel.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 2492d329a5f5..643df4b06b84 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -1228,3 +1228,80 @@ u64 perf_evsel__intval(struct perf_evsel *evsel, struct perf_sample *sample, | |||
1228 | 1228 | ||
1229 | return 0; | 1229 | return 0; |
1230 | } | 1230 | } |
1231 | |||
1232 | static int comma_fprintf(FILE *fp, bool *first, const char *fmt, ...) | ||
1233 | { | ||
1234 | va_list args; | ||
1235 | int ret = 0; | ||
1236 | |||
1237 | if (!*first) { | ||
1238 | ret += fprintf(fp, ","); | ||
1239 | } else { | ||
1240 | ret += fprintf(fp, ":"); | ||
1241 | *first = false; | ||
1242 | } | ||
1243 | |||
1244 | va_start(args, fmt); | ||
1245 | ret += vfprintf(fp, fmt, args); | ||
1246 | va_end(args); | ||
1247 | return ret; | ||
1248 | } | ||
1249 | |||
1250 | static int __if_fprintf(FILE *fp, bool *first, const char *field, u64 value) | ||
1251 | { | ||
1252 | if (value == 0) | ||
1253 | return 0; | ||
1254 | |||
1255 | return comma_fprintf(fp, first, " %s: %" PRIu64, field, value); | ||
1256 | } | ||
1257 | |||
1258 | #define if_print(field) printed += __if_fprintf(fp, &first, #field, evsel->attr.field) | ||
1259 | |||
1260 | int perf_evsel__fprintf(struct perf_evsel *evsel, | ||
1261 | struct perf_attr_details *details, FILE *fp) | ||
1262 | { | ||
1263 | bool first = true; | ||
1264 | int printed = fprintf(fp, "%s", perf_evsel__name(evsel)); | ||
1265 | |||
1266 | if (details->verbose || details->freq) { | ||
1267 | printed += comma_fprintf(fp, &first, " sample_freq=%" PRIu64, | ||
1268 | (u64)evsel->attr.sample_freq); | ||
1269 | } | ||
1270 | |||
1271 | if (details->verbose) { | ||
1272 | if_print(type); | ||
1273 | if_print(config); | ||
1274 | if_print(config1); | ||
1275 | if_print(config2); | ||
1276 | if_print(size); | ||
1277 | if_print(sample_type); | ||
1278 | if_print(read_format); | ||
1279 | if_print(disabled); | ||
1280 | if_print(inherit); | ||
1281 | if_print(pinned); | ||
1282 | if_print(exclusive); | ||
1283 | if_print(exclude_user); | ||
1284 | if_print(exclude_kernel); | ||
1285 | if_print(exclude_hv); | ||
1286 | if_print(exclude_idle); | ||
1287 | if_print(mmap); | ||
1288 | if_print(comm); | ||
1289 | if_print(freq); | ||
1290 | if_print(inherit_stat); | ||
1291 | if_print(enable_on_exec); | ||
1292 | if_print(task); | ||
1293 | if_print(watermark); | ||
1294 | if_print(precise_ip); | ||
1295 | if_print(mmap_data); | ||
1296 | if_print(sample_id_all); | ||
1297 | if_print(exclude_host); | ||
1298 | if_print(exclude_guest); | ||
1299 | if_print(__reserved_1); | ||
1300 | if_print(wakeup_events); | ||
1301 | if_print(bp_type); | ||
1302 | if_print(branch_sample_type); | ||
1303 | } | ||
1304 | |||
1305 | fputc('\n', fp); | ||
1306 | return ++printed; | ||
1307 | } | ||