Home | History | Annotate | Download | only in browsers

Lines Matching full:browser

2 #include "../browser.h"
62 static bool disasm_line__filter(struct ui_browser *browser __maybe_unused,
73 static int annotate_browser__jumps_percent_color(struct annotate_browser *browser,
76 if (current && (!browser->b.use_navkeypressed || browser->b.navkeypressed))
78 if (nr == browser->max_jump_sources)
85 static int annotate_browser__set_jumps_percent_color(struct annotate_browser *browser,
88 int color = annotate_browser__jumps_percent_color(browser, nr, current);
89 return ui_browser__set_color(&browser->b, color);
92 static void annotate_browser__write(struct ui_browser *browser, void *entry, int row)
94 struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
97 bool current_entry = ui_browser__is_current_entry(browser, row);
99 (!current_entry || (browser->use_navkeypressed &&
100 !browser->navkeypressed)));
101 int width = browser->width, printed;
113 ui_browser__set_percent_color(browser, bdl->percent[i],
118 ui_browser__set_percent_color(browser, 0, current_entry);
125 if (!browser->navkeypressed)
154 ui_browser__set_color(browser, prev);
166 color = ui_browser__set_color(browser, HE_COLORSET_ADDR);
169 ui_browser__set_color(browser, color);
174 ui_browser__write_graph(browser, fwd ? SLSMG_DARROW_CHAR :
178 ui_browser__write_graph(browser, SLSMG_RARROW_CHAR);
187 ui_browser__write_graph(browser, SLSMG_LARROW_CHAR);
210 static void annotate_browser__draw_current_jump(struct ui_browser *browser)
212 struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
244 ui_browser__set_color(browser, HE_COLORSET_CODE);
245 __ui_browser__line_arrow(browser, pcnt_width + 2 + ab->addr_width,
249 static unsigned int annotate_browser__refresh(struct ui_browser *browser)
251 struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
252 int ret = ui_browser__list_head_refresh(browser);
258 annotate_browser__draw_current_jump(browser);
260 ui_browser__set_color(browser, HE_COLORSET_NORMAL);
261 __ui_browser__vline(browser, pcnt_width, 0, browser->height - 1);
298 static void annotate_browser__set_top(struct annotate_browser *browser,
303 ui_browser__refresh_dimensions(&browser->b);
304 back = browser->b.height / 2;
305 browser->b.top_idx = browser->b.index = idx;
307 while (browser->b.top_idx != 0 && back != 0) {
310 if (disasm_line__filter(&browser->b, &pos->node))
313 --browser->b.top_idx;
317 browser->b.top = pos;
318 browser->b.navkeypressed = true;
321 static void annotate_browser__set_rb_top(struct annotate_browser *browser,
333 annotate_browser__set_top(browser, pos, idx);
334 browser->curr_hot = nd;
337 static void annotate_browser__calc_percent(struct annotate_browser *browser,
340 struct map_symbol *ms = browser->b.priv;
346 browser->entries = RB_ROOT;
363 for (i = 0; i < browser->nr_events; i++) {
378 disasm_rb_tree__insert(&browser->entries, bpos,
379 browser->nr_events);
383 browser->curr_hot = rb_last(&browser->entries);
386 static bool annotate_browser__toggle_source(struct annotate_browser *browser)
390 off_t offset = browser->b.index - browser->b.top_idx;
392 browser->b.seek(&browser->b, offset, SEEK_CUR);
393 dl = list_entry(browser->b.top, struct disasm_line, node);
400 browser->b.nr_entries = browser->nr_entries;
402 browser->b.seek(&browser->b, -offset, SEEK_CUR);
403 browser->b.top_idx = bdl->idx - offset;
404 browser->b.index = bdl->idx;
408 browser->b.seek(&browser->b, -offset, SEEK_CUR);
415 browser->b.nr_entries = browser->nr_asm_entries;
417 browser->b.seek(&browser->b, -offset, SEEK_CUR);
418 browser->b.top_idx = bdl->idx_asm - offset;
419 browser->b.index = bdl->idx_asm;
425 static void annotate_browser__init_asm_mode(struct annotate_browser *browser)
427 ui_browser__reset_index(&browser->b);
428 browser->b.nr_entries = browser->nr_asm_entries;
439 static bool annotate_browser__callq(struct annotate_browser *browser,
443 struct map_symbol *ms = browser->b.priv;
444 struct disasm_line *dl = browser->selection;
474 ui_browser__show_title(&browser->b, title);
479 struct disasm_line *annotate_browser__find_offset(struct annotate_browser *browser,
482 struct map_symbol *ms = browser->b.priv;
491 if (!disasm_line__filter(&browser->b, &pos->node))
498 static bool annotate_browser__jump(struct annotate_browser *browser)
500 struct disasm_line *dl = browser->selection;
506 dl = annotate_browser__find_offset(browser, dl->ops.target.offset, &idx);
512 annotate_browser__set_top(browser, dl, idx);
518 struct disasm_line *annotate_browser__find_string(struct annotate_browser *browser,
521 struct map_symbol *ms = browser->b.priv;
524 struct disasm_line *pos = browser->selection;
526 *idx = browser->b.index;
528 if (disasm_line__filter(&browser->b, &pos->node))
540 static bool __annotate_browser__search(struct annotate_browser *browser)
545 dl = annotate_browser__find_string(browser, browser->search_bf, &idx);
551 annotate_browser__set_top(browser, dl, idx);
552 browser->searching_backwards = false;
557 struct disasm_line *annotate_browser__find_string_reverse(struct annotate_browser *browser,
560 struct map_symbol *ms = browser->b.priv;
563 struct disasm_line *pos = browser->selection;
565 *idx = browser->b.index;
567 if (disasm_line__filter(&browser->b, &pos->node))
579 static bool __annotate_browser__search_reverse(struct annotate_browser *browser)
584 dl = annotate_browser__find_string_reverse(browser, browser->search_bf, &idx);
590 annotate_browser__set_top(browser, dl, idx);
591 browser->searching_backwards = true;
595 static bool annotate_browser__search_window(struct annotate_browser *browser,
598 if (ui_browser__input_window("Search", "String: ", browser->search_bf,
601 !*browser->search_bf)
607 static bool annotate_browser__search(struct annotate_browser *browser, int delay_secs)
609 if (annotate_browser__search_window(browser, delay_secs))
610 return __annotate_browser__search(browser);
615 static bool annotate_browser__continue_search(struct annotate_browser *browser,
618 if (!*browser->search_bf)
619 return annotate_browser__search(browser, delay_secs);
621 return __annotate_browser__search(browser);
624 static bool annotate_browser__search_reverse(struct annotate_browser *browser
627 if (annotate_browser__search_window(browser, delay_secs))
628 return __annotate_browser__search_reverse(browser);
634 bool annotate_browser__continue_search_reverse(struct annotate_browser *browser,
637 if (!*browser->search_bf)
638 return annotate_browser__search_reverse(browser, delay_secs);
640 return __annotate_browser__search_reverse(browser);
643 static void annotate_browser__update_addr_width(struct annotate_browser *browser)
646 browser->target_width = browser->min_addr_width;
648 browser->target_width = browser->max_addr_width;
650 browser->addr_width = browser->target_width;
653 browser->addr_width += browser->jumps_width + 1;
656 static int annotate_browser__run(struct annotate_browser *browser,
661 struct map_symbol *ms = browser->b.priv;
669 if (ui_browser__show(&browser->b, title, help) < 0)
672 annotate_browser__calc_percent(browser, evsel);
674 if (browser->curr_hot) {
675 annotate_browser__set_rb_top(browser, browser->curr_hot);
676 browser->b.navkeypressed = false;
679 nd = browser->curr_hot;
682 key = ui_browser__run(&browser->b, delay_secs);
685 annotate_browser__calc_percent(browser, evsel);
707 nd = rb_last(&browser->entries);
709 nd = browser->curr_hot;
715 nd = rb_first(&browser->entries);
717 nd = browser->curr_hot;
721 ui_browser__help_window(&browser->b,
743 nd = browser->curr_hot;
746 if (annotate_browser__toggle_source(browser))
751 annotate_browser__update_addr_width(browser);
758 annotate_browser__update_addr_width(browser);
761 if (annotate_browser__search(browser, delay_secs)) {
767 if (browser->searching_backwards ?
768 annotate_browser__continue_search_reverse(browser, delay_secs) :
769 annotate_browser__continue_search(browser, delay_secs))
773 if (annotate_browser__search_reverse(browser, delay_secs))
780 seq++, browser->b.nr_entries,
781 browser->b.height,
782 browser->b.index,
783 browser->b.top_idx,
784 browser->nr_asm_entries);
789 if (browser->selection == NULL)
791 else if (browser->selection->offset == -1)
793 else if (!browser->selection->ins) {
794 if (strcmp(browser->selection->name, "retq"))
797 } else if (!(annotate_browser__jump(browser) ||
798 annotate_browser__callq(browser, evsel, hbt))) {
813 annotate_browser__set_rb_top(browser, nd);
816 ui_browser__hide(&browser->b);
826 static void annotate_browser__mark_jump_targets(struct annotate_browser *browser,
830 struct map_symbol *ms = browser->b.priv;
838 struct disasm_line *dl = browser->offsets[offset], *dlt;
844 dlt = browser->offsets[dl->ops.target.offset];
853 if (++bdlt->jump_sources > browser->max_jump_sources)
854 browser->max_jump_sources = bdlt->jump_sources;
856 ++browser->nr_jumps;
881 struct annotate_browser browser = {
903 browser.offsets = zalloc(size * sizeof(struct disasm_line *));
904 if (browser.offsets == NULL) {
922 browser.start = map__rip_2objdump(map, sym->start);
928 if (browser.b.width < line_len)
929 browser.b.width = line_len;
931 bpos->idx = browser.nr_entries++;
933 bpos->idx_asm = browser.nr_asm_entries++;
942 browser.offsets[pos->offset] = pos;
947 annotate_browser__mark_jump_targets(&browser, size);
949 browser.addr_width = browser.target_width = browser.min_addr_width = hex_width(size);
950 browser.max_addr_width = hex_width(sym->end);
951 browser.jumps_width = width_jumps(browser.max_jump_sources);
952 browser.nr_events = nr_pcnt;
953 browser.b.nr_entries = browser.nr_entries;
954 browser.b.entries = &notes->src->source,
955 browser.b.width += 18; /* Percentage */
958 annotate_browser__init_asm_mode(&browser);
960 annotate_browser__update_addr_width(&browser);
962 ret = annotate_browser__run(&browser, evsel, hbt);
969 free(browser.offsets);