aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-report.c
diff options
context:
space:
mode:
authorSam Liao <phyomh@gmail.com>2011-06-07 11:49:46 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2011-06-29 18:24:30 -0400
commitd797fdc5c5c245fbb05f553e68cb95d962fbdd01 (patch)
treeaa28d98f61df71a2fba55e2b4b526c77aec8de0a /tools/perf/builtin-report.c
parentaf07ce3e77d3b24ab1d71fcc5833d41800f23b2b (diff)
perf tools: Add inverted call graph report support.
Add "caller/callee" option to support inverted butterfly report, in the inverted report (with caller option), the call graph start from the callee's ancestor. Users can use such view to catch system's performance bottleneck from a sysprof like view. Using this option with specified sort order like pid gives us high level view of call graph statistics. Also add "-G" alias for inverted call graph. Signed-off-by: Sam Liao <phyomh@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Stephane Eranian <eranian@google.com> Cc: David Ahern <dsahern@gmail.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'tools/perf/builtin-report.c')
-rw-r--r--tools/perf/builtin-report.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 287a173523a7..271e252dc651 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -45,7 +45,8 @@ static struct perf_read_values show_threads_values;
45static const char default_pretty_printing_style[] = "normal"; 45static const char default_pretty_printing_style[] = "normal";
46static const char *pretty_printing_style = default_pretty_printing_style; 46static const char *pretty_printing_style = default_pretty_printing_style;
47 47
48static char callchain_default_opt[] = "fractal,0.5"; 48static char callchain_default_opt[] = "fractal,0.5,callee";
49static bool inverted_callchain;
49static symbol_filter_t annotate_init; 50static symbol_filter_t annotate_init;
50 51
51static int perf_session__add_hist_entry(struct perf_session *session, 52static int perf_session__add_hist_entry(struct perf_session *session,
@@ -386,13 +387,29 @@ parse_callchain_opt(const struct option *opt __used, const char *arg,
386 if (!tok) 387 if (!tok)
387 goto setup; 388 goto setup;
388 389
389 tok2 = strtok(NULL, ",");
390 callchain_param.min_percent = strtod(tok, &endptr); 390 callchain_param.min_percent = strtod(tok, &endptr);
391 if (tok == endptr) 391 if (tok == endptr)
392 return -1; 392 return -1;
393 393
394 if (tok2) 394 /* get the print limit */
395 tok2 = strtok(NULL, ",");
396 if (!tok2)
397 goto setup;
398
399 if (tok2[0] != 'c') {
395 callchain_param.print_limit = strtod(tok2, &endptr); 400 callchain_param.print_limit = strtod(tok2, &endptr);
401 tok2 = strtok(NULL, ",");
402 if (!tok2)
403 goto setup;
404 }
405
406 /* get the call chain order */
407 if (!strcmp(tok2, "caller"))
408 callchain_param.order = ORDER_CALLER;
409 else if (!strcmp(tok2, "callee"))
410 callchain_param.order = ORDER_CALLEE;
411 else
412 return -1;
396setup: 413setup:
397 if (callchain_register_param(&callchain_param) < 0) { 414 if (callchain_register_param(&callchain_param) < 0) {
398 fprintf(stderr, "Can't register callchain params\n"); 415 fprintf(stderr, "Can't register callchain params\n");
@@ -436,9 +453,10 @@ static const struct option options[] = {
436 "regex filter to identify parent, see: '--sort parent'"), 453 "regex filter to identify parent, see: '--sort parent'"),
437 OPT_BOOLEAN('x', "exclude-other", &symbol_conf.exclude_other, 454 OPT_BOOLEAN('x', "exclude-other", &symbol_conf.exclude_other,
438 "Only display entries with parent-match"), 455 "Only display entries with parent-match"),
439 OPT_CALLBACK_DEFAULT('g', "call-graph", NULL, "output_type,min_percent", 456 OPT_CALLBACK_DEFAULT('g', "call-graph", NULL, "output_type,min_percent, call_order",
440 "Display callchains using output_type (graph, flat, fractal, or none) and min percent threshold. " 457 "Display callchains using output_type (graph, flat, fractal, or none) , min percent threshold and callchain order. "
441 "Default: fractal,0.5", &parse_callchain_opt, callchain_default_opt), 458 "Default: fractal,0.5,callee", &parse_callchain_opt, callchain_default_opt),
459 OPT_BOOLEAN('G', "inverted", &inverted_callchain, "alias for inverted call graph"),
442 OPT_STRING('d', "dsos", &symbol_conf.dso_list_str, "dso[,dso...]", 460 OPT_STRING('d', "dsos", &symbol_conf.dso_list_str, "dso[,dso...]",
443 "only consider symbols in these dsos"), 461 "only consider symbols in these dsos"),
444 OPT_STRING('C', "comms", &symbol_conf.comm_list_str, "comm[,comm...]", 462 OPT_STRING('C', "comms", &symbol_conf.comm_list_str, "comm[,comm...]",
@@ -467,6 +485,9 @@ int cmd_report(int argc, const char **argv, const char *prefix __used)
467 else if (use_tui) 485 else if (use_tui)
468 use_browser = 1; 486 use_browser = 1;
469 487
488 if (inverted_callchain)
489 callchain_param.order = ORDER_CALLER;
490
470 if (strcmp(input_name, "-") != 0) 491 if (strcmp(input_name, "-") != 0)
471 setup_browser(true); 492 setup_browser(true);
472 else 493 else