提交 58ecd33b 编写于 作者: N Namhyung Kim 提交者: Ingo Molnar

perf report: Use hierarchy hpp list on gtk

Now hpp formats are linked using perf_hpp_list_node when hierarchy is
enabled.  Like in stdio, use this info to print entries with multiple
sort keys in a single hierarchy properly.
Signed-off-by: NNamhyung Kim <namhyung@kernel.org>
Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1457361308-514-8-git-send-email-namhyung@kernel.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
上级 a61a22f6
...@@ -407,7 +407,9 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists, ...@@ -407,7 +407,9 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists,
struct rb_node *node; struct rb_node *node;
struct hist_entry *he; struct hist_entry *he;
struct perf_hpp_fmt *fmt; struct perf_hpp_fmt *fmt;
struct perf_hpp_list_node *fmt_node;
u64 total = hists__total_period(hists); u64 total = hists__total_period(hists);
int size;
for (node = rb_first(root); node; node = rb_next(node)) { for (node = rb_first(root); node; node = rb_next(node)) {
GtkTreeIter iter; GtkTreeIter iter;
...@@ -425,11 +427,11 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists, ...@@ -425,11 +427,11 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists,
gtk_tree_store_append(store, &iter, parent); gtk_tree_store_append(store, &iter, parent);
col_idx = 0; col_idx = 0;
hists__for_each_format(hists, fmt) {
if (perf_hpp__is_sort_entry(fmt) ||
perf_hpp__is_dynamic_entry(fmt))
break;
/* the first hpp_list_node is for overhead columns */
fmt_node = list_first_entry(&hists->hpp_formats,
struct perf_hpp_list_node, list);
perf_hpp_list__for_each_format(&fmt_node->hpp, fmt) {
if (fmt->color) if (fmt->color)
fmt->color(fmt, hpp, he); fmt->color(fmt, hpp, he);
else else
...@@ -439,6 +441,7 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists, ...@@ -439,6 +441,7 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists,
} }
bf = hpp->buf; bf = hpp->buf;
size = hpp->size;
perf_hpp_list__for_each_format(he->hpp_list, fmt) { perf_hpp_list__for_each_format(he->hpp_list, fmt) {
int ret; int ret;
...@@ -451,9 +454,12 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists, ...@@ -451,9 +454,12 @@ static void perf_gtk__add_hierarchy_entries(struct hists *hists,
advance_hpp(hpp, ret + 2); advance_hpp(hpp, ret + 2);
} }
gtk_tree_store_set(store, &iter, col_idx, rtrim(bf), -1); gtk_tree_store_set(store, &iter, col_idx, ltrim(rtrim(bf)), -1);
if (!he->leaf) { if (!he->leaf) {
hpp->buf = bf;
hpp->size = size;
perf_gtk__add_hierarchy_entries(hists, &he->hroot_out, perf_gtk__add_hierarchy_entries(hists, &he->hroot_out,
store, &iter, hpp, store, &iter, hpp,
min_pcnt); min_pcnt);
...@@ -486,6 +492,7 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists, ...@@ -486,6 +492,7 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists,
float min_pcnt) float min_pcnt)
{ {
struct perf_hpp_fmt *fmt; struct perf_hpp_fmt *fmt;
struct perf_hpp_list_node *fmt_node;
GType col_types[MAX_COLUMNS]; GType col_types[MAX_COLUMNS];
GtkCellRenderer *renderer; GtkCellRenderer *renderer;
GtkTreeStore *store; GtkTreeStore *store;
...@@ -494,7 +501,7 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists, ...@@ -494,7 +501,7 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists,
int nr_cols = 0; int nr_cols = 0;
char s[512]; char s[512];
char buf[512]; char buf[512];
bool first = true; bool first_node, first_col;
struct perf_hpp hpp = { struct perf_hpp hpp = {
.buf = s, .buf = s,
.size = sizeof(s), .size = sizeof(s),
...@@ -514,11 +521,11 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists, ...@@ -514,11 +521,11 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists,
renderer = gtk_cell_renderer_text_new(); renderer = gtk_cell_renderer_text_new();
col_idx = 0; col_idx = 0;
hists__for_each_format(hists, fmt) {
if (perf_hpp__is_sort_entry(fmt) ||
perf_hpp__is_dynamic_entry(fmt))
break;
/* the first hpp_list_node is for overhead columns */
fmt_node = list_first_entry(&hists->hpp_formats,
struct perf_hpp_list_node, list);
perf_hpp_list__for_each_format(&fmt_node->hpp, fmt) {
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
-1, fmt->name, -1, fmt->name,
renderer, "markup", renderer, "markup",
...@@ -527,20 +534,24 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists, ...@@ -527,20 +534,24 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists,
/* construct merged column header since sort keys share single column */ /* construct merged column header since sort keys share single column */
buf[0] = '\0'; buf[0] = '\0';
hists__for_each_format(hists ,fmt) { first_node = true;
if (!perf_hpp__is_sort_entry(fmt) && list_for_each_entry_continue(fmt_node, &hists->hpp_formats, list) {
!perf_hpp__is_dynamic_entry(fmt)) if (!first_node)
continue;
if (perf_hpp__should_skip(fmt, hists))
continue;
if (first)
first = false;
else
strcat(buf, " / "); strcat(buf, " / ");
first_node = false;
fmt->header(fmt, &hpp, hists_to_evsel(hists)); first_col = true;
strcat(buf, rtrim(hpp.buf)); perf_hpp_list__for_each_format(&fmt_node->hpp ,fmt) {
if (perf_hpp__should_skip(fmt, hists))
continue;
if (!first_col)
strcat(buf, "+");
first_col = false;
fmt->header(fmt, &hpp, hists_to_evsel(hists));
strcat(buf, ltrim(rtrim(hpp.buf)));
}
} }
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册