Subject: Re: [PATCH v21 11/19] perf, tools: Add alias support for long descriptions

From: Arnaldo Carvalho de Melo <[email-masked]>
Date: Mon, 3 Oct 2016 21:20:51 -0300

Em Thu, Sep 15, 2016 at 03:24:48PM -0700, Sukadev Bhattiprolu escreveu:
> Previously we were dropping the useful longer descriptions that some
> events have in the event list completely. Now that jevents provides
> support for longer descriptions (see previous patch), add support for
> parsing the long descriptions
> 
> Signed-off-by: Andi Kleen <[email-masked]>
> Signed-off-by: Sukadev Bhattiprolu <[email-masked]>
> Acked-by: Jiri Olsa <[email-masked]>
> Acked-by: Ingo Molnar <[email-masked]>
> ---

This patch doesn't build, fixing... probably needs stuff that is in a
following patch.

- Arnaldo
 
> Changelog[v14]
> 	- [Jiri Olsa] Break up independent parts of the patch into
> 	  separate patches.
> ---
>  tools/perf/util/parse-events.c |  5 +++--
>  tools/perf/util/parse-events.h |  3 ++-
>  tools/perf/util/pmu.c          | 15 ++++++++++-----
>  tools/perf/util/pmu.h          |  4 +++-
>  4 files changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index a3c7739..9abd60d 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -2229,7 +2229,8 @@ out_enomem:
>  /*
>   * Print the help text for the event symbols:
>   */
> -void print_events(const char *event_glob, bool name_only, bool quiet_flag)
> +void print_events(const char *event_glob, bool name_only, bool quiet_flag,
> +			bool long_desc)
>  {
>  	print_symbol_events(event_glob, PERF_TYPE_HARDWARE,
>  			    event_symbols_hw, PERF_COUNT_HW_MAX, name_only);
> @@ -2239,7 +2240,7 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag)
>  
>  	print_hwcache_events(event_glob, name_only);
>  
> -	print_pmu_events(event_glob, name_only, quiet_flag);
> +	print_pmu_events(event_glob, name_only, quiet_flag, long_desc);
>  
>  	if (event_glob != NULL)
>  		return;
> diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> index 795f2579..7efde4a 100644
> --- a/tools/perf/util/parse-events.h
> +++ b/tools/perf/util/parse-events.h
> @@ -171,7 +171,8 @@ void parse_events_update_lists(struct list_head *list_event,
>  void parse_events_evlist_error(struct parse_events_evlist *data,
>  			       int idx, const char *str);
>  
> -void print_events(const char *event_glob, bool name_only, bool quiet);
> +void print_events(const char *event_glob, bool name_only, bool quiet,
> +		  bool long_desc);
>  
>  struct event_symbol {
>  	const char	*symbol;
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index 2291d2a..43838b3 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -223,7 +223,7 @@ static int perf_pmu__parse_snapshot(struct perf_pmu_alias *alias,
>  }
>  
>  static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
> -				 char *desc, char *val)
> +				 char *desc, char *val, char *long_desc)
>  {
>  	struct perf_pmu_alias *alias;
>  	int ret;
> @@ -257,6 +257,8 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
>  	}
>  
>  	alias->desc = desc ? strdup(desc) : NULL;
> +	alias->long_desc = long_desc ? strdup(long_desc) :
> +				desc ? strdup(desc) : NULL;
>  
>  	list_add_tail(&alias->list, list);
>  
> @@ -274,7 +276,7 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI
>  
>  	buf[ret] = 0;
>  
> -	return __perf_pmu__new_alias(list, dir, name, NULL, buf);
> +	return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL);
>  }
>  
>  static inline bool pmu_alias_info_file(char *name)
> @@ -532,7 +534,8 @@ static int pmu_add_cpu_aliases(struct list_head *head)
>  
>  		/* need type casts to override 'const' */
>  		__perf_pmu__new_alias(head, NULL, (char *)pe->name,
> -				(char *)pe->desc, (char *)pe->event);
> +				(char *)pe->desc, (char *)pe->event,
> +				(char *)pe->long_desc);
>  	}
>  
>  out:
> @@ -1091,7 +1094,8 @@ static void wordwrap(char *s, int start, int max, int corr)
>  	}
>  }
>  
> -void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag)
> +void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
> +			bool long_desc)
>  {
>  	struct perf_pmu *pmu;
>  	struct perf_pmu_alias *alias;
> @@ -1139,7 +1143,8 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag)
>  			if (!aliases[j].name)
>  				goto out_enomem;
>  
> -			aliases[j].desc = alias->desc;
> +			aliases[j].desc = long_desc ? alias->long_desc :
> +						alias->desc;
>  			j++;
>  		}
>  		if (pmu->selectable &&
> diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
> index 42999c7..1aa614e 100644
> --- a/tools/perf/util/pmu.h
> +++ b/tools/perf/util/pmu.h
> @@ -39,6 +39,7 @@ struct perf_pmu_info {
>  struct perf_pmu_alias {
>  	char *name;
>  	char *desc;
> +	char *long_desc;
>  	struct list_head terms; /* HEAD struct parse_events_term -> list */
>  	struct list_head list;  /* ELEM */
>  	char unit[UNIT_MAX_LEN+1];
> @@ -70,7 +71,8 @@ int perf_pmu__format_parse(char *dir, struct list_head *head);
>  
>  struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
>  
> -void print_pmu_events(const char *event_glob, bool name_only, bool quiet);
> +void print_pmu_events(const char *event_glob, bool name_only, bool quiet,
> +		      bool long_desc);
>  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,
> -- 
> 1.8.3.1