perf top: Allow disabling/enabling events dynamicly
Now it is possible to press CTRL+z at anytime and that will disable the events being monitored, essentially turning 'top' into 'report', with pressing CTRL+z again making it enable the events again, returning to the 'top' behaviour, i.e. dynamic + decaying of older samples. One may want, for instance, play with: -d, --delay <n> number of seconds to delay between refreshes and: -z, --zero zero history across updates Plus CTRL+z to see only the events since last zeroing, etc. Suggested-by: Ingo Molnar <mingo@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Don Zickus <dzickus@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-zq7tnh5462blt2yda0bcxh5b@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@@ -235,10 +235,13 @@ static void perf_top__show_details(struct perf_top *top)
|
||||
|
||||
more = symbol__annotate_printf(symbol, he->ms.map, top->sym_evsel,
|
||||
0, top->sym_pcnt_filter, top->print_entries, 4);
|
||||
if (top->zero)
|
||||
symbol__annotate_zero_histogram(symbol, top->sym_evsel->idx);
|
||||
else
|
||||
symbol__annotate_decay_histogram(symbol, top->sym_evsel->idx);
|
||||
|
||||
if (top->evlist->enabled) {
|
||||
if (top->zero)
|
||||
symbol__annotate_zero_histogram(symbol, top->sym_evsel->idx);
|
||||
else
|
||||
symbol__annotate_decay_histogram(symbol, top->sym_evsel->idx);
|
||||
}
|
||||
if (more != 0)
|
||||
printf("%d lines not displayed, maybe increase display entries [e]\n", more);
|
||||
out_unlock:
|
||||
@@ -276,11 +279,13 @@ static void perf_top__print_sym_table(struct perf_top *top)
|
||||
return;
|
||||
}
|
||||
|
||||
if (top->zero) {
|
||||
hists__delete_entries(hists);
|
||||
} else {
|
||||
hists__decay_entries(hists, top->hide_user_symbols,
|
||||
top->hide_kernel_symbols);
|
||||
if (top->evlist->enabled) {
|
||||
if (top->zero) {
|
||||
hists__delete_entries(hists);
|
||||
} else {
|
||||
hists__decay_entries(hists, top->hide_user_symbols,
|
||||
top->hide_kernel_symbols);
|
||||
}
|
||||
}
|
||||
|
||||
hists__collapse_resort(hists, NULL);
|
||||
@@ -545,11 +550,13 @@ static void perf_top__sort_new_samples(void *arg)
|
||||
|
||||
hists = evsel__hists(t->sym_evsel);
|
||||
|
||||
if (t->zero) {
|
||||
hists__delete_entries(hists);
|
||||
} else {
|
||||
hists__decay_entries(hists, t->hide_user_symbols,
|
||||
t->hide_kernel_symbols);
|
||||
if (t->evlist->enabled) {
|
||||
if (t->zero) {
|
||||
hists__delete_entries(hists);
|
||||
} else {
|
||||
hists__decay_entries(hists, t->hide_user_symbols,
|
||||
t->hide_kernel_symbols);
|
||||
}
|
||||
}
|
||||
|
||||
hists__collapse_resort(hists, NULL);
|
||||
@@ -579,8 +586,21 @@ static void *display_thread_tui(void *arg)
|
||||
hists->uid_filter_str = top->record_opts.target.uid_str;
|
||||
}
|
||||
|
||||
perf_evlist__tui_browse_hists(top->evlist, help, &hbt, top->min_percent,
|
||||
&top->session->header.env);
|
||||
while (true) {
|
||||
int key = perf_evlist__tui_browse_hists(top->evlist, help, &hbt,
|
||||
top->min_percent,
|
||||
&top->session->header.env);
|
||||
|
||||
if (key != CTRL('z'))
|
||||
break;
|
||||
|
||||
perf_evlist__toggle_enable(top->evlist);
|
||||
/*
|
||||
* No need to refresh, resort/decay histogram entries
|
||||
* if we are not collecting samples:
|
||||
*/
|
||||
hbt.refresh = top->evlist->enabled ? top->delay_secs : 0;
|
||||
}
|
||||
|
||||
done = 1;
|
||||
return NULL;
|
||||
|
Reference in New Issue
Block a user