diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-05-10 12:04:11 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-05-10 12:13:49 -0400 |
commit | 1c02c4d2e92f2097f1bba63ec71560b0e05a7f36 (patch) | |
tree | ad2a722931398ce3cd3ae850c4cfa148558a52ea /tools/perf/builtin-annotate.c | |
parent | d118f8ba6ac2af2bf11d40cba657c813f0f39ca2 (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.c | 17 |
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 | ||
99 | static int perf_session__add_hist_entry(struct perf_session *self, | 99 | static 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 | ||
517 | static void perf_session__find_annotations(struct perf_session *self) | 516 | static 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); |
576 | out_delete: | 575 | out_delete: |
577 | perf_session__delete(session); | 576 | perf_session__delete(session); |
578 | 577 | ||