diff options
| -rw-r--r-- | tools/perf/builtin-report.c | 4 | ||||
| -rw-r--r-- | tools/perf/ui/browsers/hists.c | 41 | ||||
| -rw-r--r-- | tools/perf/ui/gtk/hists.c | 4 |
3 files changed, 43 insertions, 6 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index fd2503a5f876..9cc768ecacad 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
| @@ -319,6 +319,10 @@ static int perf_evlist__tty_browse_hists(struct perf_evlist *evlist, | |||
| 319 | struct hists *hists = &pos->hists; | 319 | struct hists *hists = &pos->hists; |
| 320 | const char *evname = perf_evsel__name(pos); | 320 | const char *evname = perf_evsel__name(pos); |
| 321 | 321 | ||
| 322 | if (symbol_conf.event_group && | ||
| 323 | !perf_evsel__is_group_leader(pos)) | ||
| 324 | continue; | ||
| 325 | |||
| 322 | hists__fprintf_nr_sample_events(hists, evname, stdout); | 326 | hists__fprintf_nr_sample_events(hists, evname, stdout); |
| 323 | hists__fprintf(hists, true, 0, 0, stdout); | 327 | hists__fprintf(hists, true, 0, 0, stdout); |
| 324 | fprintf(stdout, "\n\n"); | 328 | fprintf(stdout, "\n\n"); |
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 | ||
| 1698 | static 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 | |||
| 1698 | static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist, | 1709 | static 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 | ||
| 1729 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, | 1741 | int 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 | |||
| 1747 | single_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 | } |
diff --git a/tools/perf/ui/gtk/hists.c b/tools/perf/ui/gtk/hists.c index caa554bdbfe7..9c02c4c0f3b7 100644 --- a/tools/perf/ui/gtk/hists.c +++ b/tools/perf/ui/gtk/hists.c | |||
| @@ -271,6 +271,10 @@ int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist, | |||
| 271 | GtkWidget *scrolled_window; | 271 | GtkWidget *scrolled_window; |
| 272 | GtkWidget *tab_label; | 272 | GtkWidget *tab_label; |
| 273 | 273 | ||
| 274 | if (symbol_conf.event_group && | ||
| 275 | !perf_evsel__is_group_leader(pos)) | ||
| 276 | continue; | ||
| 277 | |||
| 274 | scrolled_window = gtk_scrolled_window_new(NULL, NULL); | 278 | scrolled_window = gtk_scrolled_window_new(NULL, NULL); |
| 275 | 279 | ||
| 276 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), | 280 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), |
