浏览代码

perf list: Add a --no-desc flag

Add a --no-desc flag to 'perf list' to not print the event descriptions
that were earlier added for JSON events. This may be useful to get a
less crowded listing.

It's still default to print descriptions as that is the more useful
default for most users.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1473978296-20712-9-git-send-email-sukadev@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Andi Kleen 9 年之前
父节点
当前提交
1c5f01fe86

+ 7 - 1
tools/perf/Documentation/perf-list.txt

@@ -8,13 +8,19 @@ perf-list - List all symbolic event types
 SYNOPSIS
 SYNOPSIS
 --------
 --------
 [verse]
 [verse]
-'perf list' [hw|sw|cache|tracepoint|pmu|event_glob]
+'perf list' [--no-desc] [hw|sw|cache|tracepoint|pmu|event_glob]
 
 
 DESCRIPTION
 DESCRIPTION
 -----------
 -----------
 This command displays the symbolic event types which can be selected in the
 This command displays the symbolic event types which can be selected in the
 various perf commands with the -e option.
 various perf commands with the -e option.
 
 
+OPTIONS
+-------
+--no-desc::
+Don't print descriptions.
+
+
 [[EVENT_MODIFIERS]]
 [[EVENT_MODIFIERS]]
 EVENT MODIFIERS
 EVENT MODIFIERS
 ---------------
 ---------------

+ 9 - 5
tools/perf/builtin-list.c

@@ -16,16 +16,20 @@
 #include "util/pmu.h"
 #include "util/pmu.h"
 #include <subcmd/parse-options.h>
 #include <subcmd/parse-options.h>
 
 
+static bool desc_flag = true;
+
 int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 {
 {
 	int i;
 	int i;
 	bool raw_dump = false;
 	bool raw_dump = false;
 	struct option list_options[] = {
 	struct option list_options[] = {
 		OPT_BOOLEAN(0, "raw-dump", &raw_dump, "Dump raw events"),
 		OPT_BOOLEAN(0, "raw-dump", &raw_dump, "Dump raw events"),
+		OPT_BOOLEAN('d', "desc", &desc_flag,
+			    "Print extra event descriptions. --no-desc to not print."),
 		OPT_END()
 		OPT_END()
 	};
 	};
 	const char * const list_usage[] = {
 	const char * const list_usage[] = {
-		"perf list [hw|sw|cache|tracepoint|pmu|sdt|event_glob]",
+		"perf list [--no-desc] [hw|sw|cache|tracepoint|pmu|sdt|event_glob]",
 		NULL
 		NULL
 	};
 	};
 
 
@@ -40,7 +44,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 		printf("\nList of pre-defined events (to be used in -e):\n\n");
 		printf("\nList of pre-defined events (to be used in -e):\n\n");
 
 
 	if (argc == 0) {
 	if (argc == 0) {
-		print_events(NULL, raw_dump);
+		print_events(NULL, raw_dump, !desc_flag);
 		return 0;
 		return 0;
 	}
 	}
 
 
@@ -61,14 +65,14 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 			 strcmp(argv[i], "hwcache") == 0)
 			 strcmp(argv[i], "hwcache") == 0)
 			print_hwcache_events(NULL, raw_dump);
 			print_hwcache_events(NULL, raw_dump);
 		else if (strcmp(argv[i], "pmu") == 0)
 		else if (strcmp(argv[i], "pmu") == 0)
-			print_pmu_events(NULL, raw_dump);
+			print_pmu_events(NULL, raw_dump, !desc_flag);
 		else if (strcmp(argv[i], "sdt") == 0)
 		else if (strcmp(argv[i], "sdt") == 0)
 			print_sdt_events(NULL, NULL, raw_dump);
 			print_sdt_events(NULL, NULL, raw_dump);
 		else if ((sep = strchr(argv[i], ':')) != NULL) {
 		else if ((sep = strchr(argv[i], ':')) != NULL) {
 			int sep_idx;
 			int sep_idx;
 
 
 			if (sep == NULL) {
 			if (sep == NULL) {
-				print_events(argv[i], raw_dump);
+				print_events(argv[i], raw_dump, !desc_flag);
 				continue;
 				continue;
 			}
 			}
 			sep_idx = sep - argv[i];
 			sep_idx = sep - argv[i];
@@ -90,7 +94,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 			print_symbol_events(s, PERF_TYPE_SOFTWARE,
 			print_symbol_events(s, PERF_TYPE_SOFTWARE,
 					    event_symbols_sw, PERF_COUNT_SW_MAX, raw_dump);
 					    event_symbols_sw, PERF_COUNT_SW_MAX, raw_dump);
 			print_hwcache_events(s, raw_dump);
 			print_hwcache_events(s, raw_dump);
-			print_pmu_events(s, raw_dump);
+			print_pmu_events(s, raw_dump, !desc_flag);
 			print_tracepoint_events(NULL, s, raw_dump);
 			print_tracepoint_events(NULL, s, raw_dump);
 			print_sdt_events(NULL, s, raw_dump);
 			print_sdt_events(NULL, s, raw_dump);
 			free(s);
 			free(s);

+ 2 - 2
tools/perf/util/parse-events.c

@@ -2263,7 +2263,7 @@ out_enomem:
 /*
 /*
  * Print the help text for the event symbols:
  * Print the help text for the event symbols:
  */
  */
-void print_events(const char *event_glob, bool name_only)
+void print_events(const char *event_glob, bool name_only, bool quiet_flag)
 {
 {
 	print_symbol_events(event_glob, PERF_TYPE_HARDWARE,
 	print_symbol_events(event_glob, PERF_TYPE_HARDWARE,
 			    event_symbols_hw, PERF_COUNT_HW_MAX, name_only);
 			    event_symbols_hw, PERF_COUNT_HW_MAX, name_only);
@@ -2273,7 +2273,7 @@ void print_events(const char *event_glob, bool name_only)
 
 
 	print_hwcache_events(event_glob, name_only);
 	print_hwcache_events(event_glob, name_only);
 
 
-	print_pmu_events(event_glob, name_only);
+	print_pmu_events(event_glob, name_only, quiet_flag);
 
 
 	if (event_glob != NULL)
 	if (event_glob != NULL)
 		return;
 		return;

+ 1 - 1
tools/perf/util/parse-events.h

@@ -172,7 +172,7 @@ void parse_events_update_lists(struct list_head *list_event,
 void parse_events_evlist_error(struct parse_events_evlist *data,
 void parse_events_evlist_error(struct parse_events_evlist *data,
 			       int idx, const char *str);
 			       int idx, const char *str);
 
 
-void print_events(const char *event_glob, bool name_only);
+void print_events(const char *event_glob, bool name_only, bool quiet);
 
 
 struct event_symbol {
 struct event_symbol {
 	const char	*symbol;
 	const char	*symbol;

+ 2 - 2
tools/perf/util/pmu.c

@@ -1084,7 +1084,7 @@ static void wordwrap(char *s, int start, int max, int corr)
 	}
 	}
 }
 }
 
 
-void print_pmu_events(const char *event_glob, bool name_only)
+void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag)
 {
 {
 	struct perf_pmu *pmu;
 	struct perf_pmu *pmu;
 	struct perf_pmu_alias *alias;
 	struct perf_pmu_alias *alias;
@@ -1151,7 +1151,7 @@ void print_pmu_events(const char *event_glob, bool name_only)
 			printf("%s ", aliases[j].name);
 			printf("%s ", aliases[j].name);
 			continue;
 			continue;
 		}
 		}
-		if (aliases[j].desc) {
+		if (aliases[j].desc && !quiet_flag) {
 			if (numdesc++ == 0)
 			if (numdesc++ == 0)
 				printf("\n");
 				printf("\n");
 			printf("  %-50s\n", aliases[j].name);
 			printf("  %-50s\n", aliases[j].name);

+ 1 - 1
tools/perf/util/pmu.h

@@ -72,7 +72,7 @@ int perf_pmu__format_parse(char *dir, struct list_head *head);
 
 
 struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
 struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
 
 
-void print_pmu_events(const char *event_glob, bool name_only);
+void print_pmu_events(const char *event_glob, bool name_only, bool quiet);
 bool pmu_have_event(const char *pname, const char *name);
 bool pmu_have_event(const char *pname, const char *name);
 
 
 int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt,
 int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt,