aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/ui/browsers/hists.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/ui/browsers/hists.c')
-rw-r--r--tools/perf/ui/browsers/hists.c41
1 files changed, 35 insertions, 6 deletions
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index d7112dfa89cc..167f7701f94e 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -1695,8 +1695,19 @@ out:
1695 return key; 1695 return key;
1696} 1696}
1697 1697
1698static bool filter_group_entries(struct ui_browser *self __maybe_unused,
1699 void *entry)
1700{
1701 struct perf_evsel *evsel = list_entry(entry, struct perf_evsel, node);
1702
1703 if (symbol_conf.event_group && !perf_evsel__is_group_leader(evsel))
1704 return true;
1705
1706 return false;
1707}
1708
1698static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist, 1709static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist,
1699 const char *help, 1710 int nr_entries, const char *help,
1700 struct hist_browser_timer *hbt, 1711 struct hist_browser_timer *hbt,
1701 struct perf_session_env *env) 1712 struct perf_session_env *env)
1702{ 1713{
@@ -1707,7 +1718,8 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist,
1707 .refresh = ui_browser__list_head_refresh, 1718 .refresh = ui_browser__list_head_refresh,
1708 .seek = ui_browser__list_head_seek, 1719 .seek = ui_browser__list_head_seek,
1709 .write = perf_evsel_menu__write, 1720 .write = perf_evsel_menu__write,
1710 .nr_entries = evlist->nr_entries, 1721 .filter = filter_group_entries,
1722 .nr_entries = nr_entries,
1711 .priv = evlist, 1723 .priv = evlist,
1712 }, 1724 },
1713 .env = env, 1725 .env = env,
@@ -1723,20 +1735,37 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist,
1723 menu.b.width = line_len; 1735 menu.b.width = line_len;
1724 } 1736 }
1725 1737
1726 return perf_evsel_menu__run(&menu, evlist->nr_entries, help, hbt); 1738 return perf_evsel_menu__run(&menu, nr_entries, help, hbt);
1727} 1739}
1728 1740
1729int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, 1741int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help,
1730 struct hist_browser_timer *hbt, 1742 struct hist_browser_timer *hbt,
1731 struct perf_session_env *env) 1743 struct perf_session_env *env)
1732{ 1744{
1733 if (evlist->nr_entries == 1) { 1745 int nr_entries = evlist->nr_entries;
1746
1747single_entry:
1748 if (nr_entries == 1) {
1734 struct perf_evsel *first = list_entry(evlist->entries.next, 1749 struct perf_evsel *first = list_entry(evlist->entries.next,
1735 struct perf_evsel, node); 1750 struct perf_evsel, node);
1736 const char *ev_name = perf_evsel__name(first); 1751 const char *ev_name = perf_evsel__name(first);
1737 return perf_evsel__hists_browse(first, evlist->nr_entries, help, 1752
1753 return perf_evsel__hists_browse(first, nr_entries, help,
1738 ev_name, false, hbt, env); 1754 ev_name, false, hbt, env);
1739 } 1755 }
1740 1756
1741 return __perf_evlist__tui_browse_hists(evlist, help, hbt, env); 1757 if (symbol_conf.event_group) {
1758 struct perf_evsel *pos;
1759
1760 nr_entries = 0;
1761 list_for_each_entry(pos, &evlist->entries, node)
1762 if (perf_evsel__is_group_leader(pos))
1763 nr_entries++;
1764
1765 if (nr_entries == 1)
1766 goto single_entry;
1767 }
1768
1769 return __perf_evlist__tui_browse_hists(evlist, nr_entries, help,
1770 hbt, env);
1742} 1771}