Lines Matching refs:browser

35 static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf, size_t size);
46 static int hist_browser__get_folding(struct hist_browser *browser) in hist_browser__get_folding() argument
49 struct hists *hists = browser->hists; in hist_browser__get_folding()
53 (nd = hists__filter_entries(nd, browser->min_pcnt)) != NULL; in hist_browser__get_folding()
66 struct ui_browser *browser = &hb->b; in hist_browser__set_title_space() local
70 browser->extra_title_lines = hb->show_headers ? hpp_list->nr_header_lines : 0; in hist_browser__set_title_space()
90 struct ui_browser *browser = &hb->b; in hist_browser__update_rows() local
96 browser->rows += browser->extra_title_lines; in hist_browser__update_rows()
97 browser->extra_title_lines = 0; in hist_browser__update_rows()
101 browser->extra_title_lines = hpp_list->nr_header_lines; in hist_browser__update_rows()
102 browser->rows -= browser->extra_title_lines; in hist_browser__update_rows()
107 index_row = browser->index - browser->top_idx; in hist_browser__update_rows()
108 if (index_row >= browser->rows) in hist_browser__update_rows()
109 browser->index -= index_row - browser->rows + 1; in hist_browser__update_rows()
112 static void hist_browser__refresh_dimensions(struct ui_browser *browser) in hist_browser__refresh_dimensions() argument
114 struct hist_browser *hb = container_of(browser, struct hist_browser, b); in hist_browser__refresh_dimensions()
117 browser->width = 3 + (hists__sort_list_width(hb->hists) + sizeof("[k]")); in hist_browser__refresh_dimensions()
124 ui_browser__refresh_dimensions(browser); in hist_browser__refresh_dimensions()
127 static void hist_browser__reset(struct hist_browser *browser) in hist_browser__reset() argument
133 browser->nr_callchain_rows = 0; in hist_browser__reset()
135 hist_browser__update_nr_entries(browser); in hist_browser__reset()
136 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__reset()
137 hist_browser__refresh_dimensions(&browser->b); in hist_browser__reset()
138 ui_browser__reset_index(&browser->b); in hist_browser__reset()
381 static bool hist_browser__toggle_fold(struct hist_browser *browser) in hist_browser__toggle_fold() argument
383 struct hist_entry *he = browser->he_selection; in hist_browser__toggle_fold()
384 struct map_symbol *ms = browser->selection; in hist_browser__toggle_fold()
400 browser->b.nr_entries -= he->nr_rows; in hist_browser__toggle_fold()
403 browser->nr_callchain_rows -= he->nr_rows; in hist_browser__toggle_fold()
405 browser->nr_hierarchy_entries -= he->nr_rows; in hist_browser__toggle_fold()
408 child_rows = hierarchy_count_rows(browser, he, true); in hist_browser__toggle_fold()
415 he->nr_rows = hierarchy_count_rows(browser, he, false); in hist_browser__toggle_fold()
419 browser->b.nr_entries += child_rows - he->nr_rows; in hist_browser__toggle_fold()
427 browser->b.nr_entries -= child_rows - he->nr_rows; in hist_browser__toggle_fold()
435 browser->b.nr_entries += he->nr_rows; in hist_browser__toggle_fold()
438 browser->nr_callchain_rows += he->nr_rows; in hist_browser__toggle_fold()
440 browser->nr_hierarchy_entries += he->nr_rows; in hist_browser__toggle_fold()
541 struct hist_browser *browser, bool unfold) in hist_entry__set_folding() argument
546 if (he->filtered || percent < browser->min_pcnt) in hist_entry__set_folding()
549 __hist_entry__set_folding(he, browser, unfold); in hist_entry__set_folding()
552 browser->nr_hierarchy_entries++; in hist_entry__set_folding()
554 browser->nr_callchain_rows += he->nr_rows; in hist_entry__set_folding()
555 else if (unfold && !hist_entry__has_hierarchy_children(he, browser->min_pcnt)) { in hist_entry__set_folding()
556 browser->nr_hierarchy_entries++; in hist_entry__set_folding()
564 __hist_browser__set_folding(struct hist_browser *browser, bool unfold) in __hist_browser__set_folding() argument
569 nd = rb_first(&browser->hists->entries); in __hist_browser__set_folding()
576 hist_entry__set_folding(he, browser, unfold); in __hist_browser__set_folding()
580 static void hist_browser__set_folding(struct hist_browser *browser, bool unfold) in hist_browser__set_folding() argument
582 browser->nr_hierarchy_entries = 0; in hist_browser__set_folding()
583 browser->nr_callchain_rows = 0; in hist_browser__set_folding()
584 __hist_browser__set_folding(browser, unfold); in hist_browser__set_folding()
586 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__set_folding()
588 ui_browser__reset_index(&browser->b); in hist_browser__set_folding()
591 static void hist_browser__set_folding_selected(struct hist_browser *browser, bool unfold) in hist_browser__set_folding_selected() argument
593 if (!browser->he_selection) in hist_browser__set_folding_selected()
596 hist_entry__set_folding(browser->he_selection, browser, unfold); in hist_browser__set_folding_selected()
597 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__set_folding_selected()
600 static void ui_browser__warn_lost_events(struct ui_browser *browser) in ui_browser__warn_lost_events() argument
602 ui_browser__warning(browser, 4, in ui_browser__warn_lost_events()
609 static int hist_browser__title(struct hist_browser *browser, char *bf, size_t size) in hist_browser__title() argument
611 return browser->title ? browser->title(browser, bf, size) : 0; in hist_browser__title()
614 int hist_browser__run(struct hist_browser *browser, const char *help, in hist_browser__run() argument
619 struct hist_browser_timer *hbt = browser->hbt; in hist_browser__run()
622 browser->b.entries = &browser->hists->entries; in hist_browser__run()
623 browser->b.nr_entries = hist_browser__nr_entries(browser); in hist_browser__run()
625 hist_browser__title(browser, title, sizeof(title)); in hist_browser__run()
627 if (ui_browser__show(&browser->b, title, "%s", help) < 0) in hist_browser__run()
631 key = ui_browser__run(&browser->b, delay_secs); in hist_browser__run()
638 if (hist_browser__has_filter(browser) || in hist_browser__run()
640 hist_browser__update_nr_entries(browser); in hist_browser__run()
642 nr_entries = hist_browser__nr_entries(browser); in hist_browser__run()
643 ui_browser__update_nr_entries(&browser->b, nr_entries); in hist_browser__run()
646 (browser->hists->stats.nr_lost_warned != in hist_browser__run()
647 browser->hists->stats.nr_events[PERF_RECORD_LOST])) { in hist_browser__run()
648 browser->hists->stats.nr_lost_warned = in hist_browser__run()
649 browser->hists->stats.nr_events[PERF_RECORD_LOST]; in hist_browser__run()
650 ui_browser__warn_lost_events(&browser->b); in hist_browser__run()
653 hist_browser__title(browser, title, sizeof(title)); in hist_browser__run()
654 ui_browser__show_title(&browser->b, title); in hist_browser__run()
659 struct hist_entry *h = rb_entry(browser->b.top, in hist_browser__run()
663 seq++, browser->b.nr_entries, in hist_browser__run()
664 browser->hists->nr_entries, in hist_browser__run()
665 browser->b.extra_title_lines, in hist_browser__run()
666 browser->b.rows, in hist_browser__run()
667 browser->b.index, in hist_browser__run()
668 browser->b.top_idx, in hist_browser__run()
674 hist_browser__set_folding(browser, false); in hist_browser__run()
678 hist_browser__set_folding_selected(browser, false); in hist_browser__run()
682 hist_browser__set_folding(browser, true); in hist_browser__run()
686 hist_browser__set_folding_selected(browser, true); in hist_browser__run()
689 browser->show_headers = !browser->show_headers; in hist_browser__run()
690 hist_browser__update_rows(browser); in hist_browser__run()
693 if (hist_browser__toggle_fold(browser)) in hist_browser__run()
701 ui_browser__hide(&browser->b); in hist_browser__run()
715 typedef void (*print_callchain_entry_fn)(struct hist_browser *browser,
721 static void hist_browser__show_callchain_entry(struct hist_browser *browser, in hist_browser__show_callchain_entry() argument
729 bool show_annotated = browser->show_dso && chain->ms.sym && symbol__annotation(chain->ms.sym)->src; in hist_browser__show_callchain_entry()
732 width = browser->b.width - (offset + 2); in hist_browser__show_callchain_entry()
733 if (ui_browser__is_current_entry(&browser->b, row)) { in hist_browser__show_callchain_entry()
734 browser->selection = &chain->ms; in hist_browser__show_callchain_entry()
739 ui_browser__set_color(&browser->b, color); in hist_browser__show_callchain_entry()
740 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_callchain_entry()
741 ui_browser__write_nstring(&browser->b, " ", offset); in hist_browser__show_callchain_entry()
742 ui_browser__printf(&browser->b, "%c", folded_sign); in hist_browser__show_callchain_entry()
743 ui_browser__write_graph(&browser->b, show_annotated ? SLSMG_RARROW_CHAR : ' '); in hist_browser__show_callchain_entry()
744 ui_browser__write_nstring(&browser->b, str, width); in hist_browser__show_callchain_entry()
759 typedef bool (*check_output_full_fn)(struct hist_browser *browser,
762 static bool hist_browser__check_output_full(struct hist_browser *browser, in hist_browser__check_output_full() argument
765 return browser->b.rows == row; in hist_browser__check_output_full()
768 static bool hist_browser__check_dump_full(struct hist_browser *browser __maybe_unused, in hist_browser__check_dump_full()
776 static int hist_browser__show_callchain_list(struct hist_browser *browser, in hist_browser__show_callchain_list() argument
798 browser->show_dso); in hist_browser__show_callchain_list()
820 print(browser, chain, str, offset, row, arg); in hist_browser__show_callchain_list()
841 static int hist_browser__show_callchain_flat(struct hist_browser *browser, in hist_browser__show_callchain_flat() argument
874 row += hist_browser__show_callchain_list(browser, child, in hist_browser__show_callchain_flat()
880 if (is_output_full(browser, row)) in hist_browser__show_callchain_flat()
897 row += hist_browser__show_callchain_list(browser, child, in hist_browser__show_callchain_flat()
903 if (is_output_full(browser, row)) in hist_browser__show_callchain_flat()
911 if (is_output_full(browser, row)) in hist_browser__show_callchain_flat()
919 static char *hist_browser__folded_callchain_str(struct hist_browser *browser, in hist_browser__folded_callchain_str() argument
928 browser->show_dso); in hist_browser__folded_callchain_str()
945 static int hist_browser__show_callchain_folded(struct hist_browser *browser, in hist_browser__show_callchain_folded() argument
985 chain_str = hist_browser__folded_callchain_str(browser, in hist_browser__show_callchain_folded()
1001 chain_str = hist_browser__folded_callchain_str(browser, in hist_browser__show_callchain_folded()
1017 print(browser, first_chain, chain_str, offset, row++, arg); in hist_browser__show_callchain_folded()
1022 if (is_output_full(browser, row)) in hist_browser__show_callchain_folded()
1030 static int hist_browser__show_callchain_graph(struct hist_browser *browser, in hist_browser__show_callchain_graph() argument
1067 row += hist_browser__show_callchain_list(browser, child, in hist_browser__show_callchain_graph()
1073 if (is_output_full(browser, row)) in hist_browser__show_callchain_graph()
1083 row += hist_browser__show_callchain_graph(browser, &child->rb_root, in hist_browser__show_callchain_graph()
1088 if (is_output_full(browser, row)) in hist_browser__show_callchain_graph()
1096 static int hist_browser__show_callchain(struct hist_browser *browser, in hist_browser__show_callchain() argument
1113 printed = hist_browser__show_callchain_flat(browser, in hist_browser__show_callchain()
1118 printed = hist_browser__show_callchain_folded(browser, in hist_browser__show_callchain()
1123 printed = hist_browser__show_callchain_graph(browser, in hist_browser__show_callchain()
1130 browser->he_selection = entry; in hist_browser__show_callchain()
1226 static int hist_browser__show_entry(struct hist_browser *browser, in hist_browser__show_entry() argument
1231 int width = browser->b.width; in hist_browser__show_entry()
1233 bool current_entry = ui_browser__is_current_entry(&browser->b, row); in hist_browser__show_entry()
1240 browser->he_selection = entry; in hist_browser__show_entry()
1241 browser->selection = &entry->ms; in hist_browser__show_entry()
1251 .b = &browser->b, in hist_browser__show_entry()
1257 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_entry()
1259 hists__for_each_format(browser->hists, fmt) { in hist_browser__show_entry()
1268 column++ < browser->b.horiz_scroll) in hist_browser__show_entry()
1271 if (current_entry && browser->b.navkeypressed) { in hist_browser__show_entry()
1272 ui_browser__set_color(&browser->b, in hist_browser__show_entry()
1275 ui_browser__set_color(&browser->b, in hist_browser__show_entry()
1281 ui_browser__printf(&browser->b, "%c ", folded_sign); in hist_browser__show_entry()
1286 ui_browser__printf(&browser->b, " "); in hist_browser__show_entry()
1297 ui_browser__printf(&browser->b, "%s", s + ret); in hist_browser__show_entry()
1300 ui_browser__printf(&browser->b, "%s", s); in hist_browser__show_entry()
1306 if (!browser->b.navkeypressed) in hist_browser__show_entry()
1309 ui_browser__write_nstring(&browser->b, "", width); in hist_browser__show_entry()
1316 if (folded_sign == '-' && row != browser->b.rows) { in hist_browser__show_entry()
1322 printed += hist_browser__show_callchain(browser, in hist_browser__show_entry()
1332 static int hist_browser__show_hierarchy_entry(struct hist_browser *browser, in hist_browser__show_hierarchy_entry() argument
1338 int width = browser->b.width; in hist_browser__show_hierarchy_entry()
1340 bool current_entry = ui_browser__is_current_entry(&browser->b, row); in hist_browser__show_hierarchy_entry()
1346 .b = &browser->b, in hist_browser__show_hierarchy_entry()
1353 browser->he_selection = entry; in hist_browser__show_hierarchy_entry()
1354 browser->selection = &entry->ms; in hist_browser__show_hierarchy_entry()
1366 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_hierarchy_entry()
1368 if (current_entry && browser->b.navkeypressed) in hist_browser__show_hierarchy_entry()
1369 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED); in hist_browser__show_hierarchy_entry()
1371 ui_browser__set_color(&browser->b, HE_COLORSET_NORMAL); in hist_browser__show_hierarchy_entry()
1373 ui_browser__write_nstring(&browser->b, "", level * HIERARCHY_INDENT); in hist_browser__show_hierarchy_entry()
1388 column++ < browser->b.horiz_scroll) in hist_browser__show_hierarchy_entry()
1391 if (current_entry && browser->b.navkeypressed) { in hist_browser__show_hierarchy_entry()
1392 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1395 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1400 ui_browser__printf(&browser->b, "%c ", folded_sign); in hist_browser__show_hierarchy_entry()
1404 ui_browser__printf(&browser->b, " "); in hist_browser__show_hierarchy_entry()
1415 ui_browser__printf(&browser->b, "%s", s + ret); in hist_browser__show_hierarchy_entry()
1419 ui_browser__printf(&browser->b, "%s", s); in hist_browser__show_hierarchy_entry()
1425 ui_browser__write_nstring(&browser->b, "", hierarchy_indent); in hist_browser__show_hierarchy_entry()
1429 if (column >= browser->b.horiz_scroll) { in hist_browser__show_hierarchy_entry()
1437 if (current_entry && browser->b.navkeypressed) { in hist_browser__show_hierarchy_entry()
1438 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1441 ui_browser__set_color(&browser->b, in hist_browser__show_hierarchy_entry()
1447 ui_browser__printf(&browser->b, "%c ", folded_sign); in hist_browser__show_hierarchy_entry()
1450 ui_browser__write_nstring(&browser->b, "", 2); in hist_browser__show_hierarchy_entry()
1466 ui_browser__printf(&browser->b, "%s", ltrim(s)); in hist_browser__show_hierarchy_entry()
1475 if (!browser->b.navkeypressed) in hist_browser__show_hierarchy_entry()
1478 ui_browser__write_nstring(&browser->b, "", width); in hist_browser__show_hierarchy_entry()
1484 if (entry->leaf && folded_sign == '-' && row != browser->b.rows) { in hist_browser__show_hierarchy_entry()
1489 printed += hist_browser__show_callchain(browser, entry, in hist_browser__show_hierarchy_entry()
1498 static int hist_browser__show_no_entry(struct hist_browser *browser, in hist_browser__show_no_entry() argument
1501 int width = browser->b.width; in hist_browser__show_no_entry()
1502 bool current_entry = ui_browser__is_current_entry(&browser->b, row); in hist_browser__show_no_entry()
1508 int indent = browser->hists->nr_hpp_node - 2; in hist_browser__show_no_entry()
1511 browser->he_selection = NULL; in hist_browser__show_no_entry()
1512 browser->selection = NULL; in hist_browser__show_no_entry()
1515 ui_browser__gotorc(&browser->b, row, 0); in hist_browser__show_no_entry()
1517 if (current_entry && browser->b.navkeypressed) in hist_browser__show_no_entry()
1518 ui_browser__set_color(&browser->b, HE_COLORSET_SELECTED); in hist_browser__show_no_entry()
1520 ui_browser__set_color(&browser->b, HE_COLORSET_NORMAL); in hist_browser__show_no_entry()
1522 ui_browser__write_nstring(&browser->b, "", level * HIERARCHY_INDENT); in hist_browser__show_no_entry()
1526 fmt_node = list_first_entry(&browser->hists->hpp_formats, in hist_browser__show_no_entry()
1529 if (perf_hpp__should_skip(fmt, browser->hists) || in hist_browser__show_no_entry()
1530 column++ < browser->b.horiz_scroll) in hist_browser__show_no_entry()
1533 ret = fmt->width(fmt, NULL, browser->hists); in hist_browser__show_no_entry()
1544 ui_browser__write_nstring(&browser->b, "", ret); in hist_browser__show_no_entry()
1548 ui_browser__write_nstring(&browser->b, "", indent * HIERARCHY_INDENT); in hist_browser__show_no_entry()
1551 if (column >= browser->b.horiz_scroll) { in hist_browser__show_no_entry()
1554 ret = snprintf(buf, sizeof(buf), "no entry >= %.2f%%", browser->min_pcnt); in hist_browser__show_no_entry()
1555 ui_browser__printf(&browser->b, " %s", buf); in hist_browser__show_no_entry()
1560 if (!browser->b.navkeypressed) in hist_browser__show_no_entry()
1563 ui_browser__write_nstring(&browser->b, "", width); in hist_browser__show_no_entry()
1574 hists_browser__scnprintf_headers(struct hist_browser *browser, char *buf, in hists_browser__scnprintf_headers() argument
1577 struct hists *hists = browser->hists; in hists_browser__scnprintf_headers()
1593 hists__for_each_format(browser->hists, fmt) { in hists_browser__scnprintf_headers()
1594 if (perf_hpp__should_skip(fmt, hists) || column++ < browser->b.horiz_scroll) in hists_browser__scnprintf_headers()
1612 static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *browser, char *buf, size… in hists_browser__scnprintf_hierarchy_headers() argument
1614 struct hists *hists = browser->hists; in hists_browser__scnprintf_hierarchy_headers()
1635 if (column++ < browser->b.horiz_scroll) in hists_browser__scnprintf_hierarchy_headers()
1696 static void hists_browser__hierarchy_headers(struct hist_browser *browser) in hists_browser__hierarchy_headers() argument
1700 hists_browser__scnprintf_hierarchy_headers(browser, headers, in hists_browser__hierarchy_headers()
1703 ui_browser__gotorc(&browser->b, 0, 0); in hists_browser__hierarchy_headers()
1704 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT); in hists_browser__hierarchy_headers()
1705 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1); in hists_browser__hierarchy_headers()
1708 static void hists_browser__headers(struct hist_browser *browser) in hists_browser__headers() argument
1710 struct hists *hists = browser->hists; in hists_browser__headers()
1718 hists_browser__scnprintf_headers(browser, headers, in hists_browser__headers()
1721 ui_browser__gotorc_title(&browser->b, line, 0); in hists_browser__headers()
1722 ui_browser__set_color(&browser->b, HE_COLORSET_ROOT); in hists_browser__headers()
1723 ui_browser__write_nstring(&browser->b, headers, browser->b.width + 1); in hists_browser__headers()
1727 static void hist_browser__show_headers(struct hist_browser *browser) in hist_browser__show_headers() argument
1730 hists_browser__hierarchy_headers(browser); in hist_browser__show_headers()
1732 hists_browser__headers(browser); in hist_browser__show_headers()
1735 static void ui_browser__hists_init_top(struct ui_browser *browser) in ui_browser__hists_init_top() argument
1737 if (browser->top == NULL) { in ui_browser__hists_init_top()
1740 hb = container_of(browser, struct hist_browser, b); in ui_browser__hists_init_top()
1741 browser->top = rb_first(&hb->hists->entries); in ui_browser__hists_init_top()
1745 static unsigned int hist_browser__refresh(struct ui_browser *browser) in hist_browser__refresh() argument
1749 struct hist_browser *hb = container_of(browser, struct hist_browser, b); in hist_browser__refresh()
1754 ui_browser__hists_init_top(browser); in hist_browser__refresh()
1758 for (nd = browser->top; nd; nd = rb_hierarchy_next(nd)) { in hist_browser__refresh()
1775 if (row == browser->rows) in hist_browser__refresh()
1786 if (row == browser->rows) in hist_browser__refresh()
1832 static void ui_browser__hists_seek(struct ui_browser *browser, in ui_browser__hists_seek() argument
1840 hb = container_of(browser, struct hist_browser, b); in ui_browser__hists_seek()
1842 if (browser->nr_entries == 0) in ui_browser__hists_seek()
1845 ui_browser__hists_init_top(browser); in ui_browser__hists_seek()
1849 nd = hists__filter_entries(rb_first(browser->entries), in ui_browser__hists_seek()
1853 nd = browser->top; in ui_browser__hists_seek()
1856 nd = rb_hierarchy_last(rb_last(browser->entries)); in ui_browser__hists_seek()
1868 h = rb_entry(browser->top, struct hist_entry, rb_node); in ui_browser__hists_seek()
1899 browser->top = nd; in ui_browser__hists_seek()
1908 browser->top = nd; in ui_browser__hists_seek()
1921 browser->top = nd; in ui_browser__hists_seek()
1931 browser->top = nd; in ui_browser__hists_seek()
1942 browser->top = nd; in ui_browser__hists_seek()
1957 browser->top = nd; in ui_browser__hists_seek()
1963 static int hist_browser__fprintf_callchain(struct hist_browser *browser, in hist_browser__fprintf_callchain() argument
1971 hist_browser__show_callchain(browser, he, level, 0, in hist_browser__fprintf_callchain()
1977 static int hist_browser__fprintf_entry(struct hist_browser *browser, in hist_browser__fprintf_entry() argument
1996 hists__for_each_format(browser->hists, fmt) { in hist_browser__fprintf_entry()
2013 printed += hist_browser__fprintf_callchain(browser, he, fp, 1); in hist_browser__fprintf_entry()
2019 static int hist_browser__fprintf_hierarchy_entry(struct hist_browser *browser, in hist_browser__fprintf_hierarchy_entry() argument
2069 printed += hist_browser__fprintf_callchain(browser, he, fp, in hist_browser__fprintf_hierarchy_entry()
2076 static int hist_browser__fprintf(struct hist_browser *browser, FILE *fp) in hist_browser__fprintf() argument
2078 struct rb_node *nd = hists__filter_entries(rb_first(browser->b.entries), in hist_browser__fprintf()
2079 browser->min_pcnt); in hist_browser__fprintf()
2086 printed += hist_browser__fprintf_hierarchy_entry(browser, in hist_browser__fprintf()
2090 printed += hist_browser__fprintf_entry(browser, h, fp); in hist_browser__fprintf()
2094 browser->min_pcnt); in hist_browser__fprintf()
2100 static int hist_browser__dump(struct hist_browser *browser) in hist_browser__dump() argument
2106 scnprintf(filename, sizeof(filename), "perf.hist.%d", browser->print_seq); in hist_browser__dump()
2112 if (++browser->print_seq == 8192) { in hist_browser__dump()
2126 ++browser->print_seq; in hist_browser__dump()
2127 hist_browser__fprintf(browser, fp); in hist_browser__dump()
2134 void hist_browser__init(struct hist_browser *browser, in hist_browser__init() argument
2139 browser->hists = hists; in hist_browser__init()
2140 browser->b.refresh = hist_browser__refresh; in hist_browser__init()
2141 browser->b.refresh_dimensions = hist_browser__refresh_dimensions; in hist_browser__init()
2142 browser->b.seek = ui_browser__hists_seek; in hist_browser__init()
2143 browser->b.use_navkeypressed = true; in hist_browser__init()
2144 browser->show_headers = symbol_conf.show_hist_headers; in hist_browser__init()
2145 hist_browser__set_title_space(browser); in hist_browser__init()
2154 ++browser->b.columns; in hist_browser__init()
2157 ++browser->b.columns; in hist_browser__init()
2160 ++browser->b.columns; in hist_browser__init()
2168 struct hist_browser *browser = zalloc(sizeof(*browser)); in hist_browser__new() local
2170 if (browser) in hist_browser__new()
2171 hist_browser__init(browser, hists); in hist_browser__new()
2173 return browser; in hist_browser__new()
2182 struct hist_browser *browser = hist_browser__new(evsel__hists(evsel)); in perf_evsel_browser__new() local
2184 if (browser) { in perf_evsel_browser__new()
2185 browser->hbt = hbt; in perf_evsel_browser__new()
2186 browser->env = env; in perf_evsel_browser__new()
2187 browser->title = hists_browser__scnprintf_title; in perf_evsel_browser__new()
2188 browser->annotation_opts = annotation_opts; in perf_evsel_browser__new()
2190 return browser; in perf_evsel_browser__new()
2193 void hist_browser__delete(struct hist_browser *browser) in hist_browser__delete() argument
2195 free(browser); in hist_browser__delete()
2198 static struct hist_entry *hist_browser__selected_entry(struct hist_browser *browser) in hist_browser__selected_entry() argument
2200 return browser->he_selection; in hist_browser__selected_entry()
2203 static struct thread *hist_browser__selected_thread(struct hist_browser *browser) in hist_browser__selected_thread() argument
2205 return browser->he_selection->thread; in hist_browser__selected_thread()
2214 static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf, size_t size) in hists_browser__scnprintf_title() argument
2216 struct hist_browser_timer *hbt = browser->hbt; in hists_browser__scnprintf_title()
2217 int printed = __hists__scnprintf_title(browser->hists, bf, size, !is_report_browser(hbt)); in hists_browser__scnprintf_title()
2331 int (*fn)(struct hist_browser *browser, struct popup_action *act);
2335 do_annotate(struct hist_browser *browser, struct popup_action *act) in do_annotate() argument
2342 if (!browser->annotation_opts->objdump_path && in do_annotate()
2343 perf_env__lookup_objdump(browser->env, &browser->annotation_opts->objdump_path)) in do_annotate()
2350 evsel = hists_to_evsel(browser->hists); in do_annotate()
2351 err = map_symbol__tui_annotate(&act->ms, evsel, browser->hbt, in do_annotate()
2352 browser->annotation_opts); in do_annotate()
2353 he = hist_browser__selected_entry(browser); in do_annotate()
2361 ui_browser__update_nr_entries(&browser->b, browser->hists->nr_entries); in do_annotate()
2363 ui_browser__handle_resize(&browser->b); in do_annotate()
2368 add_annotate_opt(struct hist_browser *browser __maybe_unused, in add_annotate_opt()
2385 do_zoom_thread(struct hist_browser *browser, struct popup_action *act) in do_zoom_thread() argument
2389 if ((!hists__has(browser->hists, thread) && in do_zoom_thread()
2390 !hists__has(browser->hists, comm)) || thread == NULL) in do_zoom_thread()
2393 if (browser->hists->thread_filter) { in do_zoom_thread()
2394 pstack__remove(browser->pstack, &browser->hists->thread_filter); in do_zoom_thread()
2396 thread__zput(browser->hists->thread_filter); in do_zoom_thread()
2399 if (hists__has(browser->hists, thread)) { in do_zoom_thread()
2408 browser->hists->thread_filter = thread__get(thread); in do_zoom_thread()
2410 pstack__push(browser->pstack, &browser->hists->thread_filter); in do_zoom_thread()
2413 hists__filter_by_thread(browser->hists); in do_zoom_thread()
2414 hist_browser__reset(browser); in do_zoom_thread()
2419 add_thread_opt(struct hist_browser *browser, struct popup_action *act, in add_thread_opt() argument
2424 if ((!hists__has(browser->hists, thread) && in add_thread_opt()
2425 !hists__has(browser->hists, comm)) || thread == NULL) in add_thread_opt()
2428 if (hists__has(browser->hists, thread)) { in add_thread_opt()
2430 browser->hists->thread_filter ? "out of" : "into", in add_thread_opt()
2435 browser->hists->thread_filter ? "out of" : "into", in add_thread_opt()
2447 do_zoom_dso(struct hist_browser *browser, struct popup_action *act) in do_zoom_dso() argument
2451 if (!hists__has(browser->hists, dso) || map == NULL) in do_zoom_dso()
2454 if (browser->hists->dso_filter) { in do_zoom_dso()
2455 pstack__remove(browser->pstack, &browser->hists->dso_filter); in do_zoom_dso()
2457 browser->hists->dso_filter = NULL; in do_zoom_dso()
2462 browser->hists->dso_filter = map->dso; in do_zoom_dso()
2464 pstack__push(browser->pstack, &browser->hists->dso_filter); in do_zoom_dso()
2467 hists__filter_by_dso(browser->hists); in do_zoom_dso()
2468 hist_browser__reset(browser); in do_zoom_dso()
2473 add_dso_opt(struct hist_browser *browser, struct popup_action *act, in add_dso_opt() argument
2476 if (!hists__has(browser->hists, dso) || map == NULL) in add_dso_opt()
2480 browser->hists->dso_filter ? "out of" : "into", in add_dso_opt()
2490 do_browse_map(struct hist_browser *browser __maybe_unused, in do_browse_map()
2498 add_map_opt(struct hist_browser *browser, in add_map_opt() argument
2501 if (!hists__has(browser->hists, dso) || map == NULL) in add_map_opt()
2513 do_run_script(struct hist_browser *browser __maybe_unused, in do_run_script()
2532 add_script_opt(struct hist_browser *browser __maybe_unused, in add_script_opt()
2556 do_switch_data(struct hist_browser *browser __maybe_unused, in do_switch_data()
2569 add_switch_opt(struct hist_browser *browser, in add_switch_opt() argument
2572 if (!is_report_browser(browser->hbt)) in add_switch_opt()
2583 do_exit_browser(struct hist_browser *browser __maybe_unused, in do_exit_browser()
2590 add_exit_opt(struct hist_browser *browser __maybe_unused, in add_exit_opt()
2601 do_zoom_socket(struct hist_browser *browser, struct popup_action *act) in do_zoom_socket() argument
2603 if (!hists__has(browser->hists, socket) || act->socket < 0) in do_zoom_socket()
2606 if (browser->hists->socket_filter > -1) { in do_zoom_socket()
2607 pstack__remove(browser->pstack, &browser->hists->socket_filter); in do_zoom_socket()
2608 browser->hists->socket_filter = -1; in do_zoom_socket()
2611 browser->hists->socket_filter = act->socket; in do_zoom_socket()
2613 pstack__push(browser->pstack, &browser->hists->socket_filter); in do_zoom_socket()
2616 hists__filter_by_socket(browser->hists); in do_zoom_socket()
2617 hist_browser__reset(browser); in do_zoom_socket()
2622 add_socket_opt(struct hist_browser *browser, struct popup_action *act, in add_socket_opt() argument
2625 if (!hists__has(browser->hists, socket) || socket_id < 0) in add_socket_opt()
2629 (browser->hists->socket_filter > -1) ? "out of" : "into", in add_socket_opt()
2709 struct hist_browser *browser = perf_evsel_browser__new(evsel, hbt, env, annotation_opts); in perf_evsel__hists_browse() local
2756 if (browser == NULL) in perf_evsel__hists_browse()
2764 browser->min_pcnt = min_pcnt; in perf_evsel__hists_browse()
2765 hist_browser__update_nr_entries(browser); in perf_evsel__hists_browse()
2767 browser->pstack = pstack__new(3); in perf_evsel__hists_browse()
2768 if (browser->pstack == NULL) in perf_evsel__hists_browse()
2787 key = hist_browser__run(browser, helpline, in perf_evsel__hists_browse()
2790 if (browser->he_selection != NULL) { in perf_evsel__hists_browse()
2791 thread = hist_browser__selected_thread(browser); in perf_evsel__hists_browse()
2792 map = browser->selection->map; in perf_evsel__hists_browse()
2793 socked_id = browser->he_selection->socket; in perf_evsel__hists_browse()
2807 ui_browser__warning(&browser->b, delay_secs * 2, in perf_evsel__hists_browse()
2813 if (browser->selection == NULL || in perf_evsel__hists_browse()
2814 browser->selection->sym == NULL || in perf_evsel__hists_browse()
2815 browser->selection->map->dso->annotate_warned) in perf_evsel__hists_browse()
2818 actions->ms.map = browser->selection->map; in perf_evsel__hists_browse()
2819 actions->ms.sym = browser->selection->sym; in perf_evsel__hists_browse()
2820 do_annotate(browser, actions); in perf_evsel__hists_browse()
2823 hist_browser__dump(browser); in perf_evsel__hists_browse()
2827 do_zoom_dso(browser, actions); in perf_evsel__hists_browse()
2831 browser->show_dso = verbose > 0; in perf_evsel__hists_browse()
2837 do_zoom_thread(browser, actions); in perf_evsel__hists_browse()
2841 do_zoom_socket(browser, actions); in perf_evsel__hists_browse()
2851 hist_browser__reset(browser); in perf_evsel__hists_browse()
2858 do_run_script(browser, actions); in perf_evsel__hists_browse()
2863 key = do_switch_data(browser, actions); in perf_evsel__hists_browse()
2892 ui_browser__warning(&browser->b, delay_secs * 2, in perf_evsel__hists_browse()
2897 hist_browser__update_percent_limit(browser, new_percent); in perf_evsel__hists_browse()
2898 hist_browser__reset(browser); in perf_evsel__hists_browse()
2904 ui_browser__help_window(&browser->b, in perf_evsel__hists_browse()
2916 if (pstack__empty(browser->pstack)) { in perf_evsel__hists_browse()
2924 ui_browser__dialog_yesno(&browser->b, in perf_evsel__hists_browse()
2930 top = pstack__peek(browser->pstack); in perf_evsel__hists_browse()
2931 if (top == &browser->hists->dso_filter) { in perf_evsel__hists_browse()
2937 do_zoom_dso(browser, actions); in perf_evsel__hists_browse()
2938 } else if (top == &browser->hists->thread_filter) { in perf_evsel__hists_browse()
2939 do_zoom_thread(browser, actions); in perf_evsel__hists_browse()
2940 } else if (top == &browser->hists->socket_filter) { in perf_evsel__hists_browse()
2941 do_zoom_socket(browser, actions); in perf_evsel__hists_browse()
2972 if (!hists__has(hists, sym) || browser->selection == NULL) in perf_evsel__hists_browse()
2976 bi = browser->he_selection->branch_info; in perf_evsel__hists_browse()
2981 nr_options += add_annotate_opt(browser, in perf_evsel__hists_browse()
2987 nr_options += add_annotate_opt(browser, in perf_evsel__hists_browse()
2993 nr_options += add_annotate_opt(browser, in perf_evsel__hists_browse()
2996 browser->selection->map, in perf_evsel__hists_browse()
2997 browser->selection->sym); in perf_evsel__hists_browse()
3000 nr_options += add_thread_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3002 nr_options += add_dso_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3004 nr_options += add_map_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3006 browser->selection ? in perf_evsel__hists_browse()
3007 browser->selection->map : NULL); in perf_evsel__hists_browse()
3008 nr_options += add_socket_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3015 if (browser->he_selection) { in perf_evsel__hists_browse()
3017 nr_options += add_script_opt(browser, in perf_evsel__hists_browse()
3031 if (hists__has(hists, sym) && browser->selection->sym) { in perf_evsel__hists_browse()
3032 nr_options += add_script_opt(browser, in perf_evsel__hists_browse()
3035 NULL, browser->selection->sym); in perf_evsel__hists_browse()
3038 nr_options += add_script_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3040 nr_options += add_switch_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3043 nr_options += add_exit_opt(browser, &actions[nr_options], in perf_evsel__hists_browse()
3054 key = act->fn(browser, act); in perf_evsel__hists_browse()
3061 pstack__delete(browser->pstack); in perf_evsel__hists_browse()
3063 hist_browser__delete(browser); in perf_evsel__hists_browse()
3077 static void perf_evsel_menu__write(struct ui_browser *browser, in perf_evsel_menu__write() argument
3080 struct perf_evsel_menu *menu = container_of(browser, in perf_evsel_menu__write()
3084 bool current_entry = ui_browser__is_current_entry(browser, row); in perf_evsel_menu__write()
3091 ui_browser__set_color(browser, current_entry ? HE_COLORSET_SELECTED : in perf_evsel_menu__write()
3108 ui_browser__printf(browser, "%s", bf); in perf_evsel_menu__write()
3114 ui_browser__set_color(browser, HE_COLORSET_TOP); in perf_evsel_menu__write()
3121 ui_browser__write_nstring(browser, warn, browser->width - printed); in perf_evsel_menu__write()
3217 static bool filter_group_entries(struct ui_browser *browser __maybe_unused, in filter_group_entries()