Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 304853
b: refs/heads/master
c: a3f895b
h: refs/heads/master
i:
  304851: 27c8932
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo committed Apr 24, 2012
1 parent dbcd4c4 commit 8a9e0f7
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 59d038d591f7f00e6752cbfadbbc1c0ca318c5c0
refs/heads/master: a3f895be1f1ed17f66e6e71adeef0cc7f937512c
39 changes: 39 additions & 0 deletions trunk/tools/perf/ui/browser.c
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,45 @@ void ui_browser__write_graph(struct ui_browser *browser __used, int graph)
SLsmg_set_char_set(0);
}

void __ui_browser__line_arrow_up(struct ui_browser *browser, unsigned int column,
u64 start, u64 end, int start_width)
{
unsigned int row, end_row;

SLsmg_set_char_set(1);

if (start < browser->top_idx + browser->height) {
row = start - browser->top_idx;
ui_browser__gotorc(browser, row, column);
SLsmg_write_char(SLSMG_LLCORN_CHAR);
ui_browser__gotorc(browser, row, column + 1);
SLsmg_draw_hline(start_width);

if (row-- == 0)
goto out;
} else
row = browser->height - 1;

if (end > browser->top_idx)
end_row = end - browser->top_idx;
else
end_row = 0;

ui_browser__gotorc(browser, end_row, column);
SLsmg_draw_vline(row - end_row + 1);

ui_browser__gotorc(browser, end_row, column);
if (end >= browser->top_idx) {
SLsmg_write_char(SLSMG_ULCORN_CHAR);
ui_browser__gotorc(browser, end_row, column + 1);
SLsmg_write_char(SLSMG_HLINE_CHAR);
ui_browser__gotorc(browser, end_row, column + 2);
SLsmg_write_char(SLSMG_RARROW_CHAR);
}
out:
SLsmg_set_char_set(0);
}

void ui_browser__init(void)
{
int i = 0;
Expand Down
2 changes: 2 additions & 0 deletions trunk/tools/perf/ui/browser.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ void ui_browser__reset_index(struct ui_browser *self);

void ui_browser__gotorc(struct ui_browser *self, int y, int x);
void ui_browser__write_graph(struct ui_browser *browser, int graph);
void __ui_browser__line_arrow_up(struct ui_browser *browser, unsigned int column,
u64 start, u64 end, int start_width);
void __ui_browser__show_title(struct ui_browser *browser, const char *title);
void ui_browser__show_title(struct ui_browser *browser, const char *title);
int ui_browser__show(struct ui_browser *self, const char *title,
Expand Down
61 changes: 57 additions & 4 deletions trunk/tools/perf/ui/browsers/annotate.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,13 @@ static void annotate_browser__write(struct ui_browser *self, void *entry, int ro
addr += ab->start;

if (!ab->use_offset) {
printed = scnprintf(bf, sizeof(bf), "%" PRIx64 ":", addr);
printed = scnprintf(bf, sizeof(bf), " %" PRIx64 ":", addr);
} else {
if (bdl->jump_target) {
printed = scnprintf(bf, sizeof(bf), "%*" PRIx64 ":",
printed = scnprintf(bf, sizeof(bf), " %*" PRIx64 ":",
ab->offset_width, addr);
} else {
printed = scnprintf(bf, sizeof(bf), "%*s ",
printed = scnprintf(bf, sizeof(bf), " %*s ",
ab->offset_width, " ");
}
}
Expand Down Expand Up @@ -141,6 +141,59 @@ static void annotate_browser__write(struct ui_browser *self, void *entry, int ro
ab->selection = dl;
}

static void annotate_browser__draw_current_loop(struct ui_browser *browser)
{
struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
struct map_symbol *ms = browser->priv;
struct symbol *sym = ms->sym;
struct annotation *notes = symbol__annotation(sym);
struct disasm_line *cursor = ab->selection, *pos = cursor, *target;
struct browser_disasm_line *bcursor = disasm_line__browser(cursor),
*btarget, *bpos;
unsigned int from, to, start_width = 2;

list_for_each_entry_from(pos, &notes->src->source, node) {
if (!pos->ins || !ins__is_jump(pos->ins))
continue;

target = ab->offsets[pos->ops.target];
if (!target)
continue;

btarget = disasm_line__browser(target);
if (btarget->idx <= bcursor->idx)
goto found;
}

return;

found:
bpos = disasm_line__browser(pos);
if (ab->hide_src_code) {
from = bpos->idx_asm;
to = btarget->idx_asm;
} else {
from = (u64)bpos->idx;
to = (u64)btarget->idx;
}

ui_browser__set_color(browser, HE_COLORSET_CODE);

if (!bpos->jump_target)
start_width += ab->offset_width + 1;

__ui_browser__line_arrow_up(browser, 10, from, to, start_width);
}

static unsigned int annotate_browser__refresh(struct ui_browser *browser)
{
int ret = ui_browser__list_head_refresh(browser);

annotate_browser__draw_current_loop(browser);

return ret;
}

static double disasm_line__calc_percent(struct disasm_line *dl, struct symbol *sym, int evidx)
{
double percent = 0.0;
Expand Down Expand Up @@ -666,7 +719,7 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx,
};
struct annotate_browser browser = {
.b = {
.refresh = ui_browser__list_head_refresh,
.refresh = annotate_browser__refresh,
.seek = ui_browser__list_head_seek,
.write = annotate_browser__write,
.filter = disasm_line__filter,
Expand Down

0 comments on commit 8a9e0f7

Please sign in to comment.