perf tools: Use hpp formats to sort final output
Convert output sorting function to use ->sort hpp functions. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Ingo Molnar <mingo@kernel.org> Link: http://lkml.kernel.org/r/1400480762-22852-6-git-send-email-namhyung@kernel.org Signed-off-by: Jiri Olsa <jolsa@kernel.org>
This commit is contained in:
parent
f156d84e42
commit
043ca389a3
1 changed files with 8 additions and 54 deletions
|
@ -564,64 +564,18 @@ void hists__collapse_resort(struct hists *hists, struct ui_progress *prog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static int hist_entry__sort(struct hist_entry *a, struct hist_entry *b)
|
||||||
* reverse the map, sort on period.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int period_cmp(u64 period_a, u64 period_b)
|
|
||||||
{
|
{
|
||||||
if (period_a > period_b)
|
struct perf_hpp_fmt *fmt;
|
||||||
return 1;
|
int64_t cmp = 0;
|
||||||
if (period_a < period_b)
|
|
||||||
return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hist_entry__sort_on_period(struct hist_entry *a,
|
perf_hpp__for_each_format(fmt) {
|
||||||
struct hist_entry *b)
|
cmp = fmt->sort(a, b);
|
||||||
{
|
if (cmp)
|
||||||
int ret;
|
|
||||||
int i, nr_members;
|
|
||||||
struct perf_evsel *evsel;
|
|
||||||
struct hist_entry *pair;
|
|
||||||
u64 *periods_a, *periods_b;
|
|
||||||
|
|
||||||
ret = period_cmp(a->stat.period, b->stat.period);
|
|
||||||
if (ret || !symbol_conf.event_group)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
evsel = hists_to_evsel(a->hists);
|
|
||||||
nr_members = evsel->nr_members;
|
|
||||||
if (nr_members <= 1)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
periods_a = zalloc(sizeof(periods_a) * nr_members);
|
|
||||||
periods_b = zalloc(sizeof(periods_b) * nr_members);
|
|
||||||
|
|
||||||
if (!periods_a || !periods_b)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
list_for_each_entry(pair, &a->pairs.head, pairs.node) {
|
|
||||||
evsel = hists_to_evsel(pair->hists);
|
|
||||||
periods_a[perf_evsel__group_idx(evsel)] = pair->stat.period;
|
|
||||||
}
|
|
||||||
|
|
||||||
list_for_each_entry(pair, &b->pairs.head, pairs.node) {
|
|
||||||
evsel = hists_to_evsel(pair->hists);
|
|
||||||
periods_b[perf_evsel__group_idx(evsel)] = pair->stat.period;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 1; i < nr_members; i++) {
|
|
||||||
ret = period_cmp(periods_a[i], periods_b[i]);
|
|
||||||
if (ret)
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
return cmp;
|
||||||
free(periods_a);
|
|
||||||
free(periods_b);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hists__reset_filter_stats(struct hists *hists)
|
static void hists__reset_filter_stats(struct hists *hists)
|
||||||
|
@ -669,7 +623,7 @@ static void __hists__insert_output_entry(struct rb_root *entries,
|
||||||
parent = *p;
|
parent = *p;
|
||||||
iter = rb_entry(parent, struct hist_entry, rb_node);
|
iter = rb_entry(parent, struct hist_entry, rb_node);
|
||||||
|
|
||||||
if (hist_entry__sort_on_period(he, iter) > 0)
|
if (hist_entry__sort(he, iter) > 0)
|
||||||
p = &(*p)->rb_left;
|
p = &(*p)->rb_left;
|
||||||
else
|
else
|
||||||
p = &(*p)->rb_right;
|
p = &(*p)->rb_right;
|
||||||
|
|
Loading…
Add table
Reference in a new issue