perf hists: Introduce perf_evsel__output_resort function
Adding evsel specific function to sort hists_evsel based hists. The hists__output_resort can be now used to sort common hists object. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1453109064-1026-3-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
01441af5df
commit
452ce03b1e
8 changed files with 23 additions and 16 deletions
|
@ -245,7 +245,7 @@ static int __cmd_annotate(struct perf_annotate *ann)
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
/* Don't sort callchain */
|
/* Don't sort callchain */
|
||||||
perf_evsel__reset_sample_bit(pos, CALLCHAIN);
|
perf_evsel__reset_sample_bit(pos, CALLCHAIN);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(pos, NULL);
|
||||||
|
|
||||||
if (symbol_conf.event_group &&
|
if (symbol_conf.event_group &&
|
||||||
!perf_evsel__is_group_leader(pos))
|
!perf_evsel__is_group_leader(pos))
|
||||||
|
|
|
@ -507,7 +507,7 @@ static void report__output_resort(struct report *rep)
|
||||||
ui_progress__init(&prog, rep->nr_entries, "Sorting events for output...");
|
ui_progress__init(&prog, rep->nr_entries, "Sorting events for output...");
|
||||||
|
|
||||||
evlist__for_each(rep->session->evlist, pos)
|
evlist__for_each(rep->session->evlist, pos)
|
||||||
hists__output_resort(evsel__hists(pos), &prog);
|
perf_evsel__output_resort(pos, &prog);
|
||||||
|
|
||||||
ui_progress__finish();
|
ui_progress__finish();
|
||||||
}
|
}
|
||||||
|
|
|
@ -252,7 +252,8 @@ static void perf_top__print_sym_table(struct perf_top *top)
|
||||||
char bf[160];
|
char bf[160];
|
||||||
int printed = 0;
|
int printed = 0;
|
||||||
const int win_width = top->winsize.ws_col - 1;
|
const int win_width = top->winsize.ws_col - 1;
|
||||||
struct hists *hists = evsel__hists(top->sym_evsel);
|
struct perf_evsel *evsel = top->sym_evsel;
|
||||||
|
struct hists *hists = evsel__hists(evsel);
|
||||||
|
|
||||||
puts(CONSOLE_CLEAR);
|
puts(CONSOLE_CLEAR);
|
||||||
|
|
||||||
|
@ -288,7 +289,7 @@ static void perf_top__print_sym_table(struct perf_top *top)
|
||||||
}
|
}
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
|
|
||||||
hists__output_recalc_col_len(hists, top->print_entries - printed);
|
hists__output_recalc_col_len(hists, top->print_entries - printed);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
@ -540,6 +541,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c)
|
||||||
static void perf_top__sort_new_samples(void *arg)
|
static void perf_top__sort_new_samples(void *arg)
|
||||||
{
|
{
|
||||||
struct perf_top *t = arg;
|
struct perf_top *t = arg;
|
||||||
|
struct perf_evsel *evsel = t->sym_evsel;
|
||||||
struct hists *hists;
|
struct hists *hists;
|
||||||
|
|
||||||
perf_top__reset_sample_counters(t);
|
perf_top__reset_sample_counters(t);
|
||||||
|
@ -547,7 +549,7 @@ static void perf_top__sort_new_samples(void *arg)
|
||||||
if (t->evlist->selected != NULL)
|
if (t->evlist->selected != NULL)
|
||||||
t->sym_evsel = t->evlist->selected;
|
t->sym_evsel = t->evlist->selected;
|
||||||
|
|
||||||
hists = evsel__hists(t->sym_evsel);
|
hists = evsel__hists(evsel);
|
||||||
|
|
||||||
if (t->evlist->enabled) {
|
if (t->evlist->enabled) {
|
||||||
if (t->zero) {
|
if (t->zero) {
|
||||||
|
@ -559,7 +561,7 @@ static void perf_top__sort_new_samples(void *arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *display_thread_tui(void *arg)
|
static void *display_thread_tui(void *arg)
|
||||||
|
|
|
@ -191,7 +191,7 @@ static int do_test(struct hists *hists, struct result *expected, size_t nr_expec
|
||||||
* function since TEST_ASSERT_VAL() returns in case of failure.
|
* function since TEST_ASSERT_VAL() returns in case of failure.
|
||||||
*/
|
*/
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(hists_to_evsel(hists), NULL);
|
||||||
|
|
||||||
if (verbose > 2) {
|
if (verbose > 2) {
|
||||||
pr_info("use callchain: %d, cumulate callchain: %d\n",
|
pr_info("use callchain: %d, cumulate callchain: %d\n",
|
||||||
|
|
|
@ -145,7 +145,7 @@ int test__hists_filter(int subtest __maybe_unused)
|
||||||
struct hists *hists = evsel__hists(evsel);
|
struct hists *hists = evsel__hists(evsel);
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
|
|
||||||
if (verbose > 2) {
|
if (verbose > 2) {
|
||||||
pr_info("Normal histogram\n");
|
pr_info("Normal histogram\n");
|
||||||
|
|
|
@ -156,7 +156,7 @@ static int test1(struct perf_evsel *evsel, struct machine *machine)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
|
|
||||||
if (verbose > 2) {
|
if (verbose > 2) {
|
||||||
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
||||||
|
@ -256,7 +256,7 @@ static int test2(struct perf_evsel *evsel, struct machine *machine)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
|
|
||||||
if (verbose > 2) {
|
if (verbose > 2) {
|
||||||
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
||||||
|
@ -310,7 +310,7 @@ static int test3(struct perf_evsel *evsel, struct machine *machine)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
|
|
||||||
if (verbose > 2) {
|
if (verbose > 2) {
|
||||||
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
||||||
|
@ -388,7 +388,7 @@ static int test4(struct perf_evsel *evsel, struct machine *machine)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
|
|
||||||
if (verbose > 2) {
|
if (verbose > 2) {
|
||||||
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
||||||
|
@ -491,7 +491,7 @@ static int test5(struct perf_evsel *evsel, struct machine *machine)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
hists__collapse_resort(hists, NULL);
|
hists__collapse_resort(hists, NULL);
|
||||||
hists__output_resort(hists, NULL);
|
perf_evsel__output_resort(evsel, NULL);
|
||||||
|
|
||||||
if (verbose > 2) {
|
if (verbose > 2) {
|
||||||
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
pr_info("[fields = %s, sort = %s]\n", field_order, sort_order);
|
||||||
|
|
|
@ -1233,9 +1233,8 @@ static void output_resort(struct hists *hists, struct ui_progress *prog,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void hists__output_resort(struct hists *hists, struct ui_progress *prog)
|
void perf_evsel__output_resort(struct perf_evsel *evsel, struct ui_progress *prog)
|
||||||
{
|
{
|
||||||
struct perf_evsel *evsel = hists_to_evsel(hists);
|
|
||||||
bool use_callchain;
|
bool use_callchain;
|
||||||
|
|
||||||
if (evsel && symbol_conf.use_callchain && !symbol_conf.show_ref_callgraph)
|
if (evsel && symbol_conf.use_callchain && !symbol_conf.show_ref_callgraph)
|
||||||
|
@ -1243,7 +1242,12 @@ void hists__output_resort(struct hists *hists, struct ui_progress *prog)
|
||||||
else
|
else
|
||||||
use_callchain = symbol_conf.use_callchain;
|
use_callchain = symbol_conf.use_callchain;
|
||||||
|
|
||||||
output_resort(hists, prog, use_callchain);
|
output_resort(evsel__hists(evsel), prog, use_callchain);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hists__output_resort(struct hists *hists, struct ui_progress *prog)
|
||||||
|
{
|
||||||
|
output_resort(hists, prog, symbol_conf.use_callchain);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hists__remove_entry_filter(struct hists *hists, struct hist_entry *h,
|
static void hists__remove_entry_filter(struct hists *hists, struct hist_entry *h,
|
||||||
|
|
|
@ -128,6 +128,7 @@ int hist_entry__sort_snprintf(struct hist_entry *he, char *bf, size_t size,
|
||||||
struct hists *hists);
|
struct hists *hists);
|
||||||
void hist_entry__delete(struct hist_entry *he);
|
void hist_entry__delete(struct hist_entry *he);
|
||||||
|
|
||||||
|
void perf_evsel__output_resort(struct perf_evsel *evsel, struct ui_progress *prog);
|
||||||
void hists__output_resort(struct hists *hists, struct ui_progress *prog);
|
void hists__output_resort(struct hists *hists, struct ui_progress *prog);
|
||||||
void hists__collapse_resort(struct hists *hists, struct ui_progress *prog);
|
void hists__collapse_resort(struct hists *hists, struct ui_progress *prog);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue