aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung.kim@lge.com>2013-01-22 04:09:43 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-01-31 11:07:48 -0500
commitfc24d7c25c9d880ae012548d522fe13caee556ed (patch)
tree0c6aa23e8fc385a6db605f7a9c30b3cb67f5da18 /tools
parent34b9564373a9e1d8c33d07824fae228a381d1803 (diff)
perf report: Bypass non-leader events when event group is enabled
Since we have all necessary information in the leader events and other members don't, bypass members. Member events will be shown along with the leaders if event group is enabled. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Pekka Enberg <penberg@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1358845787-1350-16-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/builtin-report.c4
-rw-r--r--tools/perf/ui/browsers/hists.c41
-rw-r--r--tools/perf/ui/gtk/hists.c4
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
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}
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),