aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-12-31 16:52:51 -0500
committerSteven Rostedt <rostedt@goodmis.org>2009-12-31 16:52:51 -0500
commit4fe3fea9f09815461b40427c3c68f9cd62ef538c (patch)
tree9a1b3f9176321ba21fab519f38afbc42adafc1f2
parent90271c9b51376263752098b27c2f87a77c64e71a (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.c13
-rw-r--r--trace-ftrace.c22
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)
3324void pevent_event_info(struct trace_seq *s, struct event_format *event, 3324void 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
271static int 270static 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
304static int 305static 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
341int tracecmd_ftrace_overrides(struct tracecmd_input *handle) 341int tracecmd_ftrace_overrides(struct tracecmd_input *handle)