|
@@ -130,7 +130,7 @@ static void collapse__insert_entry(struct rb_root *root, struct hist_entry *he)
|
|
|
rb_insert_color(&he->rb_node, root);
|
|
|
}
|
|
|
|
|
|
-void perf_session__collapse_resort(struct perf_session *self)
|
|
|
+void perf_session__collapse_resort(struct rb_root *hists)
|
|
|
{
|
|
|
struct rb_root tmp;
|
|
|
struct rb_node *next;
|
|
@@ -140,17 +140,17 @@ void perf_session__collapse_resort(struct perf_session *self)
|
|
|
return;
|
|
|
|
|
|
tmp = RB_ROOT;
|
|
|
- next = rb_first(&self->hists);
|
|
|
+ next = rb_first(hists);
|
|
|
|
|
|
while (next) {
|
|
|
n = rb_entry(next, struct hist_entry, rb_node);
|
|
|
next = rb_next(&n->rb_node);
|
|
|
|
|
|
- rb_erase(&n->rb_node, &self->hists);
|
|
|
+ rb_erase(&n->rb_node, hists);
|
|
|
collapse__insert_entry(&tmp, n);
|
|
|
}
|
|
|
|
|
|
- self->hists = tmp;
|
|
|
+ *hists = tmp;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -183,7 +183,7 @@ static void perf_session__insert_output_hist_entry(struct rb_root *root,
|
|
|
rb_insert_color(&he->rb_node, root);
|
|
|
}
|
|
|
|
|
|
-void perf_session__output_resort(struct perf_session *self, u64 total_samples)
|
|
|
+void perf_session__output_resort(struct rb_root *hists, u64 total_samples)
|
|
|
{
|
|
|
struct rb_root tmp;
|
|
|
struct rb_node *next;
|
|
@@ -194,18 +194,18 @@ void perf_session__output_resort(struct perf_session *self, u64 total_samples)
|
|
|
total_samples * (callchain_param.min_percent / 100);
|
|
|
|
|
|
tmp = RB_ROOT;
|
|
|
- next = rb_first(&self->hists);
|
|
|
+ next = rb_first(hists);
|
|
|
|
|
|
while (next) {
|
|
|
n = rb_entry(next, struct hist_entry, rb_node);
|
|
|
next = rb_next(&n->rb_node);
|
|
|
|
|
|
- rb_erase(&n->rb_node, &self->hists);
|
|
|
+ rb_erase(&n->rb_node, hists);
|
|
|
perf_session__insert_output_hist_entry(&tmp, n,
|
|
|
min_callchain_hits);
|
|
|
}
|
|
|
|
|
|
- self->hists = tmp;
|
|
|
+ *hists = tmp;
|
|
|
}
|
|
|
|
|
|
static size_t callchain__fprintf_left_margin(FILE *fp, int left_margin)
|
|
@@ -456,10 +456,10 @@ static size_t hist_entry_callchain__fprintf(FILE *fp, struct hist_entry *self,
|
|
|
}
|
|
|
|
|
|
static size_t hist_entry__fprintf(struct hist_entry *self,
|
|
|
- struct perf_session *session,
|
|
|
struct perf_session *pair_session,
|
|
|
bool show_displacement,
|
|
|
- long displacement, FILE *fp)
|
|
|
+ long displacement, FILE *fp,
|
|
|
+ u64 session_total)
|
|
|
{
|
|
|
struct sort_entry *se;
|
|
|
u64 count, total;
|
|
@@ -474,7 +474,7 @@ static size_t hist_entry__fprintf(struct hist_entry *self,
|
|
|
total = pair_session->events_stats.total;
|
|
|
} else {
|
|
|
count = self->count;
|
|
|
- total = session->events_stats.total;
|
|
|
+ total = session_total;
|
|
|
}
|
|
|
|
|
|
if (total)
|
|
@@ -496,8 +496,8 @@ static size_t hist_entry__fprintf(struct hist_entry *self,
|
|
|
|
|
|
if (total > 0)
|
|
|
old_percent = (count * 100.0) / total;
|
|
|
- if (session->events_stats.total > 0)
|
|
|
- new_percent = (self->count * 100.0) / session->events_stats.total;
|
|
|
+ if (session_total > 0)
|
|
|
+ new_percent = (self->count * 100.0) / session_total;
|
|
|
|
|
|
diff = new_percent - old_percent;
|
|
|
|
|
@@ -544,16 +544,17 @@ static size_t hist_entry__fprintf(struct hist_entry *self,
|
|
|
left_margin -= thread__comm_len(self->thread);
|
|
|
}
|
|
|
|
|
|
- hist_entry_callchain__fprintf(fp, self, session->events_stats.total,
|
|
|
+ hist_entry_callchain__fprintf(fp, self, session_total,
|
|
|
left_margin);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-size_t perf_session__fprintf_hists(struct perf_session *self,
|
|
|
+size_t perf_session__fprintf_hists(struct rb_root *hists,
|
|
|
struct perf_session *pair,
|
|
|
- bool show_displacement, FILE *fp)
|
|
|
+ bool show_displacement, FILE *fp,
|
|
|
+ u64 session_total)
|
|
|
{
|
|
|
struct sort_entry *se;
|
|
|
struct rb_node *nd;
|
|
@@ -641,7 +642,7 @@ size_t perf_session__fprintf_hists(struct perf_session *self,
|
|
|
fprintf(fp, "\n#\n");
|
|
|
|
|
|
print_entries:
|
|
|
- for (nd = rb_first(&self->hists); nd; nd = rb_next(nd)) {
|
|
|
+ for (nd = rb_first(hists); nd; nd = rb_next(nd)) {
|
|
|
struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);
|
|
|
|
|
|
if (show_displacement) {
|
|
@@ -652,8 +653,8 @@ print_entries:
|
|
|
displacement = 0;
|
|
|
++position;
|
|
|
}
|
|
|
- ret += hist_entry__fprintf(h, self, pair, show_displacement,
|
|
|
- displacement, fp);
|
|
|
+ ret += hist_entry__fprintf(h, pair, show_displacement,
|
|
|
+ displacement, fp, session_total);
|
|
|
}
|
|
|
|
|
|
free(rem_sq_bracket);
|