[PATCH v2 2/2] perf report: Display titles in left frame of annotate browser

From: Jin Yao
Date: Thu May 04 2017 - 22:30:00 EST


The annotate browser is divided into 2 frames. Left frame
contains 3 columns (some platforms only have one column).

For example:

â26 int compute_flag()
â27 {
22.80 1.20 â sub $0x8,%rsp
â25 int i;
â
â27 i = rand() % 2;
22.78 1.20 1 â â callq rand@plt

While it's hard for user to understand what the data is.

This patch adds the titles "Percent", "IPC" and "Cycle"
on columns.

Percent IPC Cycle â
â25 __attribute__((noinline))
â26 int compute_flag()
â27 {
22.80 1.20 â sub $0x8,%rsp
â25 int i;
â
â27 i = rand() % 2;
22.78 1.20 1 â â callq rand@plt

The titles are displayed at row 0 of annotate browser if row 0
doesn't have values of percent, ipc and cycle.

Change log:
----------
v2:
1. Change "Percnt" to "Percent"
2. Add explanations for "Percent", "IPC" and "Cycle".

When user hit hotkey 'h', the help window is popup. Explanations
are added at the bottom of window.

âReport explanation: â
â Percent: sample percentage for a block â
â IPC: instructions per cycle for a block â
â cycle: average number of cycles for a block â

Signed-off-by: Jin Yao <yao.jin@xxxxxxxxxxxxxxx>
---
tools/perf/ui/browsers/annotate.c | 35 +++++++++++++++++++++++++++++++----
1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c
index 52c1e8d..f015813 100644
--- a/tools/perf/ui/browsers/annotate.c
+++ b/tools/perf/ui/browsers/annotate.c
@@ -125,12 +125,21 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
int i, pcnt_width = annotate_browser__pcnt_width(ab);
double percent_max = 0.0;
char bf[256];
+ bool show_title = false;

for (i = 0; i < ab->nr_events; i++) {
if (bdl->samples[i].percent > percent_max)
percent_max = bdl->samples[i].percent;
}

+ if ((row == 0) && (dl->offset == -1 || percent_max == 0.0)) {
+ if (ab->have_cycles) {
+ if (dl->ipc == 0.0 && dl->cycles == 0)
+ show_title = true;
+ } else
+ show_title = true;
+ }
+
if (dl->offset != -1 && percent_max != 0.0) {
for (i = 0; i < ab->nr_events; i++) {
ui_browser__set_percent_color(browser,
@@ -146,18 +155,30 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
}
} else {
ui_browser__set_percent_color(browser, 0, current_entry);
- ui_browser__write_nstring(browser, " ", 7 * ab->nr_events);
+
+ if (!show_title)
+ ui_browser__write_nstring(browser, " ",
+ 7 * ab->nr_events);
+ else
+ ui_browser__printf(browser, "%*s", 7, "Percent");
}
if (ab->have_cycles) {
if (dl->ipc)
ui_browser__printf(browser, "%*.2f ", IPC_WIDTH - 1, dl->ipc);
- else
+ else if (!show_title)
ui_browser__write_nstring(browser, " ", IPC_WIDTH);
+ else
+ ui_browser__printf(browser, "%*s ",
+ IPC_WIDTH - 1, "IPC");
+
if (dl->cycles)
ui_browser__printf(browser, "%*" PRIu64 " ",
CYCLES_WIDTH - 1, dl->cycles);
- else
+ else if (!show_title)
ui_browser__write_nstring(browser, " ", CYCLES_WIDTH);
+ else
+ ui_browser__printf(browser, "%*s ",
+ CYCLES_WIDTH - 1, "Cycle");
}

SLsmg_write_char(' ');
@@ -781,7 +802,13 @@ static int annotate_browser__run(struct annotate_browser *browser,
"/ Search string\n"
"k Toggle line numbers\n"
"r Run available scripts\n"
- "? Search string backwards\n");
+ "? Search string backwards\n"
+ "\n"
+ "Report explanation:\n"
+ " Percent: sample percentage for a block\n"
+ " IPC: instructions per cycle for a block\n"
+ " cycle: average number of cycles for a block\n"
+ );
continue;
case 'r':
{
--
2.7.4