aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/ui/browsers/hists.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2018-04-02 14:48:18 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2018-04-03 09:24:26 -0400
commitef9ff6017e3c4593f3efa5776784cb417c58ad6c (patch)
treead83e7179a54373c683bcac64deb223cc308a34e /tools/perf/ui/browsers/hists.c
parent25c312dbf88ca402bf47389c5aa4f1552799a8ca (diff)
perf ui browser: Move the extra title lines from the hists browser
This will be useful for the annotate browser as well, that wants to have extra title lines, i.e. the current ui_browser unconditionally reserves the first line for a browser title and the last one for status messages. But some browsers, like the buckets one (hists browser) needs extra lines to show headers, allowing it to be shown or not, press 'H' in 'perf top' or 'perf report' to see this feature. So move that logic to the core ui_browser used by the hists_browser ('perf top' and 'perf report' main interface) so that it can be used by the annotate browser too. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Martin Liška <mliska@suse.cz> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935 Link: https://lkml.kernel.org/n/tip-r38xm3ut37ulbg1o5tn5iise@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/ui/browsers/hists.c')
-rw-r--r--tools/perf/ui/browsers/hists.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index cde9bab5061d..b06afb8f51fb 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -61,6 +61,15 @@ static int hist_browser__get_folding(struct hist_browser *browser)
61 return unfolded_rows; 61 return unfolded_rows;
62} 62}
63 63
64static void hist_browser__set_title_space(struct hist_browser *hb)
65{
66 struct ui_browser *browser = &hb->b;
67 struct hists *hists = hb->hists;
68 struct perf_hpp_list *hpp_list = hists->hpp_list;
69
70 browser->extra_title_lines = hb->show_headers ? hpp_list->nr_header_lines : 0;
71}
72
64static u32 hist_browser__nr_entries(struct hist_browser *hb) 73static u32 hist_browser__nr_entries(struct hist_browser *hb)
65{ 74{
66 u32 nr_entries; 75 u32 nr_entries;
@@ -81,10 +90,16 @@ static void hist_browser__update_rows(struct hist_browser *hb)
81 struct ui_browser *browser = &hb->b; 90 struct ui_browser *browser = &hb->b;
82 struct hists *hists = hb->hists; 91 struct hists *hists = hb->hists;
83 struct perf_hpp_list *hpp_list = hists->hpp_list; 92 struct perf_hpp_list *hpp_list = hists->hpp_list;
84 u16 header_offset, index_row; 93 u16 index_row;
94
95 if (!hb->show_headers) {
96 browser->rows += browser->extra_title_lines;
97 browser->extra_title_lines = 0;
98 return;
99 }
85 100
86 header_offset = hb->show_headers ? hpp_list->nr_header_lines : 0; 101 browser->extra_title_lines = hpp_list->nr_header_lines;
87 browser->rows = browser->height - header_offset; 102 browser->rows -= browser->extra_title_lines;
88 /* 103 /*
89 * Verify if we were at the last line and that line isn't 104 * Verify if we were at the last line and that line isn't
90 * visibe because we now show the header line(s). 105 * visibe because we now show the header line(s).
@@ -107,17 +122,6 @@ static void hist_browser__refresh_dimensions(struct ui_browser *browser)
107 * changeset. 122 * changeset.
108 */ 123 */
109 ui_browser__refresh_dimensions(browser); 124 ui_browser__refresh_dimensions(browser);
110 hist_browser__update_rows(hb);
111}
112
113static void hist_browser__gotorc(struct hist_browser *browser, int row, int column)
114{
115 struct hists *hists = browser->hists;
116 struct perf_hpp_list *hpp_list = hists->hpp_list;
117 u16 header_offset;
118
119 header_offset = browser->show_headers ? hpp_list->nr_header_lines : 0;
120 ui_browser__gotorc(&browser->b, row + header_offset, column);
121} 125}
122 126
123static void hist_browser__reset(struct hist_browser *browser) 127static void hist_browser__reset(struct hist_browser *browser)
@@ -732,7 +736,7 @@ static void hist_browser__show_callchain_entry(struct hist_browser *browser,
732 } 736 }
733 737
734 ui_browser__set_color(&browser->b, color); 738 ui_browser__set_color(&browser->b, color);
735 hist_browser__gotorc(browser, row, 0); 739 ui_browser__gotorc(&browser->b, row, 0);
736 ui_browser__write_nstring(&browser->b, " ", offset); 740 ui_browser__write_nstring(&browser->b, " ", offset);
737 ui_browser__printf(&browser->b, "%c", folded_sign); 741 ui_browser__printf(&browser->b, "%c", folded_sign);
738 ui_browser__write_graph(&browser->b, show_annotated ? SLSMG_RARROW_CHAR : ' '); 742 ui_browser__write_graph(&browser->b, show_annotated ? SLSMG_RARROW_CHAR : ' ');
@@ -1248,7 +1252,7 @@ static int hist_browser__show_entry(struct hist_browser *browser,
1248 }; 1252 };
1249 int column = 0; 1253 int column = 0;
1250 1254
1251 hist_browser__gotorc(browser, row, 0); 1255 ui_browser__gotorc(&browser->b, row, 0);
1252 1256
1253 hists__for_each_format(browser->hists, fmt) { 1257 hists__for_each_format(browser->hists, fmt) {
1254 char s[2048]; 1258 char s[2048];
@@ -1357,7 +1361,7 @@ static int hist_browser__show_hierarchy_entry(struct hist_browser *browser,
1357 goto show_callchain; 1361 goto show_callchain;
1358 } 1362 }
1359 1363
1360 hist_browser__gotorc(browser, row, 0); 1364 ui_browser__gotorc(&browser->b, row, 0);
1361 1365
1362 if (current_entry && browser->b.navkeypressed) 1366 if (current_entry && browser->b.navkeypressed)
1363 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED); 1367 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED);
@@ -1506,7 +1510,7 @@ static int hist_browser__show_no_entry(struct hist_browser *browser,
1506 browser->selection = NULL; 1510 browser->selection = NULL;
1507 } 1511 }
1508 1512
1509 hist_browser__gotorc(browser, row, 0); 1513 ui_browser__gotorc(&browser->b, row, 0);
1510 1514
1511 if (current_entry && browser->b.navkeypressed) 1515 if (current_entry && browser->b.navkeypressed)
1512 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED); 1516 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED);
@@ -1712,7 +1716,7 @@ static void hists_browser__headers(struct hist_browser *browser)
1712 hists_browser__scnprintf_headers(browser, headers, 1716 hists_browser__scnprintf_headers(browser, headers,
1713 sizeof(headers), line); 1717 sizeof(headers), line);
1714 1718
1715 ui_browser__gotorc(&browser->b, line, 0); 1719 ui_browser__gotorc_title(&browser->b, line, 0);
1716 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT); 1720 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT);
1717 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1); 1721 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1);
1718 } 1722 }
@@ -2142,6 +2146,7 @@ void hist_browser__init(struct hist_browser *browser,
2142 browser->b.seek = ui_browser__hists_seek; 2146 browser->b.seek = ui_browser__hists_seek;
2143 browser->b.use_navkeypressed = true; 2147 browser->b.use_navkeypressed = true;
2144 browser->show_headers = symbol_conf.show_hist_headers; 2148 browser->show_headers = symbol_conf.show_hist_headers;
2149 hist_browser__set_title_space(browser);
2145 2150
2146 if (symbol_conf.report_hierarchy) { 2151 if (symbol_conf.report_hierarchy) {
2147 struct perf_hpp_list_node *fmt_node; 2152 struct perf_hpp_list_node *fmt_node;