From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Namhyung Kim <namhyung@kernel.org>,
David Ahern <dsahern@gmail.com>, Jiri Olsa <jolsa@redhat.com>,
Milian Wolff <mail@milianw.de>,
Namhyung Kim <namhyung.kim@lge.com>,
Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 08/10] perf tools: Introduce perf_callchain_config()
Date: Fri, 26 Sep 2014 17:19:45 -0300 [thread overview]
Message-ID: <1411762787-26113-9-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1411762787-26113-1-git-send-email-acme@kernel.org>
From: Namhyung Kim <namhyung@kernel.org>
This patch adds support for following config options to ~/.perfconfig file.
[call-graph]
record-mode = dwarf
dump-size = 8192
print-type = fractal
order = callee
threshold = 0.5
print-limit = 128
sort-key = function
Reviewed-by: David Ahern <dsahern@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1411434104-5307-5-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/callchain.c | 109 ++++++++++++++++++++++++++++++++++++--------
tools/perf/util/callchain.h | 1 +
tools/perf/util/config.c | 3 ++
3 files changed, 94 insertions(+), 19 deletions(-)
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
index ba7297230143..c84d3f8dcb75 100644
--- a/tools/perf/util/callchain.c
+++ b/tools/perf/util/callchain.c
@@ -109,6 +109,49 @@ int parse_callchain_record_opt(const char *arg)
return ret;
}
+static int parse_callchain_mode(const char *value)
+{
+ if (!strncmp(value, "graph", strlen(value))) {
+ callchain_param.mode = CHAIN_GRAPH_ABS;
+ return 0;
+ }
+ if (!strncmp(value, "flat", strlen(value))) {
+ callchain_param.mode = CHAIN_FLAT;
+ return 0;
+ }
+ if (!strncmp(value, "fractal", strlen(value))) {
+ callchain_param.mode = CHAIN_GRAPH_REL;
+ return 0;
+ }
+ return -1;
+}
+
+static int parse_callchain_order(const char *value)
+{
+ if (!strncmp(value, "caller", strlen(value))) {
+ callchain_param.order = ORDER_CALLER;
+ return 0;
+ }
+ if (!strncmp(value, "callee", strlen(value))) {
+ callchain_param.order = ORDER_CALLEE;
+ return 0;
+ }
+ return -1;
+}
+
+static int parse_callchain_sort_key(const char *value)
+{
+ if (!strncmp(value, "function", strlen(value))) {
+ callchain_param.key = CCKEY_FUNCTION;
+ return 0;
+ }
+ if (!strncmp(value, "address", strlen(value))) {
+ callchain_param.key = CCKEY_ADDRESS;
+ return 0;
+ }
+ return -1;
+}
+
int
parse_callchain_report_opt(const char *arg)
{
@@ -128,25 +171,12 @@ parse_callchain_report_opt(const char *arg)
return 0;
}
- /* try to get the output mode */
- if (!strncmp(tok, "graph", strlen(tok)))
- callchain_param.mode = CHAIN_GRAPH_ABS;
- else if (!strncmp(tok, "flat", strlen(tok)))
- callchain_param.mode = CHAIN_FLAT;
- else if (!strncmp(tok, "fractal", strlen(tok)))
- callchain_param.mode = CHAIN_GRAPH_REL;
- /* try to get the call chain order */
- else if (!strncmp(tok, "caller", strlen(tok)))
- callchain_param.order = ORDER_CALLER;
- else if (!strncmp(tok, "callee", strlen(tok)))
- callchain_param.order = ORDER_CALLEE;
- /* try to get the sort key */
- else if (!strncmp(tok, "function", strlen(tok)))
- callchain_param.key = CCKEY_FUNCTION;
- else if (!strncmp(tok, "address", strlen(tok)))
- callchain_param.key = CCKEY_ADDRESS;
- /* try to get the min percent */
- else if (!minpcnt_set) {
+ if (!parse_callchain_mode(tok) ||
+ !parse_callchain_order(tok) ||
+ !parse_callchain_sort_key(tok)) {
+ /* parsing ok - move on to the next */
+ } else if (!minpcnt_set) {
+ /* try to get the min percent */
callchain_param.min_percent = strtod(tok, &endptr);
if (tok == endptr)
return -1;
@@ -168,6 +198,47 @@ parse_callchain_report_opt(const char *arg)
return 0;
}
+int perf_callchain_config(const char *var, const char *value)
+{
+ char *endptr;
+
+ if (prefixcmp(var, "call-graph."))
+ return 0;
+ var += sizeof("call-graph.") - 1;
+
+ if (!strcmp(var, "record-mode"))
+ return parse_callchain_record_opt(value);
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+ if (!strcmp(var, "dump-size")) {
+ unsigned long size = 0;
+ int ret;
+
+ ret = get_stack_size(value, &size);
+ callchain_param.dump_size = size;
+
+ return ret;
+ }
+#endif
+ if (!strcmp(var, "print-type"))
+ return parse_callchain_mode(value);
+ if (!strcmp(var, "order"))
+ return parse_callchain_order(value);
+ if (!strcmp(var, "sort-key"))
+ return parse_callchain_sort_key(value);
+ if (!strcmp(var, "threshold")) {
+ callchain_param.min_percent = strtod(value, &endptr);
+ if (value == endptr)
+ return -1;
+ }
+ if (!strcmp(var, "print-limit")) {
+ callchain_param.print_limit = strtod(value, &endptr);
+ if (value == endptr)
+ return -1;
+ }
+
+ return 0;
+}
+
static void
rb_insert_callchain(struct rb_root *root, struct callchain_node *chain,
enum chain_mode mode)
diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h
index 8adfbf0bab5c..2a1f5a46543a 100644
--- a/tools/perf/util/callchain.h
+++ b/tools/perf/util/callchain.h
@@ -170,6 +170,7 @@ int fill_callchain_info(struct addr_location *al, struct callchain_cursor_node *
extern const char record_callchain_help[];
int parse_callchain_record_opt(const char *arg);
int parse_callchain_report_opt(const char *arg);
+int perf_callchain_config(const char *var, const char *value);
static inline void callchain_cursor_snapshot(struct callchain_cursor *dest,
struct callchain_cursor *src)
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index 9970b8b0190b..953512ed72ba 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -396,6 +396,9 @@ int perf_default_config(const char *var, const char *value,
if (!prefixcmp(var, "ui."))
return perf_ui_config(var, value);
+ if (!prefixcmp(var, "call-graph."))
+ return perf_callchain_config(var, value);
+
/* Add other config variables here. */
return 0;
}
--
1.9.3
next prev parent reply other threads:[~2014-09-26 20:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-26 20:19 [GIT PULL 00/10] perf/core improvements and fixes Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 01/10] perf stat: Fix --per-core on multi socket systems Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 02/10] perf tools: Fix perf record as non root with kptr_restrict == 1 Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 03/10] perf tools: Modify error code for when perf_session__new() fails Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 04/10] perf tools: Use ACCESS_ONCE() instead of volatile cast Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 05/10] perf hists browser: Fix callchain print bug on TUI Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 06/10] perf tools: Move callchain config from record_opts to callchain_param Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 07/10] perf callchain: Move some parser functions to callchain.c Arnaldo Carvalho de Melo
2014-09-26 20:19 ` Arnaldo Carvalho de Melo [this message]
2014-09-26 20:19 ` [PATCH 09/10] perf tools: Convert {record,top}.call-graph option to call-graph.record-mode Arnaldo Carvalho de Melo
2014-09-26 20:19 ` [PATCH 10/10] perf tools: Fix line number in the config file error message Arnaldo Carvalho de Melo
2014-09-27 7:20 ` [GIT PULL 00/10] perf/core improvements and fixes Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1411762787-26113-9-git-send-email-acme@kernel.org \
--to=acme@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=dsahern@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mail@milianw.de \
--cc=mingo@kernel.org \
--cc=namhyung.kim@lge.com \
--cc=namhyung@kernel.org \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.