perf tools: Add overhead/overhead_children keys defaults via string
We currently set 'overhead' and 'overhead_children' as default sort keys within perf_hpp__init function by directly adding into the sort list. This patch adds 'overhead' and 'overhead_children' in text form into sort_keys and let them be added by standard sort dimension interface. We need to eliminate dirrect sort_list additions to be able to add support for hists specific sort keys. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Noel Grandin <noelgrandin@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1452158050-28061-12-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									bb4ced29f5
								
							
						
					
					
						commit
						b97511c5bc
					
				| @ -443,7 +443,6 @@ LIST_HEAD(perf_hpp__sort_list); | ||||
| 
 | ||||
| void perf_hpp__init(void) | ||||
| { | ||||
| 	struct list_head *list; | ||||
| 	int i; | ||||
| 
 | ||||
| 	for (i = 0; i < PERF_HPP__MAX_INDEX; i++) { | ||||
| @ -484,17 +483,6 @@ void perf_hpp__init(void) | ||||
| 
 | ||||
| 	if (symbol_conf.show_total_period) | ||||
| 		hpp_dimension__add_output(PERF_HPP__PERIOD); | ||||
| 
 | ||||
| 	/* prepend overhead field for backward compatiblity.  */ | ||||
| 	list = &perf_hpp__format[PERF_HPP__OVERHEAD].sort_list; | ||||
| 	if (list_empty(list)) | ||||
| 		list_add(list, &perf_hpp__sort_list); | ||||
| 
 | ||||
| 	if (symbol_conf.cumulate_callchain) { | ||||
| 		list = &perf_hpp__format[PERF_HPP__OVERHEAD_ACC].sort_list; | ||||
| 		if (list_empty(list)) | ||||
| 			list_add(list, &perf_hpp__sort_list); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void perf_hpp__column_register(struct perf_hpp_fmt *format) | ||||
|  | ||||
| @ -2252,6 +2252,34 @@ static int setup_sort_order(struct perf_evlist *evlist) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Adds 'pre,' prefix into 'str' is 'pre' is | ||||
|  * not already part of 'str'. | ||||
|  */ | ||||
| static char *prefix_if_not_in(const char *pre, char *str) | ||||
| { | ||||
| 	char *n; | ||||
| 
 | ||||
| 	if (!str || strstr(str, pre)) | ||||
| 		return str; | ||||
| 
 | ||||
| 	if (asprintf(&n, "%s,%s", pre, str) < 0) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	free(str); | ||||
| 	return n; | ||||
| } | ||||
| 
 | ||||
| static char *setup_overhead(char *keys) | ||||
| { | ||||
| 	keys = prefix_if_not_in("overhead", keys); | ||||
| 
 | ||||
| 	if (symbol_conf.cumulate_callchain) | ||||
| 		keys = prefix_if_not_in("overhead_children", keys); | ||||
| 
 | ||||
| 	return keys; | ||||
| } | ||||
| 
 | ||||
| static int __setup_sorting(struct perf_evlist *evlist) | ||||
| { | ||||
| 	char *tmp, *tok, *str; | ||||
| @ -2281,6 +2309,17 @@ static int __setup_sorting(struct perf_evlist *evlist) | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Prepend overhead fields for backward compatibility. | ||||
| 	 */ | ||||
| 	if (!is_strict_order(field_order)) { | ||||
| 		str = setup_overhead(str); | ||||
| 		if (str == NULL) { | ||||
| 			error("Not enough memory to setup overhead keys"); | ||||
| 			return -ENOMEM; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	for (tok = strtok_r(str, ", ", &tmp); | ||||
| 			tok; tok = strtok_r(NULL, ", ", &tmp)) { | ||||
| 		ret = sort_dimension__add(tok, evlist); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user