Allow for different combinations of sample flags with "trace begin" or
"trace end".

Signed-off-by: Adrian Hunter <adrian.hun...@intel.com>
---
 tools/perf/builtin-script.c | 36 +++++++++++++++++++++++++++---------
 1 file changed, 27 insertions(+), 9 deletions(-)

diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 6176bae177c2..4982380ba96d 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -1255,6 +1255,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;
@@ -1264,11 +1276,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) {
@@ -1281,10 +1302,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 {
-- 
2.17.1

Reply via email to