aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-annotate.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2010-05-10 12:04:11 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2010-05-10 12:13:49 -0400
commit1c02c4d2e92f2097f1bba63ec71560b0e05a7f36 (patch)
treead2a722931398ce3cd3ae850c4cfa148558a52ea /tools/perf/builtin-annotate.c
parentd118f8ba6ac2af2bf11d40cba657c813f0f39ca2 (diff)
perf hist: Introduce hists class and move lots of methods to it
In cbbc79a we introduced support for multiple events by introducing a new "event_stat_id" struct and then made several perf_session methods receive a point to it instead of a pointer to perf_session, and kept the event_stats and hists rb_tree in perf_session. While working on the new newt based browser, I realised that it would be better to introduce a new class, "hists" (short for "histograms"), renaming the "event_stat_id" struct and the perf_session methods that were really "hists" methods, as they manipulate only struct hists members, not touching anything in the other perf_session members. Other optimizations, such as calculating the maximum lenght of a symbol name present in an hists instance will be possible as we add them, avoiding a re-traversal just for finding that information. The rationale for the name "hists" to replace "event_stat_id" is that we may have multiple sets of hists for the same event_stat id, as, for instance, the 'perf diff' tool has, so event stat id is not what characterizes what this struct and the functions that manipulate it do. Cc: Eric B Munson <ebmunson@us.ibm.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Tom Zanussi <tzanussi@gmail.com> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-annotate.c')
-rw-r--r--tools/perf/builtin-annotate.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index c7ac45a59ed5..3940964161b3 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -96,8 +96,7 @@ static int annotate__hist_hit(struct hist_entry *he, u64 ip)
96 return 0; 96 return 0;
97} 97}
98 98
99static int perf_session__add_hist_entry(struct perf_session *self, 99static int hists__add_entry(struct hists *self, struct addr_location *al)
100 struct addr_location *al)
101{ 100{
102 struct hist_entry *he; 101 struct hist_entry *he;
103 102
@@ -112,7 +111,7 @@ static int perf_session__add_hist_entry(struct perf_session *self,
112 return 0; 111 return 0;
113 } 112 }
114 113
115 he = __perf_session__add_hist_entry(&self->hists, al, NULL, 1); 114 he = __hists__add_entry(self, al, NULL, 1);
116 if (he == NULL) 115 if (he == NULL)
117 return -ENOMEM; 116 return -ENOMEM;
118 117
@@ -132,7 +131,7 @@ static int process_sample_event(event_t *event, struct perf_session *session)
132 return -1; 131 return -1;
133 } 132 }
134 133
135 if (!al.filtered && perf_session__add_hist_entry(session, &al)) { 134 if (!al.filtered && hists__add_entry(&session->hists, &al)) {
136 pr_warning("problem incrementing symbol count, " 135 pr_warning("problem incrementing symbol count, "
137 "skipping event\n"); 136 "skipping event\n");
138 return -1; 137 return -1;
@@ -514,11 +513,11 @@ static void annotate_sym(struct hist_entry *he)
514 free_source_line(he, len); 513 free_source_line(he, len);
515} 514}
516 515
517static void perf_session__find_annotations(struct perf_session *self) 516static void hists__find_annotations(struct hists *self)
518{ 517{
519 struct rb_node *nd; 518 struct rb_node *nd;
520 519
521 for (nd = rb_first(&self->hists); nd; nd = rb_next(nd)) { 520 for (nd = rb_first(&self->entries); nd; nd = rb_next(nd)) {
522 struct hist_entry *he = rb_entry(nd, struct hist_entry, rb_node); 521 struct hist_entry *he = rb_entry(nd, struct hist_entry, rb_node);
523 struct sym_priv *priv; 522 struct sym_priv *priv;
524 523
@@ -570,9 +569,9 @@ static int __cmd_annotate(void)
570 if (verbose > 2) 569 if (verbose > 2)
571 perf_session__fprintf_dsos(session, stdout); 570 perf_session__fprintf_dsos(session, stdout);
572 571
573 perf_session__collapse_resort(&session->hists); 572 hists__collapse_resort(&session->hists);
574 perf_session__output_resort(&session->hists, session->event_total[0]); 573 hists__output_resort(&session->hists);
575 perf_session__find_annotations(session); 574 hists__find_annotations(&session->hists);
576out_delete: 575out_delete:
577 perf_session__delete(session); 576 perf_session__delete(session);
578 577