|
@@ -16,6 +16,9 @@ struct disasm_line_samples {
|
|
|
u64 nr;
|
|
|
};
|
|
|
|
|
|
+#define IPC_WIDTH 6
|
|
|
+#define CYCLES_WIDTH 6
|
|
|
+
|
|
|
struct browser_disasm_line {
|
|
|
struct rb_node rb_node;
|
|
|
u32 idx;
|
|
@@ -97,6 +100,15 @@ static int annotate_browser__set_jumps_percent_color(struct annotate_browser *br
|
|
|
return ui_browser__set_color(&browser->b, color);
|
|
|
}
|
|
|
|
|
|
+static int annotate_browser__pcnt_width(struct annotate_browser *ab)
|
|
|
+{
|
|
|
+ int w = 7 * ab->nr_events;
|
|
|
+
|
|
|
+ if (ab->have_cycles)
|
|
|
+ w += IPC_WIDTH + CYCLES_WIDTH;
|
|
|
+ return w;
|
|
|
+}
|
|
|
+
|
|
|
static void annotate_browser__write(struct ui_browser *browser, void *entry, int row)
|
|
|
{
|
|
|
struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
|
|
@@ -107,7 +119,7 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
|
|
|
(!current_entry || (browser->use_navkeypressed &&
|
|
|
!browser->navkeypressed)));
|
|
|
int width = browser->width, printed;
|
|
|
- int i, pcnt_width = 7 * ab->nr_events;
|
|
|
+ int i, pcnt_width = annotate_browser__pcnt_width(ab);
|
|
|
double percent_max = 0.0;
|
|
|
char bf[256];
|
|
|
|
|
@@ -117,19 +129,34 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
|
|
|
}
|
|
|
|
|
|
if (dl->offset != -1 && percent_max != 0.0) {
|
|
|
- for (i = 0; i < ab->nr_events; i++) {
|
|
|
- ui_browser__set_percent_color(browser,
|
|
|
- bdl->samples[i].percent,
|
|
|
- current_entry);
|
|
|
- if (annotate_browser__opts.show_total_period)
|
|
|
- slsmg_printf("%6" PRIu64 " ",
|
|
|
- bdl->samples[i].nr);
|
|
|
- else
|
|
|
- slsmg_printf("%6.2f ", bdl->samples[i].percent);
|
|
|
+ if (percent_max != 0.0) {
|
|
|
+ for (i = 0; i < ab->nr_events; i++) {
|
|
|
+ ui_browser__set_percent_color(browser,
|
|
|
+ bdl->samples[i].percent,
|
|
|
+ current_entry);
|
|
|
+ if (annotate_browser__opts.show_total_period)
|
|
|
+ slsmg_printf("%6" PRIu64 " ",
|
|
|
+ bdl->samples[i].nr);
|
|
|
+ else
|
|
|
+ slsmg_printf("%6.2f ", bdl->samples[i].percent);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ slsmg_write_nstring(" ", 7 * ab->nr_events);
|
|
|
}
|
|
|
} else {
|
|
|
ui_browser__set_percent_color(browser, 0, current_entry);
|
|
|
- slsmg_write_nstring(" ", pcnt_width);
|
|
|
+ slsmg_write_nstring(" ", 7 * ab->nr_events);
|
|
|
+ }
|
|
|
+ if (ab->have_cycles) {
|
|
|
+ if (dl->ipc)
|
|
|
+ slsmg_printf("%*.2f ", IPC_WIDTH - 1, dl->ipc);
|
|
|
+ else
|
|
|
+ slsmg_write_nstring(" ", IPC_WIDTH);
|
|
|
+ if (dl->cycles)
|
|
|
+ slsmg_printf("%*" PRIu64 " ",
|
|
|
+ CYCLES_WIDTH - 1, dl->cycles);
|
|
|
+ else
|
|
|
+ slsmg_write_nstring(" ", CYCLES_WIDTH);
|
|
|
}
|
|
|
|
|
|
SLsmg_write_char(' ');
|
|
@@ -232,7 +259,7 @@ static void annotate_browser__draw_current_jump(struct ui_browser *browser)
|
|
|
unsigned int from, to;
|
|
|
struct map_symbol *ms = ab->b.priv;
|
|
|
struct symbol *sym = ms->sym;
|
|
|
- u8 pcnt_width = 7;
|
|
|
+ u8 pcnt_width = annotate_browser__pcnt_width(ab);
|
|
|
|
|
|
/* PLT symbols contain external offsets */
|
|
|
if (strstr(sym->name, "@plt"))
|
|
@@ -256,8 +283,6 @@ static void annotate_browser__draw_current_jump(struct ui_browser *browser)
|
|
|
to = (u64)btarget->idx;
|
|
|
}
|
|
|
|
|
|
- pcnt_width *= ab->nr_events;
|
|
|
-
|
|
|
ui_browser__set_color(browser, HE_COLORSET_CODE);
|
|
|
__ui_browser__line_arrow(browser, pcnt_width + 2 + ab->addr_width,
|
|
|
from, to);
|
|
@@ -267,9 +292,7 @@ static unsigned int annotate_browser__refresh(struct ui_browser *browser)
|
|
|
{
|
|
|
struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
|
|
|
int ret = ui_browser__list_head_refresh(browser);
|
|
|
- int pcnt_width;
|
|
|
-
|
|
|
- pcnt_width = 7 * ab->nr_events;
|
|
|
+ int pcnt_width = annotate_browser__pcnt_width(ab);
|
|
|
|
|
|
if (annotate_browser__opts.jump_arrows)
|
|
|
annotate_browser__draw_current_jump(browser);
|