Lines Matching refs:browser

47 static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf, size_t size);
58 static int hist_browser__get_folding(struct hist_browser *browser) in hist_browser__get_folding() argument
61 struct hists *hists = browser->hists; in hist_browser__get_folding()
65 (nd = hists__filter_entries(nd, browser->min_pcnt)) != NULL; in hist_browser__get_folding()
78 struct ui_browser *browser = &hb->b; in hist_browser__set_title_space() local
82 browser->extra_title_lines = hb->show_headers ? hpp_list->nr_header_lines : 0; in hist_browser__set_title_space()
102 struct ui_browser *browser = &hb->b; in hist_browser__update_rows() local
108 browser->rows += browser->extra_title_lines; in hist_browser__update_rows()
109 browser->extra_title_lines = 0; in hist_browser__update_rows()
113 browser->extra_title_lines = hpp_list->nr_header_lines; in hist_browser__update_rows()
114 browser->rows -= browser->extra_title_lines; in hist_browser__update_rows()
119 index_row = browser->index - browser->top_idx; in hist_browser__update_rows()
120 if (index_row >= browser->rows) in hist_browser__update_rows()
121 browser->index -= index_row - browser->rows + 1; in hist_browser__update_rows()
124 static void hist_browser__refresh_dimensions(struct ui_browser *browser) in hist_browser__refresh_dimensions() argument
126 struct hist_browser *hb = container_of(browser, struct hist_browser, b); in hist_browser__refresh_dimensions()
129 browser->width = 3 + (hists__sort_list_width(hb->hists) + sizeof("[k]")); in hist_browser__refresh_dimensions()
136 ui_browser__refresh_dimensions(browser); in hist_browser__refresh_dimensions()
139 static void hist_browser__reset(struct hist_browser *browser) in hist_browser__reset() argument
145 browser->nr_callchain_rows = 0; in hist_browser__reset()
147 hist_browser__update_nr_entries(browser); in hist_browser__reset()
148 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__reset()
149 hist_browser__refresh_dimensions(&browser->b); in hist_browser__reset()
150 ui_browser__reset_index(&browser->b); in hist_browser__reset()
393 static bool hist_browser__toggle_fold(struct hist_browser *browser) in hist_browser__toggle_fold() argument
395 struct hist_entry *he = browser->he_selection; in hist_browser__toggle_fold()
396 struct map_symbol *ms = browser->selection; in hist_browser__toggle_fold()
412 browser->b.nr_entries -= he->nr_rows; in hist_browser__toggle_fold()
415 browser->nr_callchain_rows -= he->nr_rows; in hist_browser__toggle_fold()
417 browser->nr_hierarchy_entries -= he->nr_rows; in hist_browser__toggle_fold()
420 child_rows = hierarchy_count_rows(browser, he, true); in hist_browser__toggle_fold()
427 he->nr_rows = hierarchy_count_rows(browser, he, false); in hist_browser__toggle_fold()
431 browser->b.nr_entries += child_rows - he->nr_rows; in hist_browser__toggle_fold()
439 browser->b.nr_entries -= child_rows - he->nr_rows; in hist_browser__toggle_fold()
447 browser->b.nr_entries += he->nr_rows; in hist_browser__toggle_fold()
450 browser->nr_callchain_rows += he->nr_rows; in hist_browser__toggle_fold()
452 browser->nr_hierarchy_entries += he->nr_rows; in hist_browser__toggle_fold()
553 struct hist_browser *browser, bool unfold) in hist_entry__set_folding() argument
558 if (he->filtered || percent < browser->min_pcnt) in hist_entry__set_folding()
561 __hist_entry__set_folding(he, browser, unfold); in hist_entry__set_folding()
564 browser->nr_hierarchy_entries++; in hist_entry__set_folding()
566 browser->nr_callchain_rows += he->nr_rows; in hist_entry__set_folding()
567 else if (unfold && !hist_entry__has_hierarchy_children(he, browser->min_pcnt)) { in hist_entry__set_folding()
568 browser->nr_hierarchy_entries++; in hist_entry__set_folding()
576 __hist_browser__set_folding(struct hist_browser *browser, bool unfold) in __hist_browser__set_folding() argument
581 nd = rb_first_cached(&browser->hists->entries); in __hist_browser__set_folding()
588 hist_entry__set_folding(he, browser, unfold); in __hist_browser__set_folding()
592 static void hist_browser__set_folding(struct hist_browser *browser, bool unfold) in hist_browser__set_folding() argument
594 browser->nr_hierarchy_entries = 0; in hist_browser__set_folding()
595 browser->nr_callchain_rows = 0; in hist_browser__set_folding()
596 __hist_browser__set_folding(browser, unfold); in hist_browser__set_folding()
598 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__set_folding()
600 ui_browser__reset_index(&browser->b); in hist_browser__set_folding()
603 static void hist_browser__set_folding_selected(struct hist_browser *browser, bool unfold) in hist_browser__set_folding_selected() argument
605 if (!browser->he_selection) in hist_browser__set_folding_selected()
608 hist_entry__set_folding(browser->he_selection, browser, unfold); in hist_browser__set_folding_selected()
609 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__set_folding_selected()
612 static void ui_browser__warn_lost_events(struct ui_browser *browser) in ui_browser__warn_lost_events() argument
614 ui_browser__warning(browser, 4, in ui_browser__warn_lost_events()
621 static int hist_browser__title(struct hist_browser *browser, char *bf, size_t size) in hist_browser__title() argument
623 return browser->title ? browser->title(browser, bf, size) : 0; in hist_browser__title()
626 int hist_browser__run(struct hist_browser *browser, const char *help, in hist_browser__run() argument
631 struct hist_browser_timer *hbt = browser->hbt; in hist_browser__run()
634 browser->b.entries = &browser->hists->entries; in hist_browser__run()
635 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__run()
637 hist_browser__title(browser, title, sizeof(title)); in hist_browser__run()
639 if (ui_browser__show(&browser->b, title, "%s", help) < 0) in hist_browser__run()
643 key = ui_browser__run(&browser->b, delay_secs); in hist_browser__run()
654 if (hist_browser__has_filter(browser) || in hist_browser__run()
656 hist_browser__update_nr_entries(browser); in hist_browser__run()
658 nr_entries = hist_browser__nr_entries(browser); in hist_browser__run()
659 ui_browser__update_nr_entries(&browser->b, nr_entries); in hist_browser__run()
662 (browser->hists->stats.nr_lost_warned != in hist_browser__run()
663 browser->hists->stats.nr_events[PERF_RECORD_LOST])) { in hist_browser__run()
664 browser->hists->stats.nr_lost_warned = in hist_browser__run()
665 browser->hists->stats.nr_events[PERF_RECORD_LOST]; in hist_browser__run()
666 ui_browser__warn_lost_events(&browser->b); in hist_browser__run()
669 hist_browser__title(browser, title, sizeof(title)); in hist_browser__run()
670 ui_browser__show_title(&browser->b, title); in hist_browser__run()
675 struct hist_entry *h = rb_entry(browser->b.top, in hist_browser__run()
679 seq++, browser->b.nr_entries, in hist_browser__run()
680 browser->hists->nr_entries, in hist_browser__run()
681 browser->b.extra_title_lines, in hist_browser__run()
682 browser->b.rows, in hist_browser__run()
683 browser->b.index, in hist_browser__run()
684 browser->b.top_idx, in hist_browser__run()
690 hist_browser__set_folding(browser, false); in hist_browser__run()
694 hist_browser__set_folding_selected(browser, false); in hist_browser__run()
698 hist_browser__set_folding(browser, true); in hist_browser__run()
702 hist_browser__set_folding_selected(browser, true); in hist_browser__run()
705 browser->show_headers = !browser->show_headers; in hist_browser__run()
706 hist_browser__update_rows(browser); in hist_browser__run()
709 if (hist_browser__toggle_fold(browser)) in hist_browser__run()
717 ui_browser__hide(&browser->b); in hist_browser__run()
731 typedef void (*print_callchain_entry_fn)(struct hist_browser *browser,
737 static void hist_browser__show_callchain_entry(struct hist_browser *browser, in hist_browser__show_callchain_entry() argument
745 bool show_annotated = browser->show_dso && chain->ms.sym && symbol__annotation(chain->ms.sym)->src; in hist_browser__show_callchain_entry()
748 width = browser->b.width - (offset + 2); in hist_browser__show_callchain_entry()
749 if (ui_browser__is_current_entry(&browser->b, row)) { in hist_browser__show_callchain_entry()
750 browser->selection = &chain->ms; in hist_browser__show_callchain_entry()
755 ui_browser__set_color(&browser->b, color); in hist_browser__show_callchain_entry()
756 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_callchain_entry()
757 ui_browser__write_nstring(&browser->b, " ", offset); in hist_browser__show_callchain_entry()
758 ui_browser__printf(&browser->b, "%c", folded_sign); in hist_browser__show_callchain_entry()
759 ui_browser__write_graph(&browser->b, show_annotated ? SLSMG_RARROW_CHAR : ' '); in hist_browser__show_callchain_entry()
760 ui_browser__write_nstring(&browser->b, str, width); in hist_browser__show_callchain_entry()
775 typedef bool (*check_output_full_fn)(struct hist_browser *browser,
778 static bool hist_browser__check_output_full(struct hist_browser *browser, in hist_browser__check_output_full() argument
781 return browser->b.rows == row; in hist_browser__check_output_full()
784 static bool hist_browser__check_dump_full(struct hist_browser *browser __maybe_unused, in hist_browser__check_dump_full()
792 static int hist_browser__show_callchain_list(struct hist_browser *browser, in hist_browser__show_callchain_list() argument
814 browser->show_dso); in hist_browser__show_callchain_list()
836 print(browser, chain, str, offset, row, arg); in hist_browser__show_callchain_list()
857 static int hist_browser__show_callchain_flat(struct hist_browser *browser, in hist_browser__show_callchain_flat() argument
890 row += hist_browser__show_callchain_list(browser, child, in hist_browser__show_callchain_flat()
896 if (is_output_full(browser, row)) in hist_browser__show_callchain_flat()
913 row += hist_browser__show_callchain_list(browser, child, in hist_browser__show_callchain_flat()
919 if (is_output_full(browser, row)) in hist_browser__show_callchain_flat()
927 if (is_output_full(browser, row)) in hist_browser__show_callchain_flat()
935 static char *hist_browser__folded_callchain_str(struct hist_browser *browser, in hist_browser__folded_callchain_str() argument
944 browser->show_dso); in hist_browser__folded_callchain_str()
961 static int hist_browser__show_callchain_folded(struct hist_browser *browser, in hist_browser__show_callchain_folded() argument
1001 chain_str = hist_browser__folded_callchain_str(browser, in hist_browser__show_callchain_folded()
1017 chain_str = hist_browser__folded_callchain_str(browser, in hist_browser__show_callchain_folded()
1033 print(browser, first_chain, chain_str, offset, row++, arg); in hist_browser__show_callchain_folded()
1038 if (is_output_full(browser, row)) in hist_browser__show_callchain_folded()
1046 static int hist_browser__show_callchain_graph(struct hist_browser *browser, in hist_browser__show_callchain_graph() argument
1083 row += hist_browser__show_callchain_list(browser, child, in hist_browser__show_callchain_graph()
1089 if (is_output_full(browser, row)) in hist_browser__show_callchain_graph()
1099 row += hist_browser__show_callchain_graph(browser, &child->rb_root, in hist_browser__show_callchain_graph()
1104 if (is_output_full(browser, row)) in hist_browser__show_callchain_graph()
1112 static int hist_browser__show_callchain(struct hist_browser *browser, in hist_browser__show_callchain() argument
1129 printed = hist_browser__show_callchain_flat(browser, in hist_browser__show_callchain()
1134 printed = hist_browser__show_callchain_folded(browser, in hist_browser__show_callchain()
1139 printed = hist_browser__show_callchain_graph(browser, in hist_browser__show_callchain()
1146 browser->he_selection = entry; in hist_browser__show_callchain()
1244 static int hist_browser__show_entry(struct hist_browser *browser, in hist_browser__show_entry() argument
1249 int width = browser->b.width; in hist_browser__show_entry()
1251 bool current_entry = ui_browser__is_current_entry(&browser->b, row); in hist_browser__show_entry()
1258 browser->he_selection = entry; in hist_browser__show_entry()
1259 browser->selection = &entry->ms; in hist_browser__show_entry()
1269 .b = &browser->b, in hist_browser__show_entry()
1275 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_entry()
1277 hists__for_each_format(browser->hists, fmt) { in hist_browser__show_entry()
1286 column++ < browser->b.horiz_scroll) in hist_browser__show_entry()
1289 if (current_entry && browser->b.navkeypressed) { in hist_browser__show_entry()
1290 ui_browser__set_color(&browser->b, in hist_browser__show_entry()
1293 ui_browser__set_color(&browser->b, in hist_browser__show_entry()
1299 ui_browser__printf(&browser->b, "%c ", folded_sign); in hist_browser__show_entry()
1304 ui_browser__printf(&browser->b, " "); in hist_browser__show_entry()
1315 ui_browser__printf(&browser->b, "%s", s + ret); in hist_browser__show_entry()
1318 ui_browser__printf(&browser->b, "%s", s); in hist_browser__show_entry()
1324 if (!browser->b.navkeypressed) in hist_browser__show_entry()
1327 ui_browser__write_nstring(&browser->b, "", width); in hist_browser__show_entry()
1334 if (folded_sign == '-' && row != browser->b.rows) { in hist_browser__show_entry()
1340 printed += hist_browser__show_callchain(browser, in hist_browser__show_entry()
1350 static int hist_browser__show_hierarchy_entry(struct hist_browser *browser, in hist_browser__show_hierarchy_entry() argument
1356 int width = browser->b.width; in hist_browser__show_hierarchy_entry()
1358 bool current_entry = ui_browser__is_current_entry(&browser->b, row); in hist_browser__show_hierarchy_entry()
1364 .b = &browser->b, in hist_browser__show_hierarchy_entry()
1371 browser->he_selection = entry; in hist_browser__show_hierarchy_entry()
1372 browser->selection = &entry->ms; in hist_browser__show_hierarchy_entry()
1384 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_hierarchy_entry()
1386 if (current_entry && browser->b.navkeypressed) in hist_browser__show_hierarchy_entry()
1387 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED); in hist_browser__show_hierarchy_entry()
1389 ui_browser__set_color(&browser->b, HE_COLORSET_NORMAL); in hist_browser__show_hierarchy_entry()
1391 ui_browser__write_nstring(&browser->b, "", level * HIERARCHY_INDENT); in hist_browser__show_hierarchy_entry()
1406 column++ < browser->b.horiz_scroll) in hist_browser__show_hierarchy_entry()
1409 if (current_entry && browser->b.navkeypressed) { in hist_browser__show_hierarchy_entry()
1410 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1413 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1418 ui_browser__printf(&browser->b, "%c ", folded_sign); in hist_browser__show_hierarchy_entry()
1422 ui_browser__printf(&browser->b, " "); in hist_browser__show_hierarchy_entry()
1433 ui_browser__printf(&browser->b, "%s", s + ret); in hist_browser__show_hierarchy_entry()
1437 ui_browser__printf(&browser->b, "%s", s); in hist_browser__show_hierarchy_entry()
1443 ui_browser__write_nstring(&browser->b, "", hierarchy_indent); in hist_browser__show_hierarchy_entry()
1447 if (column >= browser->b.horiz_scroll) { in hist_browser__show_hierarchy_entry()
1455 if (current_entry && browser->b.navkeypressed) { in hist_browser__show_hierarchy_entry()
1456 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1459 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1465 ui_browser__printf(&browser->b, "%c ", folded_sign); in hist_browser__show_hierarchy_entry()
1468 ui_browser__write_nstring(&browser->b, "", 2); in hist_browser__show_hierarchy_entry()
1484 ui_browser__printf(&browser->b, "%s", skip_spaces(s)); in hist_browser__show_hierarchy_entry()
1493 if (!browser->b.navkeypressed) in hist_browser__show_hierarchy_entry()
1496 ui_browser__write_nstring(&browser->b, "", width); in hist_browser__show_hierarchy_entry()
1502 if (entry->leaf && folded_sign == '-' && row != browser->b.rows) { in hist_browser__show_hierarchy_entry()
1507 printed += hist_browser__show_callchain(browser, entry, in hist_browser__show_hierarchy_entry()
1516 static int hist_browser__show_no_entry(struct hist_browser *browser, in hist_browser__show_no_entry() argument
1519 int width = browser->b.width; in hist_browser__show_no_entry()
1520 bool current_entry = ui_browser__is_current_entry(&browser->b, row); in hist_browser__show_no_entry()
1526 int indent = browser->hists->nr_hpp_node - 2; in hist_browser__show_no_entry()
1529 browser->he_selection = NULL; in hist_browser__show_no_entry()
1530 browser->selection = NULL; in hist_browser__show_no_entry()
1533 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_no_entry()
1535 if (current_entry && browser->b.navkeypressed) in hist_browser__show_no_entry()
1536 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED); in hist_browser__show_no_entry()
1538 ui_browser__set_color(&browser->b, HE_COLORSET_NORMAL); in hist_browser__show_no_entry()
1540 ui_browser__write_nstring(&browser->b, "", level * HIERARCHY_INDENT); in hist_browser__show_no_entry()
1544 fmt_node = list_first_entry(&browser->hists->hpp_formats, in hist_browser__show_no_entry()
1547 if (perf_hpp__should_skip(fmt, browser->hists) || in hist_browser__show_no_entry()
1548 column++ < browser->b.horiz_scroll) in hist_browser__show_no_entry()
1551 ret = fmt->width(fmt, NULL, browser->hists); in hist_browser__show_no_entry()
1562 ui_browser__write_nstring(&browser->b, "", ret); in hist_browser__show_no_entry()
1566 ui_browser__write_nstring(&browser->b, "", indent * HIERARCHY_INDENT); in hist_browser__show_no_entry()
1569 if (column >= browser->b.horiz_scroll) { in hist_browser__show_no_entry()
1572 ret = snprintf(buf, sizeof(buf), "no entry >= %.2f%%", browser->min_pcnt); in hist_browser__show_no_entry()
1573 ui_browser__printf(&browser->b, " %s", buf); in hist_browser__show_no_entry()
1578 if (!browser->b.navkeypressed) in hist_browser__show_no_entry()
1581 ui_browser__write_nstring(&browser->b, "", width); in hist_browser__show_no_entry()
1592 hists_browser__scnprintf_headers(struct hist_browser *browser, char *buf, in hists_browser__scnprintf_headers() argument
1595 struct hists *hists = browser->hists; in hists_browser__scnprintf_headers()
1611 hists__for_each_format(browser->hists, fmt) { in hists_browser__scnprintf_headers()
1612 if (perf_hpp__should_skip(fmt, hists) || column++ < browser->b.horiz_scroll) in hists_browser__scnprintf_headers()
1630 static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *browser, char *buf, size… in hists_browser__scnprintf_hierarchy_headers() argument
1632 struct hists *hists = browser->hists; in hists_browser__scnprintf_hierarchy_headers()
1653 if (column++ < browser->b.horiz_scroll) in hists_browser__scnprintf_hierarchy_headers()
1714 static void hists_browser__hierarchy_headers(struct hist_browser *browser) in hists_browser__hierarchy_headers() argument
1718 hists_browser__scnprintf_hierarchy_headers(browser, headers, in hists_browser__hierarchy_headers()
1721 ui_browser__gotorc(&browser->b, 0, 0); in hists_browser__hierarchy_headers()
1722 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT); in hists_browser__hierarchy_headers()
1723 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1); in hists_browser__hierarchy_headers()
1726 static void hists_browser__headers(struct hist_browser *browser) in hists_browser__headers() argument
1728 struct hists *hists = browser->hists; in hists_browser__headers()
1736 hists_browser__scnprintf_headers(browser, headers, in hists_browser__headers()
1739 ui_browser__gotorc_title(&browser->b, line, 0); in hists_browser__headers()
1740 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT); in hists_browser__headers()
1741 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1); in hists_browser__headers()
1745 static void hist_browser__show_headers(struct hist_browser *browser) in hist_browser__show_headers() argument
1748 hists_browser__hierarchy_headers(browser); in hist_browser__show_headers()
1750 hists_browser__headers(browser); in hist_browser__show_headers()
1753 static void ui_browser__hists_init_top(struct ui_browser *browser) in ui_browser__hists_init_top() argument
1755 if (browser->top == NULL) { in ui_browser__hists_init_top()
1758 hb = container_of(browser, struct hist_browser, b); in ui_browser__hists_init_top()
1759 browser->top = rb_first_cached(&hb->hists->entries); in ui_browser__hists_init_top()
1763 static unsigned int hist_browser__refresh(struct ui_browser *browser) in hist_browser__refresh() argument
1767 struct hist_browser *hb = container_of(browser, struct hist_browser, b); in hist_browser__refresh()
1772 ui_browser__hists_init_top(browser); in hist_browser__refresh()
1776 for (nd = browser->top; nd; nd = rb_hierarchy_next(nd)) { in hist_browser__refresh()
1793 if (row == browser->rows) in hist_browser__refresh()
1804 if (row == browser->rows) in hist_browser__refresh()
1850 static void ui_browser__hists_seek(struct ui_browser *browser, in ui_browser__hists_seek() argument
1858 hb = container_of(browser, struct hist_browser, b); in ui_browser__hists_seek()
1860 if (browser->nr_entries == 0) in ui_browser__hists_seek()
1863 ui_browser__hists_init_top(browser); in ui_browser__hists_seek()
1867 nd = hists__filter_entries(rb_first(browser->entries), in ui_browser__hists_seek()
1871 nd = browser->top; in ui_browser__hists_seek()
1874 nd = rb_hierarchy_last(rb_last(browser->entries)); in ui_browser__hists_seek()
1886 h = rb_entry(browser->top, struct hist_entry, rb_node); in ui_browser__hists_seek()
1917 browser->top = nd; in ui_browser__hists_seek()
1926 browser->top = nd; in ui_browser__hists_seek()
1939 browser->top = nd; in ui_browser__hists_seek()
1949 browser->top = nd; in ui_browser__hists_seek()
1960 browser->top = nd; in ui_browser__hists_seek()
1975 browser->top = nd; in ui_browser__hists_seek()
1981 static int hist_browser__fprintf_callchain(struct hist_browser *browser, in hist_browser__fprintf_callchain() argument
1989 hist_browser__show_callchain(browser, he, level, 0, in hist_browser__fprintf_callchain()
1995 static int hist_browser__fprintf_entry(struct hist_browser *browser, in hist_browser__fprintf_entry() argument
2014 hists__for_each_format(browser->hists, fmt) { in hist_browser__fprintf_entry()
2031 printed += hist_browser__fprintf_callchain(browser, he, fp, 1); in hist_browser__fprintf_entry()
2037 static int hist_browser__fprintf_hierarchy_entry(struct hist_browser *browser, in hist_browser__fprintf_hierarchy_entry() argument
2088 printed += hist_browser__fprintf_callchain(browser, he, fp, in hist_browser__fprintf_hierarchy_entry()
2095 static int hist_browser__fprintf(struct hist_browser *browser, FILE *fp) in hist_browser__fprintf() argument
2097 struct rb_node *nd = hists__filter_entries(rb_first(browser->b.entries), in hist_browser__fprintf()
2098 browser->min_pcnt); in hist_browser__fprintf()
2105 printed += hist_browser__fprintf_hierarchy_entry(browser, in hist_browser__fprintf()
2109 printed += hist_browser__fprintf_entry(browser, h, fp); in hist_browser__fprintf()
2113 browser->min_pcnt); in hist_browser__fprintf()
2119 static int hist_browser__dump(struct hist_browser *browser) in hist_browser__dump() argument
2125 scnprintf(filename, sizeof(filename), "perf.hist.%d", browser->print_seq); in hist_browser__dump()
2131 if (++browser->print_seq == 8192) { in hist_browser__dump()
2145 ++browser->print_seq; in hist_browser__dump()
2146 hist_browser__fprintf(browser, fp); in hist_browser__dump()
2153 void hist_browser__init(struct hist_browser *browser, in hist_browser__init() argument
2158 browser->hists = hists; in hist_browser__init()
2159 browser->b.refresh = hist_browser__refresh; in hist_browser__init()
2160 browser->b.refresh_dimensions = hist_browser__refresh_dimensions; in hist_browser__init()
2161 browser->b.seek = ui_browser__hists_seek; in hist_browser__init()
2162 browser->b.use_navkeypressed = true; in hist_browser__init()
2163 browser->show_headers = symbol_conf.show_hist_headers; in hist_browser__init()
2164 hist_browser__set_title_space(browser); in hist_browser__init()
2173 ++browser->b.columns; in hist_browser__init()
2176 ++browser->b.columns; in hist_browser__init()
2179 ++browser->b.columns; in hist_browser__init()
2187 struct hist_browser *browser = zalloc(sizeof(*browser)); in hist_browser__new() local
2189 if (browser) in hist_browser__new()
2190 hist_browser__init(browser, hists); in hist_browser__new()
2192 return browser; in hist_browser__new()
2201 struct hist_browser *browser = hist_browser__new(evsel__hists(evsel)); in perf_evsel_browser__new() local
2203 if (browser) { in perf_evsel_browser__new()
2204 browser->hbt = hbt; in perf_evsel_browser__new()
2205 browser->env = env; in perf_evsel_browser__new()
2206 browser->title = hists_browser__scnprintf_title; in perf_evsel_browser__new()
2207 browser->annotation_opts = annotation_opts; in perf_evsel_browser__new()
2209 return browser; in perf_evsel_browser__new()
2212 void hist_browser__delete(struct hist_browser *browser) in hist_browser__delete() argument
2214 free(browser); in hist_browser__delete()
2217 static struct hist_entry *hist_browser__selected_entry(struct hist_browser *browser) in hist_browser__selected_entry() argument
2219 return browser->he_selection; in hist_browser__selected_entry()
2222 static struct thread *hist_browser__selected_thread(struct hist_browser *browser) in hist_browser__selected_thread() argument
2224 return browser->he_selection->thread; in hist_browser__selected_thread()
2233 static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf, size_t size) in hists_browser__scnprintf_title() argument
2235 struct hist_browser_timer *hbt = browser->hbt; in hists_browser__scnprintf_title()
2236 int printed = __hists__scnprintf_title(browser->hists, bf, size, !is_report_browser(hbt)); in hists_browser__scnprintf_title()
2364 int (*fn)(struct hist_browser *browser, struct popup_action *act);
2368 do_annotate(struct hist_browser *browser, struct popup_action *act) in do_annotate() argument
2375 if (!browser->annotation_opts->objdump_path && in do_annotate()
2376 perf_env__lookup_objdump(browser->env, &browser->annotation_opts->objdump_path)) in do_annotate()
2383 evsel = hists_to_evsel(browser->hists); in do_annotate()
2384 err = map_symbol__tui_annotate(&act->ms, evsel, browser->hbt, in do_annotate()
2385 browser->annotation_opts); in do_annotate()
2386 he = hist_browser__selected_entry(browser); in do_annotate()
2394 ui_browser__update_nr_entries(&browser->b, browser->hists->nr_entries); in do_annotate()
2396 ui_browser__handle_resize(&browser->b); in do_annotate()
2401 add_annotate_opt(struct hist_browser *browser __maybe_unused, in add_annotate_opt()
2418 do_zoom_thread(struct hist_browser *browser, struct popup_action *act) in do_zoom_thread() argument
2422 if ((!hists__has(browser->hists, thread) && in do_zoom_thread()
2423 !hists__has(browser->hists, comm)) || thread == NULL) in do_zoom_thread()
2426 if (browser->hists->thread_filter) { in do_zoom_thread()
2427 pstack__remove(browser->pstack, &browser->hists->thread_filter); in do_zoom_thread()
2429 thread__zput(browser->hists->thread_filter); in do_zoom_thread()
2432 if (hists__has(browser->hists, thread)) { in do_zoom_thread()
2441 browser->hists->thread_filter = thread__get(thread); in do_zoom_thread()
2443 pstack__push(browser->pstack, &browser->hists->thread_filter); in do_zoom_thread()
2446 hists__filter_by_thread(browser->hists); in do_zoom_thread()
2447 hist_browser__reset(browser); in do_zoom_thread()
2452 add_thread_opt(struct hist_browser *browser, struct popup_action *act, in add_thread_opt() argument
2457 if ((!hists__has(browser->hists, thread) && in add_thread_opt()
2458 !hists__has(browser->hists, comm)) || thread == NULL) in add_thread_opt()
2461 if (hists__has(browser->hists, thread)) { in add_thread_opt()
2463 browser->hists->thread_filter ? "out of" : "into", in add_thread_opt()
2468 browser->hists->thread_filter ? "out of" : "into", in add_thread_opt()
2480 do_zoom_dso(struct hist_browser *browser, struct popup_action *act) in do_zoom_dso() argument
2484 if (!hists__has(browser->hists, dso) || map == NULL) in do_zoom_dso()
2487 if (browser->hists->dso_filter) { in do_zoom_dso()
2488 pstack__remove(browser->pstack, &browser->hists->dso_filter); in do_zoom_dso()
2490 browser->hists->dso_filter = NULL; in do_zoom_dso()
2495 browser->hists->dso_filter = map->dso; in do_zoom_dso()
2497 pstack__push(browser->pstack, &browser->hists->dso_filter); in do_zoom_dso()
2500 hists__filter_by_dso(browser->hists); in do_zoom_dso()
2501 hist_browser__reset(browser); in do_zoom_dso()
2506 add_dso_opt(struct hist_browser *browser, struct popup_action *act, in add_dso_opt() argument
2509 if (!hists__has(browser->hists, dso) || map == NULL) in add_dso_opt()
2513 browser->hists->dso_filter ? "out of" : "into", in add_dso_opt()
2523 do_browse_map(struct hist_browser *browser __maybe_unused, in do_browse_map()
2531 add_map_opt(struct hist_browser *browser, in add_map_opt() argument
2534 if (!hists__has(browser->hists, dso) || map == NULL) in add_map_opt()
2546 do_run_script(struct hist_browser *browser __maybe_unused, in do_run_script()
2591 do_res_sample_script(struct hist_browser *browser __maybe_unused, in do_res_sample_script()
2596 he = hist_browser__selected_entry(browser); in do_res_sample_script()
2602 add_script_opt_2(struct hist_browser *browser __maybe_unused, in add_script_opt_2()
2629 add_script_opt(struct hist_browser *browser, in add_script_opt() argument
2637 n = add_script_opt_2(browser, act, optstr, thread, sym, evsel, ""); in add_script_opt()
2639 he = hist_browser__selected_entry(browser); in add_script_opt()
2651 n += add_script_opt_2(browser, act, optstr, thread, sym, in add_script_opt()
2659 add_res_sample_opt(struct hist_browser *browser __maybe_unused, in add_res_sample_opt()
2680 do_switch_data(struct hist_browser *browser __maybe_unused, in do_switch_data()
2693 add_switch_opt(struct hist_browser *browser, in add_switch_opt() argument
2696 if (!is_report_browser(browser->hbt)) in add_switch_opt()
2707 do_exit_browser(struct hist_browser *browser __maybe_unused, in do_exit_browser()
2714 add_exit_opt(struct hist_browser *browser __maybe_unused, in add_exit_opt()
2725 do_zoom_socket(struct hist_browser *browser, struct popup_action *act) in do_zoom_socket() argument
2727 if (!hists__has(browser->hists, socket) || act->socket < 0) in do_zoom_socket()
2730 if (browser->hists->socket_filter > -1) { in do_zoom_socket()
2731 pstack__remove(browser->pstack, &browser->hists->socket_filter); in do_zoom_socket()
2732 browser->hists->socket_filter = -1; in do_zoom_socket()
2735 browser->hists->socket_filter = act->socket; in do_zoom_socket()
2737 pstack__push(browser->pstack, &browser->hists->socket_filter); in do_zoom_socket()
2740 hists__filter_by_socket(browser->hists); in do_zoom_socket()
2741 hist_browser__reset(browser); in do_zoom_socket()
2746 add_socket_opt(struct hist_browser *browser, struct popup_action *act, in add_socket_opt() argument
2749 if (!hists__has(browser->hists, socket) || socket_id < 0) in add_socket_opt()
2753 (browser->hists->socket_filter > -1) ? "out of" : "into", in add_socket_opt()
2833 struct hist_browser *browser = perf_evsel_browser__new(evsel, hbt, env, annotation_opts); in perf_evsel__hists_browse() local
2880 if (browser == NULL) in perf_evsel__hists_browse()
2888 browser->min_pcnt = min_pcnt; in perf_evsel__hists_browse()
2889 hist_browser__update_nr_entries(browser); in perf_evsel__hists_browse()
2891 browser->pstack = pstack__new(3); in perf_evsel__hists_browse()
2892 if (browser->pstack == NULL) in perf_evsel__hists_browse()
2904 browser->b.no_samples_msg = "Collecting samples..."; in perf_evsel__hists_browse()
2914 key = hist_browser__run(browser, helpline, in perf_evsel__hists_browse()
2917 if (browser->he_selection != NULL) { in perf_evsel__hists_browse()
2918 thread = hist_browser__selected_thread(browser); in perf_evsel__hists_browse()
2919 map = browser->selection->map; in perf_evsel__hists_browse()
2920 socked_id = browser->he_selection->socket; in perf_evsel__hists_browse()
2934 ui_browser__warning(&browser->b, delay_secs * 2, in perf_evsel__hists_browse()
2940 if (browser->selection == NULL || in perf_evsel__hists_browse()
2941 browser->selection->sym == NULL || in perf_evsel__hists_browse()
2942 browser->selection->map->dso->annotate_warned) in perf_evsel__hists_browse()
2945 actions->ms.map = browser->selection->map; in perf_evsel__hists_browse()
2946 actions->ms.sym = browser->selection->sym; in perf_evsel__hists_browse()
2947 do_annotate(browser, actions); in perf_evsel__hists_browse()
2950 hist_browser__dump(browser); in perf_evsel__hists_browse()
2954 do_zoom_dso(browser, actions); in perf_evsel__hists_browse()
2958 browser->show_dso = verbose > 0; in perf_evsel__hists_browse()
2964 do_zoom_thread(browser, actions); in perf_evsel__hists_browse()
2968 do_zoom_socket(browser, actions); in perf_evsel__hists_browse()
2978 hist_browser__reset(browser); in perf_evsel__hists_browse()
2985 do_run_script(browser, actions); in perf_evsel__hists_browse()
2990 key = do_switch_data(browser, actions); in perf_evsel__hists_browse()
3019 ui_browser__warning(&browser->b, delay_secs * 2, in perf_evsel__hists_browse()
3024 hist_browser__update_percent_limit(browser, new_percent); in perf_evsel__hists_browse()
3025 hist_browser__reset(browser); in perf_evsel__hists_browse()
3031 ui_browser__help_window(&browser->b, in perf_evsel__hists_browse()
3043 if (pstack__empty(browser->pstack)) { in perf_evsel__hists_browse()
3051 ui_browser__dialog_yesno(&browser->b, in perf_evsel__hists_browse()
3057 top = pstack__peek(browser->pstack); in perf_evsel__hists_browse()
3058 if (top == &browser->hists->dso_filter) { in perf_evsel__hists_browse()
3064 do_zoom_dso(browser, actions); in perf_evsel__hists_browse()
3065 } else if (top == &browser->hists->thread_filter) { in perf_evsel__hists_browse()
3066 do_zoom_thread(browser, actions); in perf_evsel__hists_browse()
3067 } else if (top == &browser->hists->socket_filter) { in perf_evsel__hists_browse()
3068 do_zoom_socket(browser, actions); in perf_evsel__hists_browse()
3099 if (!hists__has(hists, sym) || browser->selection == NULL) in perf_evsel__hists_browse()
3104 if (browser->he_selection) in perf_evsel__hists_browse()
3105 bi = browser->he_selection->branch_info; in perf_evsel__hists_browse()
3110 nr_options += add_annotate_opt(browser, in perf_evsel__hists_browse()
3116 nr_options += add_annotate_opt(browser, in perf_evsel__hists_browse()
3122 nr_options += add_annotate_opt(browser, in perf_evsel__hists_browse()
3125 browser->selection->map, in perf_evsel__hists_browse()
3126 browser->selection->sym); in perf_evsel__hists_browse()
3129 nr_options += add_thread_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3131 nr_options += add_dso_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3133 nr_options += add_map_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3135 browser->selection ? in perf_evsel__hists_browse()
3136 browser->selection->map : NULL); in perf_evsel__hists_browse()
3137 nr_options += add_socket_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3144 if (browser->he_selection) { in perf_evsel__hists_browse()
3146 nr_options += add_script_opt(browser, in perf_evsel__hists_browse()
3160 if (hists__has(hists, sym) && browser->selection->sym) { in perf_evsel__hists_browse()
3161 nr_options += add_script_opt(browser, in perf_evsel__hists_browse()
3164 NULL, browser->selection->sym, in perf_evsel__hists_browse()
3168 nr_options += add_script_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3170 nr_options += add_res_sample_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3172 hist_browser__selected_entry(browser)->res_samples, in perf_evsel__hists_browse()
3174 nr_options += add_res_sample_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3176 hist_browser__selected_entry(browser)->res_samples, in perf_evsel__hists_browse()
3178 nr_options += add_res_sample_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3180 hist_browser__selected_entry(browser)->res_samples, in perf_evsel__hists_browse()
3182 nr_options += add_switch_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3185 nr_options += add_exit_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3196 key = act->fn(browser, act); in perf_evsel__hists_browse()
3203 pstack__delete(browser->pstack); in perf_evsel__hists_browse()
3205 hist_browser__delete(browser); in perf_evsel__hists_browse()
3219 static void perf_evsel_menu__write(struct ui_browser *browser, in perf_evsel_menu__write() argument
3222 struct evsel_menu *menu = container_of(browser, in perf_evsel_menu__write()
3226 bool current_entry = ui_browser__is_current_entry(browser, row); in perf_evsel_menu__write()
3233 ui_browser__set_color(browser, current_entry ? HE_COLORSET_SELECTED : in perf_evsel_menu__write()
3250 ui_browser__printf(browser, "%s", bf); in perf_evsel_menu__write()
3256 ui_browser__set_color(browser, HE_COLORSET_TOP); in perf_evsel_menu__write()
3263 ui_browser__write_nstring(browser, warn, browser->width - printed); in perf_evsel_menu__write()
3360 static bool filter_group_entries(struct ui_browser *browser __maybe_unused, in filter_group_entries()