aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-diff.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2012-10-25 12:42:45 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2012-11-08 15:43:09 -0500
commitb821c7325354c589ccc9611cf9e6b0d7490ed6a6 (patch)
tree103deb4210a3187c52597def760435502cdc907e /tools/perf/builtin-diff.c
parentff6f7778a66edc033044a6baa2459ce79519e571 (diff)
perf diff: Start moving to support matching more than two hists
We want to match more than two hists, so that we can match more than two perf.data files and moreover, match hist_entries (buckets) in multiple events in a group. So the "baseline"/"leader" will instead of a ->pair pointer, use a list_head, that will link to the pairs and hists__match use it. Following that perf_evlist__link will link the hists in its evsel groups. 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@gmail.com> 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-2kbmzepoi544ygj9godseqpv@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-diff.c')
-rw-r--r--tools/perf/builtin-diff.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c
index 380683de1df3..8a9db38e562f 100644
--- a/tools/perf/builtin-diff.c
+++ b/tools/perf/builtin-diff.c
@@ -154,7 +154,7 @@ static double get_period_percent(struct hist_entry *he, u64 period)
154 154
155double perf_diff__compute_delta(struct hist_entry *he) 155double perf_diff__compute_delta(struct hist_entry *he)
156{ 156{
157 struct hist_entry *pair = he->pair; 157 struct hist_entry *pair = hist_entry__next_pair(he);
158 double new_percent = get_period_percent(he, he->stat.period); 158 double new_percent = get_period_percent(he, he->stat.period);
159 double old_percent = pair ? get_period_percent(pair, pair->stat.period) : 0.0; 159 double old_percent = pair ? get_period_percent(pair, pair->stat.period) : 0.0;
160 160
@@ -165,7 +165,7 @@ double perf_diff__compute_delta(struct hist_entry *he)
165 165
166double perf_diff__compute_ratio(struct hist_entry *he) 166double perf_diff__compute_ratio(struct hist_entry *he)
167{ 167{
168 struct hist_entry *pair = he->pair; 168 struct hist_entry *pair = hist_entry__next_pair(he);
169 double new_period = he->stat.period; 169 double new_period = he->stat.period;
170 double old_period = pair ? pair->stat.period : 0; 170 double old_period = pair ? pair->stat.period : 0;
171 171
@@ -176,7 +176,7 @@ double perf_diff__compute_ratio(struct hist_entry *he)
176 176
177s64 perf_diff__compute_wdiff(struct hist_entry *he) 177s64 perf_diff__compute_wdiff(struct hist_entry *he)
178{ 178{
179 struct hist_entry *pair = he->pair; 179 struct hist_entry *pair = hist_entry__next_pair(he);
180 u64 new_period = he->stat.period; 180 u64 new_period = he->stat.period;
181 u64 old_period = pair ? pair->stat.period : 0; 181 u64 old_period = pair ? pair->stat.period : 0;
182 182
@@ -193,7 +193,7 @@ s64 perf_diff__compute_wdiff(struct hist_entry *he)
193 193
194static int formula_delta(struct hist_entry *he, char *buf, size_t size) 194static int formula_delta(struct hist_entry *he, char *buf, size_t size)
195{ 195{
196 struct hist_entry *pair = he->pair; 196 struct hist_entry *pair = hist_entry__next_pair(he);
197 197
198 if (!pair) 198 if (!pair)
199 return -1; 199 return -1;
@@ -207,7 +207,7 @@ static int formula_delta(struct hist_entry *he, char *buf, size_t size)
207 207
208static int formula_ratio(struct hist_entry *he, char *buf, size_t size) 208static int formula_ratio(struct hist_entry *he, char *buf, size_t size)
209{ 209{
210 struct hist_entry *pair = he->pair; 210 struct hist_entry *pair = hist_entry__next_pair(he);
211 double new_period = he->stat.period; 211 double new_period = he->stat.period;
212 double old_period = pair ? pair->stat.period : 0; 212 double old_period = pair ? pair->stat.period : 0;
213 213
@@ -219,7 +219,7 @@ static int formula_ratio(struct hist_entry *he, char *buf, size_t size)
219 219
220static int formula_wdiff(struct hist_entry *he, char *buf, size_t size) 220static int formula_wdiff(struct hist_entry *he, char *buf, size_t size)
221{ 221{
222 struct hist_entry *pair = he->pair; 222 struct hist_entry *pair = hist_entry__next_pair(he);
223 u64 new_period = he->stat.period; 223 u64 new_period = he->stat.period;
224 u64 old_period = pair ? pair->stat.period : 0; 224 u64 old_period = pair ? pair->stat.period : 0;
225 225
@@ -359,8 +359,11 @@ static void hists__match(struct hists *older, struct hists *newer)
359 struct rb_node *nd; 359 struct rb_node *nd;
360 360
361 for (nd = rb_first(&newer->entries); nd; nd = rb_next(nd)) { 361 for (nd = rb_first(&newer->entries); nd; nd = rb_next(nd)) {
362 struct hist_entry *pos = rb_entry(nd, struct hist_entry, rb_node); 362 struct hist_entry *pos = rb_entry(nd, struct hist_entry, rb_node),
363 pos->pair = hists__find_entry(older, pos); 363 *pair = hists__find_entry(older, pos);
364
365 if (pair)
366 hist__entry_add_pair(pos, pair);
364 } 367 }
365} 368}
366 369
@@ -402,7 +405,7 @@ static void hists__baseline_only(struct hists *hists)
402 struct hist_entry *he = rb_entry(next, struct hist_entry, rb_node); 405 struct hist_entry *he = rb_entry(next, struct hist_entry, rb_node);
403 406
404 next = rb_next(&he->rb_node); 407 next = rb_next(&he->rb_node);
405 if (!he->pair) { 408 if (!hist_entry__next_pair(he)) {
406 rb_erase(&he->rb_node, &hists->entries); 409 rb_erase(&he->rb_node, &hists->entries);
407 hist_entry__free(he); 410 hist_entry__free(he);
408 } 411 }