Commit 3a5714f8 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

perf top: Get rid of *_threaded() functions

Those _threaded() functions are needed to make hist tree handling
thread-safe, but AFAICS the only thing it does is forcing it to use
the intermediate 'collapsed' tree.

This can be acheived by setting sort__need_collapse to 1 in cmd_top() so
no need to keep those _threaded() variants.
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1368497347-9628-4-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 6f29097f
...@@ -284,11 +284,11 @@ static void perf_top__print_sym_table(struct perf_top *top) ...@@ -284,11 +284,11 @@ static void perf_top__print_sym_table(struct perf_top *top)
return; return;
} }
hists__collapse_resort_threaded(&top->sym_evsel->hists); hists__collapse_resort(&top->sym_evsel->hists);
hists__output_resort_threaded(&top->sym_evsel->hists); hists__output_resort(&top->sym_evsel->hists);
hists__decay_entries_threaded(&top->sym_evsel->hists, hists__decay_entries(&top->sym_evsel->hists,
top->hide_user_symbols, top->hide_user_symbols,
top->hide_kernel_symbols); top->hide_kernel_symbols);
hists__output_recalc_col_len(&top->sym_evsel->hists, hists__output_recalc_col_len(&top->sym_evsel->hists,
top->print_entries - printed); top->print_entries - printed);
putchar('\n'); putchar('\n');
...@@ -549,11 +549,11 @@ static void perf_top__sort_new_samples(void *arg) ...@@ -549,11 +549,11 @@ 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__collapse_resort_threaded(&t->sym_evsel->hists); hists__collapse_resort(&t->sym_evsel->hists);
hists__output_resort_threaded(&t->sym_evsel->hists); hists__output_resort(&t->sym_evsel->hists);
hists__decay_entries_threaded(&t->sym_evsel->hists, hists__decay_entries(&t->sym_evsel->hists,
t->hide_user_symbols, t->hide_user_symbols,
t->hide_kernel_symbols); t->hide_kernel_symbols);
} }
static void *display_thread_tui(void *arg) static void *display_thread_tui(void *arg)
...@@ -1126,6 +1126,9 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -1126,6 +1126,9 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
if (setup_sorting() < 0) if (setup_sorting() < 0)
usage_with_options(top_usage, options); usage_with_options(top_usage, options);
/* display thread wants entries to be collapsed in a different tree */
sort__need_collapse = 1;
if (top.use_stdio) if (top.use_stdio)
use_browser = 0; use_browser = 0;
else if (top.use_tui) else if (top.use_tui)
......
...@@ -240,8 +240,7 @@ static bool hists__decay_entry(struct hists *hists, struct hist_entry *he) ...@@ -240,8 +240,7 @@ static bool hists__decay_entry(struct hists *hists, struct hist_entry *he)
return he->stat.period == 0; return he->stat.period == 0;
} }
static void __hists__decay_entries(struct hists *hists, bool zap_user, void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel)
bool zap_kernel, bool threaded)
{ {
struct rb_node *next = rb_first(&hists->entries); struct rb_node *next = rb_first(&hists->entries);
struct hist_entry *n; struct hist_entry *n;
...@@ -260,7 +259,7 @@ static void __hists__decay_entries(struct hists *hists, bool zap_user, ...@@ -260,7 +259,7 @@ static void __hists__decay_entries(struct hists *hists, bool zap_user,
!n->used) { !n->used) {
rb_erase(&n->rb_node, &hists->entries); rb_erase(&n->rb_node, &hists->entries);
if (sort__need_collapse || threaded) if (sort__need_collapse)
rb_erase(&n->rb_node_in, &hists->entries_collapsed); rb_erase(&n->rb_node_in, &hists->entries_collapsed);
hist_entry__free(n); hist_entry__free(n);
...@@ -269,17 +268,6 @@ static void __hists__decay_entries(struct hists *hists, bool zap_user, ...@@ -269,17 +268,6 @@ static void __hists__decay_entries(struct hists *hists, bool zap_user,
} }
} }
void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel)
{
return __hists__decay_entries(hists, zap_user, zap_kernel, false);
}
void hists__decay_entries_threaded(struct hists *hists,
bool zap_user, bool zap_kernel)
{
return __hists__decay_entries(hists, zap_user, zap_kernel, true);
}
/* /*
* histogram, sorted on item, collects periods * histogram, sorted on item, collects periods
*/ */
...@@ -613,13 +601,13 @@ static void hists__apply_filters(struct hists *hists, struct hist_entry *he) ...@@ -613,13 +601,13 @@ static void hists__apply_filters(struct hists *hists, struct hist_entry *he)
hists__filter_entry_by_symbol(hists, he); hists__filter_entry_by_symbol(hists, he);
} }
static void __hists__collapse_resort(struct hists *hists, bool threaded) void hists__collapse_resort(struct hists *hists)
{ {
struct rb_root *root; struct rb_root *root;
struct rb_node *next; struct rb_node *next;
struct hist_entry *n; struct hist_entry *n;
if (!sort__need_collapse && !threaded) if (!sort__need_collapse)
return; return;
root = hists__get_rotate_entries_in(hists); root = hists__get_rotate_entries_in(hists);
...@@ -641,16 +629,6 @@ static void __hists__collapse_resort(struct hists *hists, bool threaded) ...@@ -641,16 +629,6 @@ static void __hists__collapse_resort(struct hists *hists, bool threaded)
} }
} }
void hists__collapse_resort(struct hists *hists)
{
return __hists__collapse_resort(hists, false);
}
void hists__collapse_resort_threaded(struct hists *hists)
{
return __hists__collapse_resort(hists, true);
}
/* /*
* reverse the map, sort on period. * reverse the map, sort on period.
*/ */
...@@ -737,7 +715,7 @@ static void __hists__insert_output_entry(struct rb_root *entries, ...@@ -737,7 +715,7 @@ static void __hists__insert_output_entry(struct rb_root *entries,
rb_insert_color(&he->rb_node, entries); rb_insert_color(&he->rb_node, entries);
} }
static void __hists__output_resort(struct hists *hists, bool threaded) void hists__output_resort(struct hists *hists)
{ {
struct rb_root *root; struct rb_root *root;
struct rb_node *next; struct rb_node *next;
...@@ -746,7 +724,7 @@ static void __hists__output_resort(struct hists *hists, bool threaded) ...@@ -746,7 +724,7 @@ static void __hists__output_resort(struct hists *hists, bool threaded)
min_callchain_hits = hists->stats.total_period * (callchain_param.min_percent / 100); min_callchain_hits = hists->stats.total_period * (callchain_param.min_percent / 100);
if (sort__need_collapse || threaded) if (sort__need_collapse)
root = &hists->entries_collapsed; root = &hists->entries_collapsed;
else else
root = hists->entries_in; root = hists->entries_in;
...@@ -767,16 +745,6 @@ static void __hists__output_resort(struct hists *hists, bool threaded) ...@@ -767,16 +745,6 @@ static void __hists__output_resort(struct hists *hists, bool threaded)
} }
} }
void hists__output_resort(struct hists *hists)
{
return __hists__output_resort(hists, false);
}
void hists__output_resort_threaded(struct hists *hists)
{
return __hists__output_resort(hists, true);
}
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,
enum hist_filter filter) enum hist_filter filter)
{ {
......
...@@ -104,13 +104,9 @@ struct hist_entry *__hists__add_mem_entry(struct hists *self, ...@@ -104,13 +104,9 @@ struct hist_entry *__hists__add_mem_entry(struct hists *self,
u64 weight); u64 weight);
void hists__output_resort(struct hists *self); void hists__output_resort(struct hists *self);
void hists__output_resort_threaded(struct hists *hists);
void hists__collapse_resort(struct hists *self); void hists__collapse_resort(struct hists *self);
void hists__collapse_resort_threaded(struct hists *hists);
void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel); void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel);
void hists__decay_entries_threaded(struct hists *hists, bool zap_user,
bool zap_kernel);
void hists__output_recalc_col_len(struct hists *hists, int max_rows); void hists__output_recalc_col_len(struct hists *hists, int max_rows);
void hists__inc_nr_entries(struct hists *hists, struct hist_entry *h); void hists__inc_nr_entries(struct hists *hists, struct hist_entry *h);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment