Lines Matching defs:browser
50 static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf, size_t size);
61 static int hist_browser__get_folding(struct hist_browser *browser)
64 struct hists *hists = browser->hists;
68 (nd = hists__filter_entries(nd, browser->min_pcnt)) != NULL;
81 struct ui_browser *browser = &hb->b;
85 browser->extra_title_lines = hb->show_headers ? hpp_list->nr_header_lines : 0;
105 struct ui_browser *browser = &hb->b;
111 browser->rows += browser->extra_title_lines;
112 browser->extra_title_lines = 0;
116 browser->extra_title_lines = hpp_list->nr_header_lines;
117 browser->rows -= browser->extra_title_lines;
122 index_row = browser->index - browser->top_idx;
123 if (index_row >= browser->rows)
124 browser->index -= index_row - browser->rows + 1;
127 static void hist_browser__refresh_dimensions(struct ui_browser *browser)
129 struct hist_browser *hb = container_of(browser, struct hist_browser, b);
132 browser->width = 3 + (hists__sort_list_width(hb->hists) + sizeof("[k]"));
135 * before updating browser->width, as it will invalidate the
139 ui_browser__refresh_dimensions(browser);
142 static void hist_browser__reset(struct hist_browser *browser)
148 browser->nr_callchain_rows = 0;
150 hist_browser__update_nr_entries(browser);
151 browser->b.nr_entries = hist_browser__nr_entries(browser);
152 hist_browser__refresh_dimensions(&browser->b);
153 ui_browser__reset_index(&browser->b);
396 static bool hist_browser__selection_has_children(struct hist_browser *browser)
398 struct hist_entry *he = browser->he_selection;
399 struct map_symbol *ms = browser->selection;
410 static bool hist_browser__selection_unfolded(struct hist_browser *browser)
412 struct hist_entry *he = browser->he_selection;
413 struct map_symbol *ms = browser->selection;
424 static char *hist_browser__selection_sym_name(struct hist_browser *browser, char *bf, size_t size)
426 struct hist_entry *he = browser->he_selection;
427 struct map_symbol *ms = browser->selection;
439 return callchain_list__sym_name(callchain_entry, bf, size, browser->show_dso);
442 static bool hist_browser__toggle_fold(struct hist_browser *browser)
444 struct hist_entry *he = browser->he_selection;
445 struct map_symbol *ms = browser->selection;
461 browser->b.nr_entries -= he->nr_rows;
464 browser->nr_callchain_rows -= he->nr_rows;
466 browser->nr_hierarchy_entries -= he->nr_rows;
469 child_rows = hierarchy_count_rows(browser, he, true);
476 he->nr_rows = hierarchy_count_rows(browser, he, false);
480 browser->b.nr_entries += child_rows - he->nr_rows;
488 browser->b.nr_entries -= child_rows - he->nr_rows;
496 browser->b.nr_entries += he->nr_rows;
499 browser->nr_callchain_rows += he->nr_rows;
501 browser->nr_hierarchy_entries += he->nr_rows;
602 __hist_browser__set_folding(struct hist_browser *browser, bool unfold)
608 nd = rb_first_cached(&browser->hists->entries);
615 hist_entry__set_folding(he, browser, unfold);
618 if (he->filtered || percent < browser->min_pcnt)
622 browser->nr_hierarchy_entries++;
624 browser->nr_callchain_rows += he->nr_rows;
625 else if (unfold && !hist_entry__has_hierarchy_children(he, browser->min_pcnt)) {
626 browser->nr_hierarchy_entries++;
634 static void hist_browser__set_folding(struct hist_browser *browser, bool unfold)
636 browser->nr_hierarchy_entries = 0;
637 browser->nr_callchain_rows = 0;
638 __hist_browser__set_folding(browser, unfold);
640 browser->b.nr_entries = hist_browser__nr_entries(browser);
642 ui_browser__reset_index(&browser->b);
645 static void hist_browser__set_folding_selected(struct hist_browser *browser, bool unfold)
647 if (!browser->he_selection)
650 if (unfold == browser->he_selection->unfolded)
653 hist_browser__toggle_fold(browser);
656 static void ui_browser__warn_lost_events(struct ui_browser *browser)
658 ui_browser__warning(browser, 4,
665 static int hist_browser__title(struct hist_browser *browser, char *bf, size_t size)
667 return browser->title ? browser->title(browser, bf, size) : 0;
670 static int hist_browser__handle_hotkey(struct hist_browser *browser, bool warn_lost_event, char *title, size_t size, int key)
674 struct hist_browser_timer *hbt = browser->hbt;
675 struct evsel *evsel = hists_to_evsel(browser->hists);
683 if (hist_browser__has_filter(browser) || symbol_conf.report_hierarchy)
684 hist_browser__update_nr_entries(browser);
686 nr_entries = hist_browser__nr_entries(browser);
687 ui_browser__update_nr_entries(&browser->b, nr_entries);
694 ui_browser__warn_lost_events(&browser->b);
697 hist_browser__title(browser, title, size);
698 ui_browser__show_title(&browser->b, title);
702 struct hist_entry *h = rb_entry(browser->b.top, struct hist_entry, rb_node);
707 seq++, browser->b.nr_entries, browser->hists->nr_entries,
708 browser->b.extra_title_lines, browser->b.rows,
709 browser->b.index, browser->b.top_idx, h->row_offset, h->nr_rows);
714 hist_browser__set_folding(browser, false);
718 hist_browser__set_folding_selected(browser, false);
722 hist_browser__set_folding(browser, true);
726 hist_browser__toggle_fold(browser);
729 browser->show_headers = !browser->show_headers;
730 hist_browser__update_rows(browser);
733 if (hist_browser__toggle_fold(browser))
743 int hist_browser__run(struct hist_browser *browser, const char *help,
747 struct hist_browser_timer *hbt = browser->hbt;
750 browser->b.entries = &browser->hists->entries;
751 browser->b.nr_entries = hist_browser__nr_entries(browser);
753 hist_browser__title(browser, title, sizeof(title));
755 if (ui_browser__show(&browser->b, title, "%s", help) < 0)
758 if (key && hist_browser__handle_hotkey(browser, warn_lost_event, title, sizeof(title), key))
762 key = ui_browser__run(&browser->b, delay_secs);
764 if (hist_browser__handle_hotkey(browser, warn_lost_event, title, sizeof(title), key))
768 ui_browser__hide(&browser->b);
773 /* for hists browser */
782 typedef void (*print_callchain_entry_fn)(struct hist_browser *browser,
788 static void hist_browser__show_callchain_entry(struct hist_browser *browser,
796 bool show_annotated = browser->show_dso && chain->ms.sym && symbol__annotation(chain->ms.sym)->src;
799 width = browser->b.width - (offset + 2);
800 if (ui_browser__is_current_entry(&browser->b, row)) {
801 browser->selection = &chain->ms;
806 ui_browser__set_color(&browser->b, color);
807 ui_browser__gotorc(&browser->b, row, 0);
808 ui_browser__write_nstring(&browser->b, " ", offset);
809 ui_browser__printf(&browser->b, "%c", folded_sign);
810 ui_browser__write_graph(&browser->b, show_annotated ? SLSMG_RARROW_CHAR : ' ');
811 ui_browser__write_nstring(&browser->b, str, width);
826 typedef bool (*check_output_full_fn)(struct hist_browser *browser,
829 static bool hist_browser__check_output_full(struct hist_browser *browser,
832 return browser->b.rows == row;
835 static bool hist_browser__check_dump_full(struct hist_browser *browser __maybe_unused,
843 static int hist_browser__show_callchain_list(struct hist_browser *browser,
865 browser->show_dso);
887 print(browser, chain, str, offset, row, arg);
908 static int hist_browser__show_callchain_flat(struct hist_browser *browser,
941 row += hist_browser__show_callchain_list(browser, child,
947 if (is_output_full(browser, row))
964 row += hist_browser__show_callchain_list(browser, child,
970 if (is_output_full(browser, row))
978 if (is_output_full(browser, row))
986 static char *hist_browser__folded_callchain_str(struct hist_browser *browser,
995 browser->show_dso);
1012 static int hist_browser__show_callchain_folded(struct hist_browser *browser,
1052 chain_str = hist_browser__folded_callchain_str(browser,
1068 chain_str = hist_browser__folded_callchain_str(browser,
1084 print(browser, first_chain, chain_str, offset, row++, arg);
1089 if (is_output_full(browser, row))
1097 static int hist_browser__show_callchain_graph(struct hist_browser *browser,
1134 row += hist_browser__show_callchain_list(browser, child,
1140 if (is_output_full(browser, row))
1150 row += hist_browser__show_callchain_graph(browser, &child->rb_root,
1155 if (is_output_full(browser, row))
1163 static int hist_browser__show_callchain(struct hist_browser *browser,
1180 printed = hist_browser__show_callchain_flat(browser,
1185 printed = hist_browser__show_callchain_folded(browser,
1190 printed = hist_browser__show_callchain_graph(browser,
1197 browser->he_selection = entry;
1295 static int hist_browser__show_entry(struct hist_browser *browser,
1300 int width = browser->b.width;
1302 bool current_entry = ui_browser__is_current_entry(&browser->b, row);
1309 browser->he_selection = entry;
1310 browser->selection = &entry->ms;
1320 .b = &browser->b,
1326 ui_browser__gotorc(&browser->b, row, 0);
1328 hists__for_each_format(browser->hists, fmt) {
1337 column++ < browser->b.horiz_scroll)
1340 if (current_entry && browser->b.navkeypressed) {
1341 ui_browser__set_color(&browser->b,
1344 ui_browser__set_color(&browser->b,
1350 ui_browser__printf(&browser->b, "%c ", folded_sign);
1355 ui_browser__printf(&browser->b, " ");
1366 ui_browser__printf(&browser->b, "%s", s + ret);
1369 ui_browser__printf(&browser->b, "%s", s);
1375 if (!browser->b.navkeypressed)
1378 ui_browser__write_nstring(&browser->b, "", width);
1385 if (folded_sign == '-' && row != browser->b.rows) {
1391 printed += hist_browser__show_callchain(browser,
1401 static int hist_browser__show_hierarchy_entry(struct hist_browser *browser,
1407 int width = browser->b.width;
1409 bool current_entry = ui_browser__is_current_entry(&browser->b, row);
1415 .b = &browser->b,
1422 browser->he_selection = entry;
1423 browser->selection = &entry->ms;
1435 ui_browser__gotorc(&browser->b, row, 0);
1437 if (current_entry && browser->b.navkeypressed)
1438 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED);
1440 ui_browser__set_color(&browser->b, HE_COLORSET_NORMAL);
1442 ui_browser__write_nstring(&browser->b, "", level * HIERARCHY_INDENT);
1457 column++ < browser->b.horiz_scroll)
1460 if (current_entry && browser->b.navkeypressed) {
1461 ui_browser__set_color(&browser->b,
1464 ui_browser__set_color(&browser->b,
1469 ui_browser__printf(&browser->b, "%c ", folded_sign);
1473 ui_browser__printf(&browser->b, " ");
1484 ui_browser__printf(&browser->b, "%s", s + ret);
1488 ui_browser__printf(&browser->b, "%s", s);
1494 ui_browser__write_nstring(&browser->b, "", hierarchy_indent);
1498 if (column >= browser->b.horiz_scroll) {
1506 if (current_entry && browser->b.navkeypressed) {
1507 ui_browser__set_color(&browser->b,
1510 ui_browser__set_color(&browser->b,
1516 ui_browser__printf(&browser->b, "%c ", folded_sign);
1519 ui_browser__write_nstring(&browser->b, "", 2);
1535 ui_browser__printf(&browser->b, "%s", skip_spaces(s));
1544 if (!browser->b.navkeypressed)
1547 ui_browser__write_nstring(&browser->b, "", width);
1553 if (entry->leaf && folded_sign == '-' && row != browser->b.rows) {
1558 printed += hist_browser__show_callchain(browser, entry,
1567 static int hist_browser__show_no_entry(struct hist_browser *browser,
1570 int width = browser->b.width;
1571 bool current_entry = ui_browser__is_current_entry(&browser->b, row);
1577 int indent = browser->hists->nr_hpp_node - 2;
1580 browser->he_selection = NULL;
1581 browser->selection = NULL;
1584 ui_browser__gotorc(&browser->b, row, 0);
1586 if (current_entry && browser->b.navkeypressed)
1587 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED);
1589 ui_browser__set_color(&browser->b, HE_COLORSET_NORMAL);
1591 ui_browser__write_nstring(&browser->b, "", level * HIERARCHY_INDENT);
1595 fmt_node = list_first_entry(&browser->hists->hpp_formats,
1598 if (perf_hpp__should_skip(fmt, browser->hists) ||
1599 column++ < browser->b.horiz_scroll)
1602 ret = fmt->width(fmt, NULL, browser->hists);
1613 ui_browser__write_nstring(&browser->b, "", ret);
1617 ui_browser__write_nstring(&browser->b, "", indent * HIERARCHY_INDENT);
1620 if (column >= browser->b.horiz_scroll) {
1623 ret = snprintf(buf, sizeof(buf), "no entry >= %.2f%%", browser->min_pcnt);
1624 ui_browser__printf(&browser->b, " %s", buf);
1629 if (!browser->b.navkeypressed)
1632 ui_browser__write_nstring(&browser->b, "", width);
1643 hists_browser__scnprintf_headers(struct hist_browser *browser, char *buf,
1646 struct hists *hists = browser->hists;
1662 hists__for_each_format(browser->hists, fmt) {
1663 if (perf_hpp__should_skip(fmt, hists) || column++ < browser->b.horiz_scroll)
1681 static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *browser, char *buf, size_t size)
1683 struct hists *hists = browser->hists;
1704 if (column++ < browser->b.horiz_scroll)
1765 static void hists_browser__hierarchy_headers(struct hist_browser *browser)
1769 hists_browser__scnprintf_hierarchy_headers(browser, headers,
1772 ui_browser__gotorc_title(&browser->b, 0, 0);
1773 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT);
1774 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1);
1777 static void hists_browser__headers(struct hist_browser *browser)
1779 struct hists *hists = browser->hists;
1787 hists_browser__scnprintf_headers(browser, headers,
1790 ui_browser__gotorc_title(&browser->b, line, 0);
1791 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT);
1792 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1);
1796 static void hist_browser__show_headers(struct hist_browser *browser)
1799 hists_browser__hierarchy_headers(browser);
1801 hists_browser__headers(browser);
1804 static void ui_browser__hists_init_top(struct ui_browser *browser)
1806 if (browser->top == NULL) {
1809 hb = container_of(browser, struct hist_browser, b);
1810 browser->top = rb_first_cached(&hb->hists->entries);
1814 static unsigned int hist_browser__refresh(struct ui_browser *browser)
1818 struct hist_browser *hb = container_of(browser, struct hist_browser, b);
1823 ui_browser__hists_init_top(browser);
1827 for (nd = browser->top; nd; nd = rb_hierarchy_next(nd)) {
1848 if (row == browser->rows)
1859 if (row == browser->rows)
1905 static void ui_browser__hists_seek(struct ui_browser *browser,
1913 hb = container_of(browser, struct hist_browser, b);
1915 if (browser->nr_entries == 0)
1918 ui_browser__hists_init_top(browser);
1922 nd = hists__filter_entries(rb_first(browser->entries),
1926 nd = browser->top;
1929 nd = rb_hierarchy_last(rb_last(browser->entries));
1941 h = rb_entry(browser->top, struct hist_entry, rb_node);
1972 browser->top = nd;
1981 browser->top = nd;
1994 browser->top = nd;
2004 browser->top = nd;
2015 browser->top = nd;
2030 browser->top = nd;
2036 static int hist_browser__fprintf_callchain(struct hist_browser *browser,
2044 hist_browser__show_callchain(browser, he, level, 0,
2050 static int hist_browser__fprintf_entry(struct hist_browser *browser,
2069 hists__for_each_format(browser->hists, fmt) {
2086 printed += hist_browser__fprintf_callchain(browser, he, fp, 1);
2092 static int hist_browser__fprintf_hierarchy_entry(struct hist_browser *browser,
2143 printed += hist_browser__fprintf_callchain(browser, he, fp,
2150 static int hist_browser__fprintf(struct hist_browser *browser, FILE *fp)
2152 struct rb_node *nd = hists__filter_entries(rb_first(browser->b.entries),
2153 browser->min_pcnt);
2160 printed += hist_browser__fprintf_hierarchy_entry(browser,
2164 printed += hist_browser__fprintf_entry(browser, h, fp);
2168 browser->min_pcnt);
2174 static int hist_browser__dump(struct hist_browser *browser)
2180 scnprintf(filename, sizeof(filename), "perf.hist.%d", browser->print_seq);
2186 if (++browser->print_seq == 8192) {
2200 ++browser->print_seq;
2201 hist_browser__fprintf(browser, fp);
2208 void hist_browser__init(struct hist_browser *browser,
2213 browser->hists = hists;
2214 browser->b.refresh = hist_browser__refresh;
2215 browser->b.refresh_dimensions = hist_browser__refresh_dimensions;
2216 browser->b.seek = ui_browser__hists_seek;
2217 browser->b.use_navkeypressed = true;
2218 browser->show_headers = symbol_conf.show_hist_headers;
2219 hist_browser__set_title_space(browser);
2228 ++browser->b.columns;
2231 ++browser->b.columns;
2234 ++browser->b.columns;
2242 struct hist_browser *browser = zalloc(sizeof(*browser));
2244 if (browser)
2245 hist_browser__init(browser, hists);
2247 return browser;
2256 struct hist_browser *browser = hist_browser__new(evsel__hists(evsel));
2258 if (browser) {
2259 browser->hbt = hbt;
2260 browser->env = env;
2261 browser->title = hists_browser__scnprintf_title;
2262 browser->annotation_opts = annotation_opts;
2264 return browser;
2267 void hist_browser__delete(struct hist_browser *browser)
2269 free(browser);
2272 static struct hist_entry *hist_browser__selected_entry(struct hist_browser *browser)
2274 return browser->he_selection;
2277 static struct thread *hist_browser__selected_thread(struct hist_browser *browser)
2279 return browser->he_selection->thread;
2282 static struct res_sample *hist_browser__selected_res_sample(struct hist_browser *browser)
2284 return browser->he_selection ? browser->he_selection->res_samples : NULL;
2287 /* Check whether the browser is for 'top' or 'report' */
2293 static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf, size_t size)
2295 struct hist_browser_timer *hbt = browser->hbt;
2296 int printed = __hists__scnprintf_title(browser->hists, bf, size, !is_report_browser(hbt));
2424 int (*fn)(struct hist_browser *browser, struct popup_action *act);
2428 do_annotate(struct hist_browser *browser, struct popup_action *act)
2435 if (!browser->annotation_opts->objdump_path &&
2436 perf_env__lookup_objdump(browser->env, &browser->annotation_opts->objdump_path))
2443 if (browser->block_evsel)
2444 evsel = browser->block_evsel;
2446 evsel = hists_to_evsel(browser->hists);
2448 err = map_symbol__tui_annotate(&act->ms, evsel, browser->hbt,
2449 browser->annotation_opts);
2450 he = hist_browser__selected_entry(browser);
2458 ui_browser__update_nr_entries(&browser->b, browser->hists->nr_entries);
2460 ui_browser__handle_resize(&browser->b);
2487 add_annotate_opt(struct hist_browser *browser __maybe_unused,
2512 do_zoom_thread(struct hist_browser *browser, struct popup_action *act)
2516 if ((!hists__has(browser->hists, thread) &&
2517 !hists__has(browser->hists, comm)) || thread == NULL)
2520 if (browser->hists->thread_filter) {
2521 pstack__remove(browser->pstack, &browser->hists->thread_filter);
2523 thread__zput(browser->hists->thread_filter);
2529 if (hists__has(browser->hists, thread)) {
2537 browser->hists->thread_filter = thread__get(thread);
2539 pstack__push(browser->pstack, &browser->hists->thread_filter);
2542 hists__filter_by_thread(browser->hists);
2543 hist_browser__reset(browser);
2548 add_thread_opt(struct hist_browser *browser, struct popup_action *act,
2554 if ((!hists__has(browser->hists, thread) &&
2555 !hists__has(browser->hists, comm)) || thread == NULL)
2558 in_out = browser->hists->thread_filter ? "out of" : "into";
2560 if (hists__has(browser->hists, thread)) {
2574 static int hists_browser__zoom_map(struct hist_browser *browser, struct map *map)
2576 if (!hists__has(browser->hists, dso) || map == NULL)
2579 if (browser->hists->dso_filter) {
2580 pstack__remove(browser->pstack, &browser->hists->dso_filter);
2582 browser->hists->dso_filter = NULL;
2588 browser->hists->dso_filter = dso;
2590 pstack__push(browser->pstack, &browser->hists->dso_filter);
2593 hists__filter_by_dso(browser->hists);
2594 hist_browser__reset(browser);
2599 do_zoom_dso(struct hist_browser *browser, struct popup_action *act)
2601 return hists_browser__zoom_map(browser, act->ms.map);
2605 add_dso_opt(struct hist_browser *browser, struct popup_action *act,
2608 if (!hists__has(browser->hists, dso) || map == NULL)
2612 browser->hists->dso_filter ? "out of" : "into",
2621 static int do_toggle_callchain(struct hist_browser *browser, struct popup_action *act __maybe_unused)
2623 hist_browser__toggle_fold(browser);
2627 static int add_callchain_toggle_opt(struct hist_browser *browser, struct popup_action *act, char **optstr)
2631 if (!hist_browser__selection_has_children(browser))
2635 hist_browser__selection_unfolded(browser) ? "Collapse" : "Expand",
2636 hist_browser__selection_sym_name(browser, sym_name, sizeof(sym_name))) < 0)
2644 do_browse_map(struct hist_browser *browser __maybe_unused,
2652 add_map_opt(struct hist_browser *browser,
2655 if (!hists__has(browser->hists, dso) || map == NULL)
2667 do_run_script(struct hist_browser *browser __maybe_unused,
2712 do_res_sample_script(struct hist_browser *browser __maybe_unused,
2717 he = hist_browser__selected_entry(browser);
2723 add_script_opt_2(struct hist_browser *browser __maybe_unused,
2750 add_script_opt(struct hist_browser *browser,
2758 n = add_script_opt_2(browser, act, optstr, thread, sym, evsel, "");
2760 he = hist_browser__selected_entry(browser);
2772 n += add_script_opt_2(browser, act, optstr, thread, sym,
2780 add_res_sample_opt(struct hist_browser *browser __maybe_unused,
2801 do_switch_data(struct hist_browser *browser __maybe_unused,
2814 add_switch_opt(struct hist_browser *browser,
2817 if (!is_report_browser(browser->hbt))
2828 do_exit_browser(struct hist_browser *browser __maybe_unused,
2835 add_exit_opt(struct hist_browser *browser __maybe_unused,
2846 do_zoom_socket(struct hist_browser *browser, struct popup_action *act)
2848 if (!hists__has(browser->hists, socket) || act->socket < 0)
2851 if (browser->hists->socket_filter > -1) {
2852 pstack__remove(browser->pstack, &browser->hists->socket_filter);
2853 browser->hists->socket_filter = -1;
2856 browser->hists->socket_filter = act->socket;
2858 pstack__push(browser->pstack, &browser->hists->socket_filter);
2861 hists__filter_by_socket(browser->hists);
2862 hist_browser__reset(browser);
2867 add_socket_opt(struct hist_browser *browser, struct popup_action *act,
2870 if (!hists__has(browser->hists, socket) || socket_id < 0)
2874 (browser->hists->socket_filter > -1) ? "out of" : "into",
2950 struct hist_browser *browser = perf_evsel_browser__new(evsel, hbt, env, annotation_opts);
2964 "q/ESC/CTRL+C Exit browser or go back to previous screen\n\n" \
3001 if (browser == NULL)
3009 browser->min_pcnt = min_pcnt;
3010 hist_browser__update_nr_entries(browser);
3012 browser->pstack = pstack__new(3);
3013 if (browser->pstack == NULL)
3025 browser->b.no_samples_msg = "Collecting samples...";
3036 key = hist_browser__run(browser, helpline, warn_lost_event, key);
3038 if (browser->he_selection != NULL) {
3039 thread = hist_browser__selected_thread(browser);
3040 map = browser->selection->map;
3041 socked_id = browser->he_selection->socket;
3049 * Exit the browser, let hists__browser_tree
3080 ui_browser__warning(&browser->b, delay_secs * 2,
3086 if (!browser->selection ||
3087 !browser->selection->map ||
3088 !map__dso(browser->selection->map) ||
3089 map__dso(browser->selection->map)->annotate_warned) {
3093 if (!browser->selection->sym) {
3094 if (!browser->he_selection)
3098 bi = browser->he_selection->branch_info;
3105 actions->ms.sym = symbol__new_unresolved(browser->he_selection->ip,
3106 browser->selection->map);
3107 actions->ms.map = browser->selection->map;
3113 if (symbol__annotation(browser->selection->sym)->src == NULL) {
3114 ui_browser__warning(&browser->b, delay_secs * 2,
3117 browser->selection->sym->name);
3121 actions->ms.map = browser->selection->map;
3122 actions->ms.sym = browser->selection->sym;
3125 do_annotate(browser, actions);
3128 hist_browser__dump(browser);
3132 do_zoom_dso(browser, actions);
3135 if (browser->selection != NULL)
3136 hists_browser__zoom_map(browser,
3137 maps__machine(browser->selection->maps)->vmlinux_map);
3141 browser->show_dso = verbose > 0;
3147 do_zoom_thread(browser, actions);
3151 do_zoom_socket(browser, actions);
3161 hist_browser__reset(browser);
3168 do_run_script(browser, actions);
3173 key = do_switch_data(browser, actions);
3202 ui_browser__warning(&browser->b, delay_secs * 2,
3207 hist_browser__update_percent_limit(browser, new_percent);
3208 hist_browser__reset(browser);
3214 ui_browser__help_window(&browser->b,
3226 if (pstack__empty(browser->pstack)) {
3234 ui_browser__dialog_yesno(&browser->b,
3241 top = pstack__peek(browser->pstack);
3242 if (top == &browser->hists->dso_filter) {
3248 do_zoom_dso(browser, actions);
3249 } else if (top == &browser->hists->thread_filter) {
3250 do_zoom_thread(browser, actions);
3251 } else if (top == &browser->hists->socket_filter) {
3252 do_zoom_socket(browser, actions);
3283 if (!hists__has(hists, sym) || browser->selection == NULL)
3288 if (browser->he_selection)
3289 bi = browser->he_selection->branch_info;
3294 nr_options += add_annotate_opt(browser,
3300 nr_options += add_annotate_opt(browser,
3306 nr_options += add_annotate_opt(browser,
3309 browser->selection,
3310 browser->he_selection->ip);
3313 nr_options += add_thread_opt(browser, &actions[nr_options],
3315 nr_options += add_dso_opt(browser, &actions[nr_options],
3317 nr_options += add_callchain_toggle_opt(browser, &actions[nr_options], &options[nr_options]);
3318 nr_options += add_map_opt(browser, &actions[nr_options],
3320 browser->selection ?
3321 browser->selection->map : NULL);
3322 nr_options += add_socket_opt(browser, &actions[nr_options],
3329 if (browser->he_selection) {
3331 nr_options += add_script_opt(browser,
3337 * Note that browser->selection != NULL
3338 * when browser->he_selection is not NULL,
3339 * so we don't need to check browser->selection
3340 * before fetching browser->selection->sym like what
3341 * we do before fetching browser->selection->map.
3345 if (hists__has(hists, sym) && browser->selection->sym) {
3346 nr_options += add_script_opt(browser,
3349 NULL, browser->selection->sym,
3353 nr_options += add_script_opt(browser, &actions[nr_options],
3355 nr_options += add_res_sample_opt(browser, &actions[nr_options],
3357 hist_browser__selected_res_sample(browser),
3359 nr_options += add_res_sample_opt(browser, &actions[nr_options],
3361 hist_browser__selected_res_sample(browser),
3363 nr_options += add_res_sample_opt(browser, &actions[nr_options],
3365 hist_browser__selected_res_sample(browser),
3367 nr_options += add_switch_opt(browser, &actions[nr_options],
3370 nr_options += add_exit_opt(browser, &actions[nr_options],
3384 key = act->fn(browser, act);
3391 pstack__delete(browser->pstack);
3393 hist_browser__delete(browser);
3407 static void perf_evsel_menu__write(struct ui_browser *browser,
3410 struct evsel_menu *menu = container_of(browser,
3414 bool current_entry = ui_browser__is_current_entry(browser, row);
3421 ui_browser__set_color(browser, current_entry ? HE_COLORSET_SELECTED :
3438 ui_browser__printf(browser, "%s", bf);
3444 ui_browser__set_color(browser, HE_COLORSET_TOP);
3451 ui_browser__write_nstring(browser, warn, browser->width - printed);
3547 static bool filter_group_entries(struct ui_browser *browser __maybe_unused,
3641 static int block_hists_browser__title(struct hist_browser *browser, char *bf,
3644 struct hists *hists = evsel__hists(browser->block_evsel);
3645 const char *evname = evsel__name(browser->block_evsel);
3661 struct hist_browser *browser;
3667 browser = hist_browser__new(hists);
3668 if (!browser)
3671 browser->block_evsel = evsel;
3672 browser->title = block_hists_browser__title;
3673 browser->min_pcnt = min_percent;
3674 browser->env = env;
3675 browser->annotation_opts = annotation_opts;
3684 key = hist_browser__run(browser, "? - help", true, 0);
3690 ui_browser__help_window(&browser->b, help);
3694 if (!browser->selection ||
3695 !browser->selection->sym) {
3699 action.ms.map = browser->selection->map;
3700 action.ms.sym = browser->selection->sym;
3701 do_annotate(browser, &action);
3709 hist_browser__delete(browser);