perf script: Enhance sample flags for trace begin / end
Allow for different combinations of sample flags with "trace begin" or "trace end". Previously, the Intel PT decoder would indicate begin / end by a branch from / to zero. That hides useful information, in particular when a trace ends with a call. Before remedying that, prepare 'perf script' to display sample flags with more combinations that include trace begin / end. In those cases display 'tr start' and 'tr end' separately. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lkml.kernel.org/r/20180920130048.31432-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
035c450ffa
commit
62cb1b8868
|
@ -1262,6 +1262,18 @@ static struct {
|
|||
{0, NULL}
|
||||
};
|
||||
|
||||
static const char *sample_flags_to_name(u32 flags)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; sample_flags[i].name ; i++) {
|
||||
if (sample_flags[i].flags == flags)
|
||||
return sample_flags[i].name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int perf_sample__fprintf_flags(u32 flags, FILE *fp)
|
||||
{
|
||||
const char *chars = PERF_IP_FLAG_CHARS;
|
||||
|
@ -1271,11 +1283,20 @@ static int perf_sample__fprintf_flags(u32 flags, FILE *fp)
|
|||
char str[33];
|
||||
int i, pos = 0;
|
||||
|
||||
for (i = 0; sample_flags[i].name ; i++) {
|
||||
if (sample_flags[i].flags == (flags & ~PERF_IP_FLAG_IN_TX)) {
|
||||
name = sample_flags[i].name;
|
||||
break;
|
||||
}
|
||||
name = sample_flags_to_name(flags & ~PERF_IP_FLAG_IN_TX);
|
||||
if (name)
|
||||
return fprintf(fp, " %-15s%4s ", name, in_tx ? "(x)" : "");
|
||||
|
||||
if (flags & PERF_IP_FLAG_TRACE_BEGIN) {
|
||||
name = sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_TRACE_BEGIN));
|
||||
if (name)
|
||||
return fprintf(fp, " tr strt %-7s%4s ", name, in_tx ? "(x)" : "");
|
||||
}
|
||||
|
||||
if (flags & PERF_IP_FLAG_TRACE_END) {
|
||||
name = sample_flags_to_name(flags & ~(PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_TRACE_END));
|
||||
if (name)
|
||||
return fprintf(fp, " tr end %-7s%4s ", name, in_tx ? "(x)" : "");
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++, flags >>= 1) {
|
||||
|
@ -1288,10 +1309,7 @@ static int perf_sample__fprintf_flags(u32 flags, FILE *fp)
|
|||
}
|
||||
str[pos] = 0;
|
||||
|
||||
if (name)
|
||||
return fprintf(fp, " %-7s%4s ", name, in_tx ? "(x)" : "");
|
||||
|
||||
return fprintf(fp, " %-11s ", str);
|
||||
return fprintf(fp, " %-19s ", str);
|
||||
}
|
||||
|
||||
struct printer_data {
|
||||
|
|
Loading…
Reference in New Issue