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

Commit 512ae1bd authored by Namhyung Kim's avatar Namhyung Kim Committed by Jiri Olsa
Browse files

perf tools: Consolidate management of default sort orders



The perf uses different default sort orders for different use-cases,
and this was scattered throughout the code.  Add get_default_sort_
order() function to handle this and change initial value of sort_order
to NULL to distinguish it from user-given one.

Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1400480762-22852-10-git-send-email-namhyung@kernel.org


Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
parent a2ce067e
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -60,7 +60,6 @@ static int data__files_cnt;
#define data__for_each_file(i, d) data__for_each_file_start(i, d, 0)
#define data__for_each_file(i, d) data__for_each_file_start(i, d, 0)
#define data__for_each_file_new(i, d) data__for_each_file_start(i, d, 1)
#define data__for_each_file_new(i, d) data__for_each_file_start(i, d, 1)


static char diff__default_sort_order[] = "dso,symbol";
static bool force;
static bool force;
static bool show_period;
static bool show_period;
static bool show_formula;
static bool show_formula;
@@ -1142,7 +1141,6 @@ int cmd_diff(int argc, const char **argv, const char *prefix __maybe_unused)
{
{
	perf_config(perf_default_config, NULL);
	perf_config(perf_default_config, NULL);


	sort_order = diff__default_sort_order;
	argc = parse_options(argc, argv, options, diff_usage, 0);
	argc = parse_options(argc, argv, options, diff_usage, 0);


	if (symbol__init() < 0)
	if (symbol__init() < 0)
@@ -1153,6 +1151,8 @@ int cmd_diff(int argc, const char **argv, const char *prefix __maybe_unused)


	ui_init();
	ui_init();


	sort__mode = SORT_MODE__DIFF;

	if (setup_sorting() < 0)
	if (setup_sorting() < 0)
		usage_with_options(diff_usage, options);
		usage_with_options(diff_usage, options);


+0 −18
Original line number Original line Diff line number Diff line
@@ -805,30 +805,12 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
	if (branch_mode == -1 && has_br_stack)
	if (branch_mode == -1 && has_br_stack)
		sort__mode = SORT_MODE__BRANCH;
		sort__mode = SORT_MODE__BRANCH;


	/* 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
		 */
		if (sort_order == default_sort_order)
			sort_order = "comm,dso_from,symbol_from,"
				     "dso_to,symbol_to";

	}
	if (report.mem_mode) {
	if (report.mem_mode) {
		if (sort__mode == SORT_MODE__BRANCH) {
		if (sort__mode == SORT_MODE__BRANCH) {
			pr_err("branch and mem mode incompatible\n");
			pr_err("branch and mem mode incompatible\n");
			goto error;
			goto error;
		}
		}
		sort__mode = SORT_MODE__MEMORY;
		sort__mode = SORT_MODE__MEMORY;

		/*
		 * if no sort_order is provided, then specify
		 * branch-mode specific order
		 */
		if (sort_order == default_sort_order)
			sort_order = "local_weight,mem,sym,dso,symbol_daddr,dso_daddr,snoop,tlb,locked";
	}
	}


	if (setup_sorting() < 0) {
	if (setup_sorting() < 0) {
+1 −2
Original line number Original line Diff line number Diff line
@@ -1137,8 +1137,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
	if (argc)
	if (argc)
		usage_with_options(top_usage, options);
		usage_with_options(top_usage, options);


	if (sort_order == default_sort_order)
	sort__mode = SORT_MODE__TOP;
		sort_order = "dso,symbol";


	if (setup_sorting() < 0) {
	if (setup_sorting() < 0) {
		parse_options_usage(top_usage, options, "s", 1);
		parse_options_usage(top_usage, options, "s", 1);
+26 −2
Original line number Original line Diff line number Diff line
@@ -8,7 +8,11 @@ regex_t parent_regex;
const char	default_parent_pattern[] = "^sys_|^do_page_fault";
const char	default_parent_pattern[] = "^sys_|^do_page_fault";
const char	*parent_pattern = default_parent_pattern;
const char	*parent_pattern = default_parent_pattern;
const char	default_sort_order[] = "comm,dso,symbol";
const char	default_sort_order[] = "comm,dso,symbol";
const char	*sort_order = default_sort_order;
const char	default_branch_sort_order[] = "comm,dso_from,symbol_from,dso_to,symbol_to";
const char	default_mem_sort_order[] = "local_weight,mem,sym,dso,symbol_daddr,dso_daddr,snoop,tlb,locked";
const char	default_top_sort_order[] = "dso,symbol";
const char	default_diff_sort_order[] = "dso,symbol";
const char	*sort_order;
regex_t		ignore_callees_regex;
regex_t		ignore_callees_regex;
int		have_ignore_callees = 0;
int		have_ignore_callees = 0;
int		sort__need_collapse = 0;
int		sort__need_collapse = 0;
@@ -1218,11 +1222,31 @@ int sort_dimension__add(const char *tok)
	return -ESRCH;
	return -ESRCH;
}
}


static const char *get_default_sort_order(void)
{
	const char *default_sort_orders[] = {
		default_sort_order,
		default_branch_sort_order,
		default_mem_sort_order,
		default_top_sort_order,
		default_diff_sort_order,
	};

	BUG_ON(sort__mode >= ARRAY_SIZE(default_sort_orders));

	return default_sort_orders[sort__mode];
}

int setup_sorting(void)
int setup_sorting(void)
{
{
	char *tmp, *tok, *str = strdup(sort_order);
	char *tmp, *tok, *str;
	const char *sort_keys = sort_order;
	int ret = 0;
	int ret = 0;


	if (sort_keys == NULL)
		sort_keys = get_default_sort_order();

	str = strdup(sort_keys);
	if (str == NULL) {
	if (str == NULL) {
		error("Not enough memory to setup sort keys");
		error("Not enough memory to setup sort keys");
		return -ENOMEM;
		return -ENOMEM;
+2 −0
Original line number Original line Diff line number Diff line
@@ -133,6 +133,8 @@ enum sort_mode {
	SORT_MODE__NORMAL,
	SORT_MODE__NORMAL,
	SORT_MODE__BRANCH,
	SORT_MODE__BRANCH,
	SORT_MODE__MEMORY,
	SORT_MODE__MEMORY,
	SORT_MODE__TOP,
	SORT_MODE__DIFF,
};
};


enum sort_type {
enum sort_type {