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) |