diff options
Diffstat (limited to 'tools/perf/builtin-evlist.c')
| -rw-r--r-- | tools/perf/builtin-evlist.c | 88 | 
1 files changed, 9 insertions, 79 deletions
diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c index c20f1dcfb7e..05bd9dfe875 100644 --- a/tools/perf/builtin-evlist.c +++ b/tools/perf/builtin-evlist.c @@ -15,39 +15,6 @@  #include "util/parse-options.h"  #include "util/session.h" -struct perf_attr_details { -	bool freq; -	bool verbose; -}; - -static int comma_printf(bool *first, const char *fmt, ...) -{ -	va_list args; -	int ret = 0; - -	if (!*first) { -		ret += printf(","); -	} else { -		ret += printf(":"); -		*first = false; -	} - -	va_start(args, fmt); -	ret += vprintf(fmt, args); -	va_end(args); -	return ret; -} - -static int __if_print(bool *first, const char *field, u64 value) -{ -	if (value == 0) -		return 0; - -	return comma_printf(first, " %s: %" PRIu64, field, value); -} - -#define if_print(field) __if_print(&first, #field, pos->attr.field) -  static int __cmd_evlist(const char *file_name, struct perf_attr_details *details)  {  	struct perf_session *session; @@ -57,52 +24,8 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details  	if (session == NULL)  		return -ENOMEM; -	list_for_each_entry(pos, &session->evlist->entries, node) { -		bool first = true; - -		printf("%s", perf_evsel__name(pos)); - -		if (details->verbose || details->freq) { -			comma_printf(&first, " sample_freq=%" PRIu64, -				     (u64)pos->attr.sample_freq); -		} - -		if (details->verbose) { -			if_print(type); -			if_print(config); -			if_print(config1); -			if_print(config2); -			if_print(size); -			if_print(sample_type); -			if_print(read_format); -			if_print(disabled); -			if_print(inherit); -			if_print(pinned); -			if_print(exclusive); -			if_print(exclude_user); -			if_print(exclude_kernel); -			if_print(exclude_hv); -			if_print(exclude_idle); -			if_print(mmap); -			if_print(comm); -			if_print(freq); -			if_print(inherit_stat); -			if_print(enable_on_exec); -			if_print(task); -			if_print(watermark); -			if_print(precise_ip); -			if_print(mmap_data); -			if_print(sample_id_all); -			if_print(exclude_host); -			if_print(exclude_guest); -			if_print(__reserved_1); -			if_print(wakeup_events); -			if_print(bp_type); -			if_print(branch_sample_type); -		} - -		putchar('\n'); -	} +	list_for_each_entry(pos, &session->evlist->entries, node) +		perf_evsel__fprintf(pos, details, stdout);  	perf_session__delete(session);  	return 0; @@ -116,6 +39,8 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)  	OPT_BOOLEAN('F', "freq", &details.freq, "Show the sample frequency"),  	OPT_BOOLEAN('v', "verbose", &details.verbose,  		    "Show all event attr details"), +	OPT_BOOLEAN('g', "group", &details.event_group, +		    "Show event group information"),  	OPT_END()  	};  	const char * const evlist_usage[] = { @@ -127,5 +52,10 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)  	if (argc)  		usage_with_options(evlist_usage, options); +	if (details.event_group && (details.verbose || details.freq)) { +		pr_err("--group option is not compatible with other options\n"); +		usage_with_options(evlist_usage, options); +	} +  	return __cmd_evlist(input_name, &details);  }  |