From 4fe3fea9f09815461b40427c3c68f9cd62ef538c Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Thu, 31 Dec 2009 16:52:51 -0500 Subject: trace-cmd: Allow plugin handlers to let the default print to also happen A plugin may only need to translate part of the field, or if it fails to translate, it may want the default to print. Now if a plugin handler returns something other than 0, the default print handler will take place. Signed-off-by: Steven Rostedt --- parse-events.c | 13 +++++++++---- trace-ftrace.c | 22 +++++++++++----------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/parse-events.c b/parse-events.c index 53aad3e..d2d7e0a 100644 --- a/parse-events.c +++ b/parse-events.c @@ -3324,9 +3324,12 @@ const char *pevent_data_comm_from_pid(struct pevent *pevent, int pid) void pevent_event_info(struct trace_seq *s, struct event_format *event, struct record *record) { + int print_pretty = 1; + if (event->handler) - event->handler(s, record, event); - else + print_pretty = event->handler(s, record, event); + + if (print_pretty) pretty_print(s, record->data, record->size, event); trace_seq_terminate(s); @@ -3342,6 +3345,7 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s, const char *comm; void *data = record->data; int size = record->size; + int print_pretty = 1; int type; int pid; int len; @@ -3376,8 +3380,9 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s, trace_seq_printf(s, "%.*s", 20 - len, spaces); if (event->handler) - event->handler(s, record, event); - else + print_pretty = event->handler(s, record, event); + + if (print_pretty) pretty_print(s, data, size, event); trace_seq_terminate(s); diff --git a/trace-ftrace.c b/trace-ftrace.c index 1b79ec7..8b0646b 100644 --- a/trace-ftrace.c +++ b/trace-ftrace.c @@ -229,7 +229,6 @@ fgraph_ent_handler(struct trace_seq *s, struct record *record, void *data = record->data; int size = record->size; int cpu = record->cpu; - int ret; if (get_field_val(s, data, event, "common_pid", &pid)) return trace_seq_putc(s, '!'); @@ -257,15 +256,15 @@ fgraph_ent_handler(struct trace_seq *s, struct record *record, * We also do a new peek on this CPU to update the * record cache. */ - ret = print_graph_entry_leaf(s, event, data, rec); + print_graph_entry_leaf(s, event, data, rec); free_record(rec); tracecmd_peek_data(tracecmd_curr_thread_handle, cpu); } else - ret = print_graph_nested(s, event, data); + print_graph_nested(s, event, data); free(data); - return ret; + return 0; } static int @@ -298,7 +297,9 @@ fgraph_ret_handler(struct trace_seq *s, struct record *record, for (i = 0; i < (int)(depth * TRACE_GRAPH_INDENT); i++) trace_seq_putc(s, ' '); - return trace_seq_putc(s, '}'); + trace_seq_putc(s, '}'); + + return 0; } static int @@ -309,16 +310,15 @@ trace_stack_handler(struct trace_seq *s, struct record *record, unsigned long long addr; const char *func; void *data = record->data; - int ret; int i; field = pevent_find_any_field(event, "caller"); if (!field) { trace_seq_printf(s, "", "caller"); - return -1; + return 0; } - ret = trace_seq_puts(s, "\n"); + trace_seq_puts(s, "\n"); for (i = 0; i < field->size; i += long_size) { addr = pevent_read_number(event->pevent, @@ -330,12 +330,12 @@ trace_stack_handler(struct trace_seq *s, struct record *record, func = pevent_find_function(event->pevent, addr); if (func) - ret = trace_seq_printf(s, "=> %s (%llx)\n", func, addr); + trace_seq_printf(s, "=> %s (%llx)\n", func, addr); else - ret = trace_seq_printf(s, "=> %llx\n", addr); + trace_seq_printf(s, "=> %llx\n", addr); } - return ret; + return 0; } int tracecmd_ftrace_overrides(struct tracecmd_input *handle) -- cgit v1.2.2