|
@@ -456,26 +456,30 @@ static void hists__precompute(struct hists *hists)
|
|
|
next = rb_first(root);
|
|
|
while (next != NULL) {
|
|
|
struct hist_entry *he, *pair;
|
|
|
+ struct data__file *d;
|
|
|
+ int i;
|
|
|
|
|
|
he = rb_entry(next, struct hist_entry, rb_node_in);
|
|
|
next = rb_next(&he->rb_node_in);
|
|
|
|
|
|
- pair = get_pair_data(he, &data__files[sort_compute]);
|
|
|
- if (!pair)
|
|
|
- continue;
|
|
|
+ data__for_each_file_new(i, d) {
|
|
|
+ pair = get_pair_data(he, d);
|
|
|
+ if (!pair)
|
|
|
+ continue;
|
|
|
|
|
|
- switch (compute) {
|
|
|
- case COMPUTE_DELTA:
|
|
|
- compute_delta(he, pair);
|
|
|
- break;
|
|
|
- case COMPUTE_RATIO:
|
|
|
- compute_ratio(he, pair);
|
|
|
- break;
|
|
|
- case COMPUTE_WEIGHTED_DIFF:
|
|
|
- compute_wdiff(he, pair);
|
|
|
- break;
|
|
|
- default:
|
|
|
- BUG_ON(1);
|
|
|
+ switch (compute) {
|
|
|
+ case COMPUTE_DELTA:
|
|
|
+ compute_delta(he, pair);
|
|
|
+ break;
|
|
|
+ case COMPUTE_RATIO:
|
|
|
+ compute_ratio(he, pair);
|
|
|
+ break;
|
|
|
+ case COMPUTE_WEIGHTED_DIFF:
|
|
|
+ compute_wdiff(he, pair);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ BUG_ON(1);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -525,7 +529,7 @@ __hist_entry__cmp_compute(struct hist_entry *left, struct hist_entry *right,
|
|
|
|
|
|
static int64_t
|
|
|
hist_entry__cmp_compute(struct hist_entry *left, struct hist_entry *right,
|
|
|
- int c)
|
|
|
+ int c, int sort_idx)
|
|
|
{
|
|
|
bool pairs_left = hist_entry__has_pairs(left);
|
|
|
bool pairs_right = hist_entry__has_pairs(right);
|
|
@@ -537,8 +541,8 @@ hist_entry__cmp_compute(struct hist_entry *left, struct hist_entry *right,
|
|
|
if (!pairs_left || !pairs_right)
|
|
|
return pairs_left ? -1 : 1;
|
|
|
|
|
|
- p_left = get_pair_data(left, &data__files[sort_compute]);
|
|
|
- p_right = get_pair_data(right, &data__files[sort_compute]);
|
|
|
+ p_left = get_pair_data(left, &data__files[sort_idx]);
|
|
|
+ p_right = get_pair_data(right, &data__files[sort_idx]);
|
|
|
|
|
|
if (!p_left && !p_right)
|
|
|
return 0;
|
|
@@ -565,33 +569,36 @@ static int64_t
|
|
|
hist_entry__cmp_baseline(struct perf_hpp_fmt *fmt __maybe_unused,
|
|
|
struct hist_entry *left, struct hist_entry *right)
|
|
|
{
|
|
|
- if (sort_compute)
|
|
|
- return 0;
|
|
|
-
|
|
|
if (left->stat.period == right->stat.period)
|
|
|
return 0;
|
|
|
return left->stat.period > right->stat.period ? 1 : -1;
|
|
|
}
|
|
|
|
|
|
static int64_t
|
|
|
-hist_entry__cmp_delta(struct perf_hpp_fmt *fmt __maybe_unused,
|
|
|
+hist_entry__cmp_delta(struct perf_hpp_fmt *fmt,
|
|
|
struct hist_entry *left, struct hist_entry *right)
|
|
|
{
|
|
|
- return hist_entry__cmp_compute(right, left, COMPUTE_DELTA);
|
|
|
+ struct data__file *d = fmt_to_data_file(fmt);
|
|
|
+
|
|
|
+ return hist_entry__cmp_compute(right, left, COMPUTE_DELTA, d->idx);
|
|
|
}
|
|
|
|
|
|
static int64_t
|
|
|
-hist_entry__cmp_ratio(struct perf_hpp_fmt *fmt __maybe_unused,
|
|
|
+hist_entry__cmp_ratio(struct perf_hpp_fmt *fmt,
|
|
|
struct hist_entry *left, struct hist_entry *right)
|
|
|
{
|
|
|
- return hist_entry__cmp_compute(right, left, COMPUTE_RATIO);
|
|
|
+ struct data__file *d = fmt_to_data_file(fmt);
|
|
|
+
|
|
|
+ return hist_entry__cmp_compute(right, left, COMPUTE_RATIO, d->idx);
|
|
|
}
|
|
|
|
|
|
static int64_t
|
|
|
-hist_entry__cmp_wdiff(struct perf_hpp_fmt *fmt __maybe_unused,
|
|
|
+hist_entry__cmp_wdiff(struct perf_hpp_fmt *fmt,
|
|
|
struct hist_entry *left, struct hist_entry *right)
|
|
|
{
|
|
|
- return hist_entry__cmp_compute(right, left, COMPUTE_WEIGHTED_DIFF);
|
|
|
+ struct data__file *d = fmt_to_data_file(fmt);
|
|
|
+
|
|
|
+ return hist_entry__cmp_compute(right, left, COMPUTE_WEIGHTED_DIFF, d->idx);
|
|
|
}
|
|
|
|
|
|
static void hists__process(struct hists *hists)
|
|
@@ -599,9 +606,7 @@ static void hists__process(struct hists *hists)
|
|
|
if (show_baseline_only)
|
|
|
hists__baseline_only(hists);
|
|
|
|
|
|
- if (sort_compute)
|
|
|
- hists__precompute(hists);
|
|
|
-
|
|
|
+ hists__precompute(hists);
|
|
|
hists__output_resort(hists, NULL);
|
|
|
|
|
|
hists__fprintf(hists, true, 0, 0, 0, stdout);
|