summaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2016-04-11 17:15:48 +0200
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-04-12 03:18:18 +0200
commitea4539652eccc87b14fbcbc90467ebcb87f02ddb (patch)
treefa6fa42e679bd3d4997bee0b2229620bd0ad280b /tools/perf
parentperf evsel: Rename print_ip() to fprintf_sym() (diff)
downloadlinux-ea4539652eccc87b14fbcbc90467ebcb87f02ddb.tar.xz
linux-ea4539652eccc87b14fbcbc90467ebcb87f02ddb.zip
perf evsel: Introduce fprintf_callchain() method out of fprintf_sym()
In 'perf trace' we're just interested in printing callchains, and we don't want to use the symbol_conf.use_callchain, so move the callchain part to a new method. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Milian Wolff <milian.wolff@kdab.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-kcn3romzivcpxb3u75s9nz33@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/builtin-trace.c4
-rw-r--r--tools/perf/util/evsel.h6
-rw-r--r--tools/perf/util/session.c29
3 files changed, 32 insertions, 7 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index a0d5c680c39e..63a3cc9b717c 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2203,8 +2203,8 @@ signed_print:
event->header.type);
goto out_put;
}
- perf_evsel__fprintf_sym(evsel, sample, &al, 38, print_opts,
- scripting_max_stack, trace->output);
+ perf_evsel__fprintf_callchain(evsel, sample, &al, 38, print_opts,
+ scripting_max_stack, trace->output);
}
out:
ttrace->entry_pending = false;
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 501ea6e565f1..ab3632caba9f 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -381,6 +381,12 @@ struct perf_attr_details {
int perf_evsel__fprintf(struct perf_evsel *evsel,
struct perf_attr_details *details, FILE *fp);
+int perf_evsel__fprintf_callchain(struct perf_evsel *evsel,
+ struct perf_sample *sample,
+ struct addr_location *al, int left_alignment,
+ unsigned int print_opts,
+ unsigned int stack_depth, FILE *fp);
+
bool perf_evsel__fallback(struct perf_evsel *evsel, int err,
char *msg, size_t msgsize);
int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target,
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 0669a088ea0d..e384b651a3e8 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1953,10 +1953,10 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,
return NULL;
}
-int perf_evsel__fprintf_sym(struct perf_evsel *evsel, struct perf_sample *sample,
- struct addr_location *al, int left_alignment,
- unsigned int print_opts, unsigned int stack_depth,
- FILE *fp)
+int perf_evsel__fprintf_callchain(struct perf_evsel *evsel, struct perf_sample *sample,
+ struct addr_location *al, int left_alignment,
+ unsigned int print_opts, unsigned int stack_depth,
+ FILE *fp)
{
int printed = 0;
struct callchain_cursor_node *node;
@@ -1968,7 +1968,7 @@ int perf_evsel__fprintf_sym(struct perf_evsel *evsel, struct perf_sample *sample
int print_srcline = print_opts & PRINT_IP_OPT_SRCLINE;
char s = print_oneline ? ' ' : '\t';
- if (symbol_conf.use_callchain && sample->callchain) {
+ if (sample->callchain) {
struct addr_location node_al;
if (thread__resolve_callchain(al->thread, evsel,
@@ -2027,7 +2027,26 @@ int perf_evsel__fprintf_sym(struct perf_evsel *evsel, struct perf_sample *sample
next:
callchain_cursor_advance(&callchain_cursor);
}
+ }
+
+ return printed;
+}
+
+int perf_evsel__fprintf_sym(struct perf_evsel *evsel, struct perf_sample *sample,
+ struct addr_location *al, int left_alignment,
+ unsigned int print_opts, unsigned int stack_depth,
+ FILE *fp)
+{
+ int printed = 0;
+ int print_ip = print_opts & PRINT_IP_OPT_IP;
+ int print_sym = print_opts & PRINT_IP_OPT_SYM;
+ int print_dso = print_opts & PRINT_IP_OPT_DSO;
+ int print_symoffset = print_opts & PRINT_IP_OPT_SYMOFFSET;
+ int print_srcline = print_opts & PRINT_IP_OPT_SRCLINE;
+ if (symbol_conf.use_callchain && sample->callchain) {
+ printed += perf_evsel__fprintf_callchain(evsel, sample, al, left_alignment,
+ print_opts, stack_depth, fp);
} else if (!(al->sym && al->sym->ignore)) {
printed += fprintf(fp, "%-*.*s", left_alignment, left_alignment, " ");