perf report: Move histogram entries collapsing to separate function
authorArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 8 Jan 2014 17:45:24 +0000 (14:45 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 13 Jan 2014 13:06:25 +0000 (10:06 -0300)
Further uncluttering the main 'report' function by group related code in
separate function.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-b594zsbwke8khir13kudwqmj@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-report.c

index 03941ad..cff9465 100644 (file)
@@ -486,13 +486,55 @@ static int report__browse_hists(struct report *rep)
        return ret;
 }
 
+static u64 report__collapse_hists(struct report *rep)
+{
+       struct ui_progress prog;
+       struct perf_evsel *pos;
+       u64 nr_samples = 0;
+       /*
+        * Count number of histogram entries to use when showing progress,
+        * reusing nr_samples variable.
+        */
+       list_for_each_entry(pos, &rep->session->evlist->entries, node)
+               nr_samples += pos->hists.nr_entries;
+
+       ui_progress__init(&prog, nr_samples, "Merging related events...");
+       /*
+        * Count total number of samples, will be used to check if this
+        * session had any.
+        */
+       nr_samples = 0;
+
+       list_for_each_entry(pos, &rep->session->evlist->entries, node) {
+               struct hists *hists = &pos->hists;
+
+               if (pos->idx == 0)
+                       hists->symbol_filter_str = rep->symbol_filter_str;
+
+               hists__collapse_resort(hists, &prog);
+               nr_samples += hists->stats.nr_events[PERF_RECORD_SAMPLE];
+
+               /* Non-group events are considered as leader */
+               if (symbol_conf.event_group &&
+                   !perf_evsel__is_group_leader(pos)) {
+                       struct hists *leader_hists = &pos->leader->hists;
+
+                       hists__match(leader_hists, hists);
+                       hists__link(leader_hists, hists);
+               }
+       }
+
+       ui_progress__finish();
+
+       return nr_samples;
+}
+
 static int __cmd_report(struct report *rep)
 {
-       int ret = -EINVAL;
+       int ret;
        u64 nr_samples;
        struct perf_session *session = rep->session;
        struct perf_evsel *pos;
-       struct ui_progress prog;
        struct perf_data_file *file = session->file;
 
        signal(SIGINT, sig_handler);
@@ -530,32 +572,7 @@ static int __cmd_report(struct report *rep)
                }
        }
 
-       nr_samples = 0;
-       list_for_each_entry(pos, &session->evlist->entries, node)
-               nr_samples += pos->hists.nr_entries;
-
-       ui_progress__init(&prog, nr_samples, "Merging related events...");
-
-       nr_samples = 0;
-       list_for_each_entry(pos, &session->evlist->entries, node) {
-               struct hists *hists = &pos->hists;
-
-               if (pos->idx == 0)
-                       hists->symbol_filter_str = rep->symbol_filter_str;
-
-               hists__collapse_resort(hists, &prog);
-               nr_samples += hists->stats.nr_events[PERF_RECORD_SAMPLE];
-
-               /* Non-group events are considered as leader */
-               if (symbol_conf.event_group &&
-                   !perf_evsel__is_group_leader(pos)) {
-                       struct hists *leader_hists = &pos->leader->hists;
-
-                       hists__match(leader_hists, hists);
-                       hists__link(leader_hists, hists);
-               }
-       }
-       ui_progress__finish();
+       nr_samples = report__collapse_hists(rep);
 
        if (session_done())
                return 0;