|
@@ -414,19 +414,30 @@ static void insert_hist_entry_by_compute(struct rb_root *root,
|
|
|
|
|
|
static void hists__compute_resort(struct hists *hists)
|
|
|
{
|
|
|
- struct rb_root tmp = RB_ROOT;
|
|
|
- struct rb_node *next = rb_first(&hists->entries);
|
|
|
+ struct rb_root *root;
|
|
|
+ struct rb_node *next;
|
|
|
+
|
|
|
+ if (sort__need_collapse)
|
|
|
+ root = &hists->entries_collapsed;
|
|
|
+ else
|
|
|
+ root = hists->entries_in;
|
|
|
+
|
|
|
+ hists->entries = RB_ROOT;
|
|
|
+ next = rb_first(root);
|
|
|
+
|
|
|
+ hists->nr_entries = 0;
|
|
|
+ hists->stats.total_period = 0;
|
|
|
+ hists__reset_col_len(hists);
|
|
|
|
|
|
while (next != NULL) {
|
|
|
- struct hist_entry *he = rb_entry(next, struct hist_entry, rb_node);
|
|
|
+ struct hist_entry *he;
|
|
|
|
|
|
- next = rb_next(&he->rb_node);
|
|
|
+ he = rb_entry(next, struct hist_entry, rb_node_in);
|
|
|
+ next = rb_next(&he->rb_node_in);
|
|
|
|
|
|
- rb_erase(&he->rb_node, &hists->entries);
|
|
|
- insert_hist_entry_by_compute(&tmp, he, compute);
|
|
|
+ insert_hist_entry_by_compute(&hists->entries, he, compute);
|
|
|
+ hists__inc_nr_entries(hists, he);
|
|
|
}
|
|
|
-
|
|
|
- hists->entries = tmp;
|
|
|
}
|
|
|
|
|
|
static void hists__process(struct hists *old, struct hists *new)
|
|
@@ -438,11 +449,11 @@ static void hists__process(struct hists *old, struct hists *new)
|
|
|
else
|
|
|
hists__link(new, old);
|
|
|
|
|
|
- hists__output_resort(new);
|
|
|
-
|
|
|
if (sort_compute) {
|
|
|
hists__precompute(new);
|
|
|
hists__compute_resort(new);
|
|
|
+ } else {
|
|
|
+ hists__output_resort(new);
|
|
|
}
|
|
|
|
|
|
hists__fprintf(new, true, 0, 0, stdout);
|