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

Commit 55369fc1 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo
Browse files

perf sort: Introduce sort__mode variable



It's used for determining current sort mode which can be one of
NORMAL, BRANCH and new MEMORY.

Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
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/1364816125-12212-5-git-send-email-namhyung@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent ded19d57
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ static int process_sample_event(struct perf_tool *tool,
	if (rep->cpu_list && !test_bit(sample->cpu, rep->cpu_bitmap))
		return 0;

	if (sort__branch_mode == 1) {
	if (sort__mode == SORT_MODE__BRANCH) {
		if (perf_report__add_branch_hist_entry(tool, &al, sample,
						       evsel, machine)) {
			pr_debug("problem adding lbr entry, skipping event\n");
@@ -387,7 +387,7 @@ static int perf_report__setup_sample_type(struct perf_report *rep)
			}
	}

	if (sort__branch_mode == 1) {
	if (sort__mode == SORT_MODE__BRANCH) {
		if (!self->fd_pipe &&
		    !(sample_type & PERF_SAMPLE_BRANCH_STACK)) {
			ui__error("Selected -b but no branch data. "
@@ -694,7 +694,9 @@ static int
parse_branch_mode(const struct option *opt __maybe_unused,
		  const char *str __maybe_unused, int unset)
{
	sort__branch_mode = !unset;
	int *branch_mode = opt->value;

	*branch_mode = !unset;
	return 0;
}

@@ -703,6 +705,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
	struct perf_session *session;
	struct stat st;
	bool has_br_stack = false;
	int branch_mode = -1;
	int ret = -1;
	char callchain_default_opt[] = "fractal,0.5,callee";
	const char * const report_usage[] = {
@@ -799,7 +802,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
		    "Show a column with the sum of periods"),
	OPT_BOOLEAN(0, "group", &symbol_conf.event_group,
		    "Show event group information together"),
	OPT_CALLBACK_NOOPT('b', "branch-stack", &sort__branch_mode, "",
	OPT_CALLBACK_NOOPT('b', "branch-stack", &branch_mode, "",
		    "use branch records for histogram filling", parse_branch_mode),
	OPT_STRING(0, "objdump", &objdump_path, "path",
		   "objdump binary to use for disassembly and annotations"),
@@ -849,11 +852,11 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
	has_br_stack = perf_header__has_feat(&session->header,
					     HEADER_BRANCH_STACK);

	if (sort__branch_mode == -1 && has_br_stack)
		sort__branch_mode = 1;
	if (branch_mode == -1 && has_br_stack)
		sort__mode = SORT_MODE__BRANCH;

	/* sort__branch_mode could be 0 if --no-branch-stack */
	if (sort__branch_mode == 1) {
	/* sort__mode could be NORMAL if --no-branch-stack */
	if (sort__mode == SORT_MODE__BRANCH) {
		/*
		 * if no sort_order is provided, then specify
		 * branch-mode specific order
@@ -864,7 +867,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)

	}
	if (report.mem_mode) {
		if (sort__branch_mode == 1) {
		if (sort__mode == SORT_MODE__BRANCH) {
			fprintf(stderr, "branch and mem mode incompatible\n");
			goto error;
		}
@@ -934,7 +937,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)

	sort_entry__setup_elide(&sort_comm, symbol_conf.comm_list, "comm", stdout);

	if (sort__branch_mode == 1) {
	if (sort__mode == SORT_MODE__BRANCH) {
		sort_entry__setup_elide(&sort_dso_from, symbol_conf.dso_from_list, "dso_from", stdout);
		sort_entry__setup_elide(&sort_dso_to, symbol_conf.dso_to_list, "dso_to", stdout);
		sort_entry__setup_elide(&sort_sym_from, symbol_conf.sym_from_list, "sym_from", stdout);
+2 −2
Original line number Diff line number Diff line
@@ -1155,7 +1155,7 @@ static struct hist_browser *hist_browser__new(struct hists *hists)
		browser->b.refresh = hist_browser__refresh;
		browser->b.seek = ui_browser__hists_seek;
		browser->b.use_navkeypressed = true;
		if (sort__branch_mode == 1)
		if (sort__mode == SORT_MODE__BRANCH)
			browser->has_symbols = sort_sym_from.list.next != NULL;
		else
			browser->has_symbols = sort_sym.list.next != NULL;
@@ -1488,7 +1488,7 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
		if (!browser->has_symbols)
			goto add_exit_option;

		if (sort__branch_mode == 1) {
		if (sort__mode == SORT_MODE__BRANCH) {
			bi = browser->he_selection->branch_info;
			if (browser->selection != NULL &&
			    bi &&
+2 −2
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ const char *sort_order = default_sort_order;
int		sort__need_collapse = 0;
int		sort__has_parent = 0;
int		sort__has_sym = 0;
int		sort__branch_mode = -1; /* -1 = means not set */
enum sort_mode	sort__mode = SORT_MODE__NORMAL;

enum sort_type	sort__first_dimension;

@@ -943,7 +943,7 @@ int sort_dimension__add(const char *tok)
		if (strncasecmp(tok, sd->name, strlen(tok)))
			continue;

		if (sort__branch_mode != 1)
		if (sort__mode != SORT_MODE__BRANCH)
			return -EINVAL;

		if (sd->entry == &sort_sym_from || sd->entry == &sort_sym_to)
+7 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ extern const char default_sort_order[];
extern int sort__need_collapse;
extern int sort__has_parent;
extern int sort__has_sym;
extern int sort__branch_mode;
extern enum sort_mode sort__mode;
extern struct sort_entry sort_comm;
extern struct sort_entry sort_dso;
extern struct sort_entry sort_sym;
@@ -123,6 +123,12 @@ static inline void hist_entry__add_pair(struct hist_entry *he,
	list_add_tail(&he->pairs.head, &pair->pairs.node);
}

enum sort_mode {
	SORT_MODE__NORMAL,
	SORT_MODE__BRANCH,
	SORT_MODE__MEMORY,
};

enum sort_type {
	/* common sort keys */
	SORT_PID,