perf/events: Add flag to produce nsec output
authorSteven Rostedt <srostedt@redhat.com>
Thu, 5 Apr 2012 22:47:57 +0000 (00:47 +0200)
committerFrederic Weisbecker <fweisbec@gmail.com>
Wed, 25 Apr 2012 11:35:18 +0000 (13:35 +0200)
libtraceevent library prints out in usecs but perf wants to print out
in nsecs. Add a flag that lets the user decide to print out in usec
or nsec times.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Arun Sharma <asharma@fb.com>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
tools/lib/traceevent/event-parse.c
tools/lib/traceevent/event-parse.h
tools/perf/util/trace-event-parse.c

index 3ce75b5..c799c19 100644 (file)
@@ -3940,15 +3940,16 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s,
        struct event_format *event;
        unsigned long secs;
        unsigned long usecs;
+       unsigned long nsecs;
        const char *comm;
        void *data = record->data;
        int type;
        int pid;
        int len;
+       int p;
 
        secs = record->ts / NSECS_PER_SEC;
-       usecs = record->ts - secs * NSECS_PER_SEC;
-       usecs = (usecs + 500) / NSECS_PER_USEC;
+       nsecs = record->ts - secs * NSECS_PER_SEC;
 
        if (record->size < 0) {
                do_warning("ug! negative record size %d", record->size);
@@ -3973,7 +3974,15 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s,
        } else
                trace_seq_printf(s, "%16s-%-5d [%03d]", comm, pid, record->cpu);
 
-       trace_seq_printf(s, " %5lu.%06lu: %s: ", secs, usecs, event->name);
+       if (pevent->flags & PEVENT_NSEC_OUTPUT) {
+               usecs = nsecs;
+               p = 9;
+       } else {
+               usecs = (nsecs + 500) / NSECS_PER_USEC;
+               p = 6;
+       }
+
+       trace_seq_printf(s, " %5lu.%0*lu: %s: ", secs, p, usecs, event->name);
 
        /* Space out the event names evenly. */
        len = strlen(event->name);
index 2e0222d..8852827 100644 (file)
@@ -334,6 +334,10 @@ enum pevent_func_arg_type {
        PEVENT_FUNC_ARG_MAX_TYPES
 };
 
+enum pevent_flag {
+       PEVENT_NSEC_OUTPUT              = 1,    /* output in NSECS */
+};
+
 struct cmdline;
 struct cmdline_list;
 struct func_map;
@@ -373,6 +377,7 @@ struct pevent {
        struct printk_list *printklist;
        unsigned int printk_count;
 
+
        struct event_format **events;
        int nr_events;
        struct event_format **sort_events;
@@ -397,6 +402,8 @@ struct pevent {
 
        int test_filters;
 
+       int flags;
+
        struct format_field *bprint_ip_field;
        struct format_field *bprint_fmt_field;
        struct format_field *bprint_buf_field;
@@ -408,6 +415,11 @@ struct pevent {
        struct event_format *last_event;
 };
 
+static inline void pevent_set_flag(struct pevent *pevent, int flag)
+{
+       pevent->flags |= flag;
+}
+
 static inline unsigned short
 __data2host2(struct pevent *pevent, unsigned short data)
 {
index 4ec165a..39f22f8 100644 (file)
@@ -45,6 +45,7 @@ int read_trace_init(int file_bigendian, int host_bigendian)
        perf_pevent = pevent_alloc();
        pevent = perf_pevent;
 
+       pevent_set_flag(pevent, PEVENT_NSEC_OUTPUT);
        pevent_set_file_bigendian(pevent, file_bigendian);
        pevent_set_host_bigendian(pevent, host_bigendian);