diff options
| author | Ian Rogers <irogers@google.com> | 2025-06-06 23:12:35 -0700 |
|---|---|---|
| committer | Namhyung Kim <namhyung@kernel.org> | 2025-06-25 12:37:23 -0700 |
| commit | 61051f9a8452d7f0878eaeb30299363310f07fd7 (patch) | |
| tree | 69663fb6e4c457a85b604f98167c2a82d4b388c7 /tools/perf | |
| parent | 45cd84bd7afc42c4a2ca630c11f246974fd1e73c (diff) | |
perf header: In pipe mode dump features without --header/-I
In pipe mode the header features are contained within events. While
other events dump details the header features only dump if --header or
-I are passed, which doesn't make sense as in pipe mode there is no
perf file header. Make the printing of the information conditional on
dump_trace as with other events.
Before:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
...
0x2c8@pipe [0x54]: event: 80
.
. ... raw event: size 84 bytes
. 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
. 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
. 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 ....
0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE
```
After:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
...
0x2c8@pipe [0x54]: event: 80
.
. ... raw event: size 84 bytes
. 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
. 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
. 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 ....
0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE, # perf version : 6.15.rc7.gad2a691c99fb
```
Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250617223356.2752099-4-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Diffstat (limited to 'tools/perf')
| -rw-r--r-- | tools/perf/util/header.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 2dea35237e81..58f45a2a2ab6 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -4326,7 +4326,6 @@ out_delete_evlist: int perf_event__process_feature(struct perf_session *session, union perf_event *event) { - const struct perf_tool *tool = session->tool; struct feat_fd ff = { .fd = 0 }; struct perf_record_header_feature *fe = (struct perf_record_header_feature *)event; int type = fe->header.type; @@ -4342,28 +4341,23 @@ int perf_event__process_feature(struct perf_session *session, return -1; } - if (!feat_ops[feat].process) - return 0; - ff.buf = (void *)fe->data; ff.size = event->header.size - sizeof(*fe); ff.ph = &session->header; - if (feat_ops[feat].process(&ff, NULL)) { + if (feat_ops[feat].process && feat_ops[feat].process(&ff, NULL)) { ret = -1; goto out; } - if (!feat_ops[feat].print || !tool->show_feat_hdr) - goto out; - - if (!feat_ops[feat].full_only || - tool->show_feat_hdr >= SHOW_FEAT_HEADER_FULL_INFO) { - feat_ops[feat].print(&ff, stdout); - } else { - fprintf(stdout, "# %s info available, use -I to display\n", - feat_ops[feat].name); + if (dump_trace) { + printf(", "); + if (feat_ops[feat].print) + feat_ops[feat].print(&ff, stdout); + else + printf("# %s", feat_ops[feat].name); } + out: free_event_desc(ff.events); return ret; |
