|
@@ -1695,8 +1695,19 @@ out:
|
|
|
return key;
|
|
|
}
|
|
|
|
|
|
+static bool filter_group_entries(struct ui_browser *self __maybe_unused,
|
|
|
+ void *entry)
|
|
|
+{
|
|
|
+ struct perf_evsel *evsel = list_entry(entry, struct perf_evsel, node);
|
|
|
+
|
|
|
+ if (symbol_conf.event_group && !perf_evsel__is_group_leader(evsel))
|
|
|
+ return true;
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist,
|
|
|
- const char *help,
|
|
|
+ int nr_entries, const char *help,
|
|
|
struct hist_browser_timer *hbt,
|
|
|
struct perf_session_env *env)
|
|
|
{
|
|
@@ -1707,7 +1718,8 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist,
|
|
|
.refresh = ui_browser__list_head_refresh,
|
|
|
.seek = ui_browser__list_head_seek,
|
|
|
.write = perf_evsel_menu__write,
|
|
|
- .nr_entries = evlist->nr_entries,
|
|
|
+ .filter = filter_group_entries,
|
|
|
+ .nr_entries = nr_entries,
|
|
|
.priv = evlist,
|
|
|
},
|
|
|
.env = env,
|
|
@@ -1723,20 +1735,37 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist,
|
|
|
menu.b.width = line_len;
|
|
|
}
|
|
|
|
|
|
- return perf_evsel_menu__run(&menu, evlist->nr_entries, help, hbt);
|
|
|
+ return perf_evsel_menu__run(&menu, nr_entries, help, hbt);
|
|
|
}
|
|
|
|
|
|
int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help,
|
|
|
struct hist_browser_timer *hbt,
|
|
|
struct perf_session_env *env)
|
|
|
{
|
|
|
- if (evlist->nr_entries == 1) {
|
|
|
+ int nr_entries = evlist->nr_entries;
|
|
|
+
|
|
|
+single_entry:
|
|
|
+ if (nr_entries == 1) {
|
|
|
struct perf_evsel *first = list_entry(evlist->entries.next,
|
|
|
struct perf_evsel, node);
|
|
|
const char *ev_name = perf_evsel__name(first);
|
|
|
- return perf_evsel__hists_browse(first, evlist->nr_entries, help,
|
|
|
+
|
|
|
+ return perf_evsel__hists_browse(first, nr_entries, help,
|
|
|
ev_name, false, hbt, env);
|
|
|
}
|
|
|
|
|
|
- return __perf_evlist__tui_browse_hists(evlist, help, hbt, env);
|
|
|
+ if (symbol_conf.event_group) {
|
|
|
+ struct perf_evsel *pos;
|
|
|
+
|
|
|
+ nr_entries = 0;
|
|
|
+ list_for_each_entry(pos, &evlist->entries, node)
|
|
|
+ if (perf_evsel__is_group_leader(pos))
|
|
|
+ nr_entries++;
|
|
|
+
|
|
|
+ if (nr_entries == 1)
|
|
|
+ goto single_entry;
|
|
|
+ }
|
|
|
+
|
|
|
+ return __perf_evlist__tui_browse_hists(evlist, nr_entries, help,
|
|
|
+ hbt, env);
|
|
|
}
|