Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d484f99 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

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: default avatarIngo 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 2b56bcfb
Loading
Loading
Loading
Loading
+36 −16
Original line number Diff line number Diff line
@@ -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->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,12 +279,14 @@ static void perf_top__print_sym_table(struct perf_top *top)
		return;
	}

	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);
	hists__output_resort(hists, NULL);
@@ -545,12 +550,14 @@ static void perf_top__sort_new_samples(void *arg)

	hists = evsel__hists(t->sym_evsel);

	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);
	hists__output_resort(hists, NULL);
@@ -579,9 +586,22 @@ 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,
	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;
}
+2 −0
Original line number Diff line number Diff line
@@ -1736,6 +1736,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
	"t             Zoom into current Thread\n"
	"V             Verbose (DSO names in callchains, etc)\n"
	"z             Toggle zeroing of samples\n"
	"CTRL+z        Enable/Disable events\n"
	"/             Filter symbol by name";

	if (browser == NULL)
@@ -1900,6 +1901,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
			/* Fall thru */
		case 'q':
		case CTRL('c'):
		case CTRL('z'):
			goto out_free_stack;
		default:
			continue;