Home | History | Annotate | Download | only in browsers

Lines Matching full:browser

15 #include "../browser.h"
37 static void hist_browser__refresh_dimensions(struct hist_browser *browser)
40 browser->b.width = 3 + (hists__sort_list_width(browser->hists) +
44 static void hist_browser__reset(struct hist_browser *browser)
46 browser->b.nr_entries = browser->hists->nr_entries;
47 hist_browser__refresh_dimensions(browser);
48 ui_browser__reset_index(&browser->b);
195 static bool hist_browser__toggle_fold(struct hist_browser *browser)
197 if (map_symbol__toggle_fold(browser->selection)) {
198 struct hist_entry *he = browser->he_selection;
201 browser->hists->nr_entries -= he->nr_rows;
207 browser->hists->nr_entries += he->nr_rows;
208 browser->b.nr_entries = browser->hists->nr_entries;
296 static void hist_browser__set_folding(struct hist_browser *browser, bool unfold)
298 hists__set_folding(browser->hists, unfold);
299 browser->b.nr_entries = browser->hists->nr_entries;
301 ui_browser__reset_index(&browser->b);
304 static void ui_browser__warn_lost_events(struct ui_browser *browser)
306 ui_browser__warning(browser, 4,
315 static int hist_browser__run(struct hist_browser *browser, const char *ev_name,
322 browser->b.entries = &browser->hists->entries;
323 browser->b.nr_entries = browser->hists->nr_entries;
324 if (browser->min_pcnt)
325 browser->b.nr_entries = browser->nr_pcnt_entries;
327 hist_browser__refresh_dimensions(browser);
328 hists__browser_title(browser->hists, title, sizeof(title), ev_name);
330 if (ui_browser__show(&browser->b, title,
335 key = ui_browser__run(&browser->b, delay_secs);
342 if (browser->min_pcnt) {
343 hist_browser__update_pcnt_entries(browser);
344 nr_entries = browser->nr_pcnt_entries;
346 nr_entries = browser->hists->nr_entries;
349 ui_browser__update_nr_entries(&browser->b, nr_entries);
351 if (browser->hists->stats.nr_lost_warned !=
352 browser->hists->stats.nr_events[PERF_RECORD_LOST]) {
353 browser->hists->stats.nr_lost_warned =
354 browser->hists->stats.nr_events[PERF_RECORD_LOST];
355 ui_browser__warn_lost_events(&browser->b);
358 hists__browser_title(browser->hists, title, sizeof(title), ev_name);
359 ui_browser__show_title(&browser->b, title);
364 struct hist_entry *h = rb_entry(browser->b.top,
368 seq++, browser->b.nr_entries,
369 browser->hists->nr_entries,
370 browser->b.height,
371 browser->b.index,
372 browser->b.top_idx,
378 hist_browser__set_folding(browser, false);
382 hist_browser__set_folding(browser, true);
385 if (hist_browser__toggle_fold(browser))
393 ui_browser__hide(&browser->b);
416 static int hist_browser__show_callchain_node_rb_tree(struct hist_browser *browser,
464 browser->show_dso);
475 width = browser->b.width - (offset + extra_offset + 2);
476 if (ui_browser__is_current_entry(&browser->b, row)) {
477 browser->selection = &chain->ms;
482 ui_browser__set_color(&browser->b, color);
483 ui_browser__gotorc(&browser->b, row, 0);
489 if (++row == browser->b.height)
498 row += hist_browser__show_callchain_node_rb_tree(browser, child, new_total,
502 if (row == browser->b.height)
510 static int hist_browser__show_callchain_node(struct hist_browser *browser,
519 width = browser->b.width - offset;
534 if (ui_browser__is_current_entry(&browser->b, row)) {
535 browser->selection = &chain->ms;
541 browser->show_dso);
542 ui_browser__gotorc(&browser->b, row, 0);
543 ui_browser__set_color(&browser->b, color);
548 if (++row == browser->b.height)
553 row += hist_browser__show_callchain_node_rb_tree(browser, node,
554 browser->hists->stats.total_period,
562 static int hist_browser__show_callchain(struct hist_browser *browser,
574 row += hist_browser__show_callchain_node(browser, node, level,
577 if (row == browser->b.height)
720 static int hist_browser__show_entry(struct hist_browser *browser,
726 int width = browser->b.width;
728 bool current_entry = ui_browser__is_current_entry(&browser->b, row);
734 browser->he_selection = entry;
735 browser->selection = &entry->ms;
745 .b = &browser->b,
755 ui_browser__gotorc(&browser->b, row, 0);
773 if (!browser->b.navkeypressed)
776 hist_entry__sort_snprintf(entry, s, sizeof(s), browser->hists);
783 if (folded_sign == '-' && row != browser->b.height) {
784 printed += hist_browser__show_callchain(browser, &entry->sorted_chain,
788 browser->he_selection = entry;
794 static void ui_browser__hists_init_top(struct ui_browser *browser)
796 if (browser->top == NULL) {
799 hb = container_of(browser, struct hist_browser, b);
800 browser->top = rb_first(&hb->hists->entries);
804 static unsigned int hist_browser__refresh(struct ui_browser *browser)
808 struct hist_browser *hb = container_of(browser, struct hist_browser, b);
810 ui_browser__hists_init_top(browser);
812 for (nd = browser->top; nd; nd = rb_next(nd)) {
824 if (row == browser->height)
870 static void ui_browser__hists_seek(struct ui_browser *browser,
878 hb = container_of(browser, struct hist_browser, b);
880 if (browser->nr_entries == 0)
883 ui_browser__hists_init_top(browser);
887 nd = hists__filter_entries(rb_first(browser->entries),
891 nd = browser->top;
894 nd = hists__filter_prev_entries(rb_last(browser->entries),
906 h = rb_entry(browser->top, struct hist_entry, rb_node);
934 browser->top = nd;
943 browser->top = nd;
956 browser->top = nd;
966 browser->top = nd;
977 browser->top = nd;
992 browser->top = nd;
998 static int hist_browser__fprintf_callchain_node_rb_tree(struct hist_browser *browser,
1040 browser->show_dso);
1058 printed += hist_browser__fprintf_callchain_node_rb_tree(browser, child, new_total,
1068 static int hist_browser__fprintf_callchain_node(struct hist_browser *browser,
1081 s = callchain_list__sym_name(chain, bf, sizeof(bf), browser->show_dso);
1086 printed += hist_browser__fprintf_callchain_node_rb_tree(browser, node,
1087 browser->hists->stats.total_period,
1092 static int hist_browser__fprintf_callchain(struct hist_browser *browser,
1101 printed += hist_browser__fprintf_callchain_node(browser, node, level, fp);
1107 static int hist_browser__fprintf_entry(struct hist_browser *browser,
1118 hist_entry__sort_snprintf(he, s, sizeof(s), browser->hists);
1119 percent = (he->stat.period * 100.0) / browser->hists->stats.total_period;
1135 printed += hist_browser__fprintf_callchain(browser, &he->sorted_chain, 1, fp);
1140 static int hist_browser__fprintf(struct hist_browser *browser, FILE *fp)
1142 struct rb_node *nd = hists__filter_entries(rb_first(browser->b.entries),
1143 browser->hists,
1144 browser->min_pcnt);
1150 printed += hist_browser__fprintf_entry(browser, h, fp);
1151 nd = hists__filter_entries(rb_next(nd), browser->hists,
1152 browser->min_pcnt);
1158 static int hist_browser__dump(struct hist_browser *browser)
1164 scnprintf(filename, sizeof(filename), "perf.hist.%d", browser->print_seq);
1170 if (++browser->print_seq == 8192) {
1184 ++browser->print_seq;
1185 hist_browser__fprintf(browser, fp);
1194 struct hist_browser *browser = zalloc(sizeof(*browser));
1196 if (browser) {
1197 browser->hists = hists;
1198 browser->b.refresh = hist_browser__refresh;
1199 browser->b.seek = ui_browser__hists_seek;
1200 browser->b.use_navkeypressed = true;
1203 return browser;
1206 static void hist_browser__delete(struct hist_browser *browser)
1208 free(browser);
1211 static struct hist_entry *hist_browser__selected_entry(struct hist_browser *browser)
1213 return browser->he_selection;
1216 static struct thread *hist_browser__selected_thread(struct hist_browser *browser)
1218 return browser->he_selection->thread;
1276 /* Check whether the browser is for 'top' or 'report' */
1393 struct hist_browser *browser = hist_browser__new(hists);
1403 if (browser == NULL)
1407 browser->min_pcnt = min_pcnt;
1408 hist_browser__update_pcnt_entries(browser);
1430 key = hist_browser__run(browser, ev_name, hbt);
1432 if (browser->he_selection != NULL) {
1433 thread = hist_browser__selected_thread(browser);
1434 dso = browser->selection->map ? browser->selection->map->dso : NULL;
1442 * Exit the browser, let hists__browser_tree
1448 ui_browser__warning(&browser->b, delay_secs * 2,
1454 if (browser->selection == NULL ||
1455 browser->selection->sym == NULL ||
1456 browser->selection->map->dso->annotate_warned)
1460 hist_browser__dump(browser);
1465 browser->show_dso = !browser->show_dso;
1476 hist_browser__reset(browser);
1490 ui_browser__help_window(&browser->b,
1494 "q/ESC/CTRL+C Exit browser\n\n"
1527 if (top == &browser->hists->dso_filter)
1529 if (top == &browser->hists->thread_filter)
1535 !ui_browser__dialog_yesno(&browser->b,
1550 bi = browser->he_selection->branch_info;
1551 if (browser->selection != NULL &&
1559 if (browser->selection != NULL &&
1570 if (browser->selection != NULL &&
1571 browser->selection->sym != NULL &&
1572 !browser->selection->map->dso->annotate_warned &&
1574 browser->selection->sym->name) > 0)
1580 (browser->hists->thread_filter ? "out of" : "into"),
1587 (browser->hists->dso_filter ? "out of" : "into"),
1591 if (browser->selection != NULL &&
1592 browser->selection->map != NULL &&
1597 if (browser->he_selection) {
1601 browser->he_selection->thread->comm) > 0)
1604 sym = browser->he_selection->ms.sym;
1637 he = hist_browser__selected_entry(browser);
1669 ui_browser__update_nr_entries(&browser->b, browser->hists->nr_entries);
1671 ui_browser__handle_resize(&browser->b);
1674 map__browse(browser->selection->map);
1677 if (browser->hists->dso_filter) {
1678 pstack__remove(fstack, &browser->hists->dso_filter);
1681 browser->hists->dso_filter = NULL;
1688 browser->hists->dso_filter = dso;
1690 pstack__push(fstack, &browser->hists->dso_filter);
1693 hist_browser__reset(browser);
1696 if (browser->hists->thread_filter) {
1697 pstack__remove(fstack, &browser->hists->thread_filter);
1700 browser->hists->thread_filter = NULL;
1706 browser->hists->thread_filter = thread;
1708 pstack__push(fstack, &browser->hists->thread_filter);
1711 hist_browser__reset(browser);
1720 sprintf(script_opt, " -c %s ", browser->he_selection->thread->comm);
1723 sprintf(script_opt, " -S %s ", browser->he_selection->ms.sym->name);
1741 hist_browser__delete(browser);
1754 static void perf_evsel_menu__write(struct ui_browser *browser,
1757 struct perf_evsel_menu *menu = container_of(browser,
1760 bool current_entry = ui_browser__is_current_entry(browser, row);
1767 ui_browser__set_color(browser, current_entry ? HE_COLORSET_SELECTED :
1789 ui_browser__set_color(browser, HE_COLORSET_TOP);
1796 slsmg_write_nstring(warn, browser->width - printed);