From: tip-bot for Namhyung Kim <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: penberg@kernel.org, hpa@zytor.com, peterz@infradead.org,
jolsa@kernel.org, andi@firstfloor.org, wangnan0@huawei.com,
acme@redhat.com, mingo@kernel.org, tglx@linutronix.de,
linux-kernel@vger.kernel.org, eranian@google.com,
namhyung@kernel.org, dsahern@gmail.com
Subject: [tip:perf/core] perf ui/stdio: Implement hierarchy output mode
Date: Wed, 24 Feb 2016 23:43:25 -0800 [thread overview]
Message-ID: <tip-ef86d68a088c324e4bd85f82387d1f9a571affd0@git.kernel.org> (raw)
In-Reply-To: <1456326830-30456-10-git-send-email-namhyung@kernel.org>
Commit-ID: ef86d68a088c324e4bd85f82387d1f9a571affd0
Gitweb: http://git.kernel.org/tip/ef86d68a088c324e4bd85f82387d1f9a571affd0
Author: Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 25 Feb 2016 00:13:41 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 24 Feb 2016 20:21:12 -0300
perf ui/stdio: Implement hierarchy output mode
The hierarchy output mode is to group entries for each level so that
user can see higher level picture more easily. It also helps to find
out which component is most costly. The output will look like below:
15.11% swapper
14.97% [kernel.vmlinux]
0.09% [libahci]
0.05% [iwlwifi]
10.29% irq/33-iwlwifi
6.45% [kernel.vmlinux]
1.41% [mac80211]
1.15% [iwldvm]
1.14% [iwlwifi]
0.14% [cfg80211]
4.81% firefox
3.92% libxul.so
0.34% [kernel.vmlinux]
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Pekka Enberg <penberg@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1456326830-30456-10-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/ui/stdio/hist.c | 79 +++++++++++++++++++++++++++++++++++++++++++++-
tools/perf/util/hist.h | 2 ++
2 files changed, 80 insertions(+), 1 deletion(-)
diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
index 87b022f..90b8677 100644
--- a/tools/perf/ui/stdio/hist.c
+++ b/tools/perf/ui/stdio/hist.c
@@ -410,6 +410,76 @@ static int hist_entry__snprintf(struct hist_entry *he, struct perf_hpp *hpp)
return hpp->buf - start;
}
+static int hist_entry__hierarchy_fprintf(struct hist_entry *he,
+ struct perf_hpp *hpp,
+ int nr_sort_key, struct hists *hists,
+ FILE *fp)
+{
+ const char *sep = symbol_conf.field_sep;
+ struct perf_hpp_fmt *fmt;
+ char *buf = hpp->buf;
+ int ret, printed = 0;
+ bool first = true;
+
+ if (symbol_conf.exclude_other && !he->parent)
+ return 0;
+
+ ret = scnprintf(hpp->buf, hpp->size, "%*s", he->depth * HIERARCHY_INDENT, "");
+ advance_hpp(hpp, ret);
+
+ hists__for_each_format(he->hists, fmt) {
+ if (perf_hpp__is_sort_entry(fmt) || perf_hpp__is_dynamic_entry(fmt))
+ break;
+
+ /*
+ * If there's no field_sep, we still need
+ * to display initial ' '.
+ */
+ if (!sep || !first) {
+ ret = scnprintf(hpp->buf, hpp->size, "%s", sep ?: " ");
+ advance_hpp(hpp, ret);
+ } else
+ first = false;
+
+ if (perf_hpp__use_color() && fmt->color)
+ ret = fmt->color(fmt, hpp, he);
+ else
+ ret = fmt->entry(fmt, hpp, he);
+
+ ret = hist_entry__snprintf_alignment(he, hpp, fmt, ret);
+ advance_hpp(hpp, ret);
+ }
+
+ if (sep)
+ ret = scnprintf(hpp->buf, hpp->size, "%s", sep);
+ else
+ ret = scnprintf(hpp->buf, hpp->size, "%*s",
+ (nr_sort_key - 1) * HIERARCHY_INDENT + 2, "");
+ advance_hpp(hpp, ret);
+
+ /*
+ * No need to call hist_entry__snprintf_alignment() since this
+ * fmt is always the last column in the hierarchy mode.
+ */
+ fmt = he->fmt;
+ if (perf_hpp__use_color() && fmt->color)
+ fmt->color(fmt, hpp, he);
+ else
+ fmt->entry(fmt, hpp, he);
+
+ printed += fprintf(fp, "%s\n", buf);
+
+ if (symbol_conf.use_callchain && he->leaf) {
+ u64 total = hists__total_period(hists);
+
+ printed += hist_entry_callchain__fprintf(he, total, 0, fp);
+ goto out;
+ }
+
+out:
+ return printed;
+}
+
static int hist_entry__fprintf(struct hist_entry *he, size_t size,
struct hists *hists,
char *bf, size_t bfsz, FILE *fp)
@@ -424,6 +494,13 @@ static int hist_entry__fprintf(struct hist_entry *he, size_t size,
if (size == 0 || size > bfsz)
size = hpp.size = bfsz;
+ if (symbol_conf.report_hierarchy) {
+ int nr_sort = hists->hpp_list->nr_sort_keys;
+
+ return hist_entry__hierarchy_fprintf(he, &hpp, nr_sort,
+ hists, fp);
+ }
+
hist_entry__snprintf(he, &hpp);
ret = fprintf(fp, "%s\n", bf);
@@ -522,7 +599,7 @@ print_entries:
goto out;
}
- for (nd = rb_first(&hists->entries); nd; nd = rb_next(nd)) {
+ for (nd = rb_first(&hists->entries); nd; nd = __rb_hierarchy_next(nd, HMD_FORCE_CHILD)) {
struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
float percent;
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index d08e4f3..722aa44 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -437,4 +437,6 @@ static inline struct rb_node *rb_hierarchy_next(struct rb_node *node)
return __rb_hierarchy_next(node, HMD_NORMAL);
}
+#define HIERARCHY_INDENT 3
+
#endif /* __PERF_HIST_H */
next prev parent reply other threads:[~2016-02-25 7:45 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-24 15:13 [PATCHSET 00/18] perf tools: Add support for hierachy view (v7) Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 01/18] perf tools: Add helper functions for some sort keys Namhyung Kim
2016-02-25 7:40 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 02/18] perf hists: Basic support of hierarchical report view Namhyung Kim
2016-02-25 7:41 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 03/18] perf hists: Resort hist entries with hierarchy Namhyung Kim
2016-02-25 7:41 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 04/18] perf hists: Add helper functions for hierarchy mode Namhyung Kim
2016-02-25 7:41 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 05/18] perf hists: Introduce hist_entry__filter() Namhyung Kim
2016-02-24 23:22 ` Arnaldo Carvalho de Melo
2016-02-25 2:02 ` Namhyung Kim
2016-02-25 7:42 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 06/18] perf hists: Support filtering in hierarchy mode Namhyung Kim
2016-02-25 7:42 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 07/18] perf hists: Resort after filtering hierarchy Namhyung Kim
2016-02-25 7:42 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 08/18] perf hists: Count number of sort keys Namhyung Kim
2016-02-25 7:43 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 09/18] perf ui/stdio: Implement hierarchy output mode Namhyung Kim
2016-02-25 7:43 ` tip-bot for Namhyung Kim [this message]
2016-02-24 15:13 ` [PATCH v7 10/18] perf ui/stdio: Align column header for hierarchy output Namhyung Kim
2016-02-25 7:43 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 11/18] perf hists browser: Count number of hierarchy entries Namhyung Kim
2016-02-25 7:44 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 12/18] perf hists browser: Support collapsing/expanding whole entries in hierarchy Namhyung Kim
2016-02-25 7:44 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 13/18] perf hists browser: Implement hierarchy output Namhyung Kim
2016-02-25 7:44 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 14/18] perf hists browser: Align column header in hierarchy mode Namhyung Kim
2016-02-25 7:45 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 15/18] perf ui/gtk: Implement hierarchy output mode Namhyung Kim
2016-02-25 7:45 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 16/18] perf report: Add --hierarchy option Namhyung Kim
2016-02-25 7:45 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 17/18] perf hists: Support decaying in hierarchy mode Namhyung Kim
2016-02-25 7:46 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 15:13 ` [PATCH v7 18/18] perf top: Add --hierarchy option Namhyung Kim
2016-02-25 7:46 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-02-24 20:06 ` [PATCHSET 00/18] perf tools: Add support for hierachy view (v7) Arnaldo Carvalho de Melo
2016-02-24 23:29 ` Arnaldo Carvalho de Melo
2016-02-25 2:14 ` Namhyung Kim
2016-02-25 1:22 ` Arnaldo Carvalho de Melo
2016-02-25 2:27 ` Namhyung Kim
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=tip-ef86d68a088c324e4bd85f82387d1f9a571affd0@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=hpa@zytor.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=penberg@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=wangnan0@huawei.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox