diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2009-12-31 16:52:51 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2009-12-31 16:52:51 -0500 |
| commit | 4fe3fea9f09815461b40427c3c68f9cd62ef538c (patch) | |
| tree | 9a1b3f9176321ba21fab519f38afbc42adafc1f2 | |
| parent | 90271c9b51376263752098b27c2f87a77c64e71a (diff) | |
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 <rostedt@goodmis.org>
| -rw-r--r-- | parse-events.c | 13 | ||||
| -rw-r--r-- | 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) | |||
| 3324 | void pevent_event_info(struct trace_seq *s, struct event_format *event, | 3324 | void pevent_event_info(struct trace_seq *s, struct event_format *event, |
| 3325 | struct record *record) | 3325 | struct record *record) |
| 3326 | { | 3326 | { |
| 3327 | int print_pretty = 1; | ||
| 3328 | |||
| 3327 | if (event->handler) | 3329 | if (event->handler) |
| 3328 | event->handler(s, record, event); | 3330 | print_pretty = event->handler(s, record, event); |
| 3329 | else | 3331 | |
| 3332 | if (print_pretty) | ||
| 3330 | pretty_print(s, record->data, record->size, event); | 3333 | pretty_print(s, record->data, record->size, event); |
| 3331 | 3334 | ||
| 3332 | trace_seq_terminate(s); | 3335 | trace_seq_terminate(s); |
| @@ -3342,6 +3345,7 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s, | |||
| 3342 | const char *comm; | 3345 | const char *comm; |
| 3343 | void *data = record->data; | 3346 | void *data = record->data; |
| 3344 | int size = record->size; | 3347 | int size = record->size; |
| 3348 | int print_pretty = 1; | ||
| 3345 | int type; | 3349 | int type; |
| 3346 | int pid; | 3350 | int pid; |
| 3347 | int len; | 3351 | int len; |
| @@ -3376,8 +3380,9 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s, | |||
| 3376 | trace_seq_printf(s, "%.*s", 20 - len, spaces); | 3380 | trace_seq_printf(s, "%.*s", 20 - len, spaces); |
| 3377 | 3381 | ||
| 3378 | if (event->handler) | 3382 | if (event->handler) |
| 3379 | event->handler(s, record, event); | 3383 | print_pretty = event->handler(s, record, event); |
| 3380 | else | 3384 | |
| 3385 | if (print_pretty) | ||
| 3381 | pretty_print(s, data, size, event); | 3386 | pretty_print(s, data, size, event); |
| 3382 | 3387 | ||
| 3383 | trace_seq_terminate(s); | 3388 | 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, | |||
| 229 | void *data = record->data; | 229 | void *data = record->data; |
| 230 | int size = record->size; | 230 | int size = record->size; |
| 231 | int cpu = record->cpu; | 231 | int cpu = record->cpu; |
| 232 | int ret; | ||
| 233 | 232 | ||
| 234 | if (get_field_val(s, data, event, "common_pid", &pid)) | 233 | if (get_field_val(s, data, event, "common_pid", &pid)) |
| 235 | return trace_seq_putc(s, '!'); | 234 | return trace_seq_putc(s, '!'); |
| @@ -257,15 +256,15 @@ fgraph_ent_handler(struct trace_seq *s, struct record *record, | |||
| 257 | * We also do a new peek on this CPU to update the | 256 | * We also do a new peek on this CPU to update the |
| 258 | * record cache. | 257 | * record cache. |
| 259 | */ | 258 | */ |
| 260 | ret = print_graph_entry_leaf(s, event, data, rec); | 259 | print_graph_entry_leaf(s, event, data, rec); |
| 261 | free_record(rec); | 260 | free_record(rec); |
| 262 | tracecmd_peek_data(tracecmd_curr_thread_handle, cpu); | 261 | tracecmd_peek_data(tracecmd_curr_thread_handle, cpu); |
| 263 | } else | 262 | } else |
| 264 | ret = print_graph_nested(s, event, data); | 263 | print_graph_nested(s, event, data); |
| 265 | 264 | ||
| 266 | free(data); | 265 | free(data); |
| 267 | 266 | ||
| 268 | return ret; | 267 | return 0; |
| 269 | } | 268 | } |
| 270 | 269 | ||
| 271 | static int | 270 | static int |
| @@ -298,7 +297,9 @@ fgraph_ret_handler(struct trace_seq *s, struct record *record, | |||
| 298 | for (i = 0; i < (int)(depth * TRACE_GRAPH_INDENT); i++) | 297 | for (i = 0; i < (int)(depth * TRACE_GRAPH_INDENT); i++) |
| 299 | trace_seq_putc(s, ' '); | 298 | trace_seq_putc(s, ' '); |
| 300 | 299 | ||
| 301 | return trace_seq_putc(s, '}'); | 300 | trace_seq_putc(s, '}'); |
| 301 | |||
| 302 | return 0; | ||
| 302 | } | 303 | } |
| 303 | 304 | ||
| 304 | static int | 305 | static int |
| @@ -309,16 +310,15 @@ trace_stack_handler(struct trace_seq *s, struct record *record, | |||
| 309 | unsigned long long addr; | 310 | unsigned long long addr; |
| 310 | const char *func; | 311 | const char *func; |
| 311 | void *data = record->data; | 312 | void *data = record->data; |
| 312 | int ret; | ||
| 313 | int i; | 313 | int i; |
| 314 | 314 | ||
| 315 | field = pevent_find_any_field(event, "caller"); | 315 | field = pevent_find_any_field(event, "caller"); |
| 316 | if (!field) { | 316 | if (!field) { |
| 317 | trace_seq_printf(s, "<CANT FIND FIELD %s>", "caller"); | 317 | trace_seq_printf(s, "<CANT FIND FIELD %s>", "caller"); |
| 318 | return -1; | 318 | return 0; |
| 319 | } | 319 | } |
| 320 | 320 | ||
| 321 | ret = trace_seq_puts(s, "<stack trace>\n"); | 321 | trace_seq_puts(s, "<stack trace>\n"); |
| 322 | 322 | ||
| 323 | for (i = 0; i < field->size; i += long_size) { | 323 | for (i = 0; i < field->size; i += long_size) { |
| 324 | addr = pevent_read_number(event->pevent, | 324 | addr = pevent_read_number(event->pevent, |
| @@ -330,12 +330,12 @@ trace_stack_handler(struct trace_seq *s, struct record *record, | |||
| 330 | 330 | ||
| 331 | func = pevent_find_function(event->pevent, addr); | 331 | func = pevent_find_function(event->pevent, addr); |
| 332 | if (func) | 332 | if (func) |
| 333 | ret = trace_seq_printf(s, "=> %s (%llx)\n", func, addr); | 333 | trace_seq_printf(s, "=> %s (%llx)\n", func, addr); |
| 334 | else | 334 | else |
| 335 | ret = trace_seq_printf(s, "=> %llx\n", addr); | 335 | trace_seq_printf(s, "=> %llx\n", addr); |
| 336 | } | 336 | } |
| 337 | 337 | ||
| 338 | return ret; | 338 | return 0; |
| 339 | } | 339 | } |
| 340 | 340 | ||
| 341 | int tracecmd_ftrace_overrides(struct tracecmd_input *handle) | 341 | int tracecmd_ftrace_overrides(struct tracecmd_input *handle) |
