Em Sun, Jan 17, 2016 at 01:03:08AM +0900, Namhyung Kim escreveu:
> When symbol sort key is not given, it doesn't show any item other than
> exit.  Check sort key to select possible items.  Also check items more
> strictly using sort key information.

So, without this patch when I press enter on 'perf top' I can zoom into
threads, with it I lose that option.

- Arnaldo
 
> Signed-off-by: Namhyung Kim <[email protected]>
> ---
>  tools/perf/ui/browsers/hists.c | 50 
> ++++++++++++++++++++++++------------------
>  tools/perf/util/sort.c         |  3 +++
>  tools/perf/util/sort.h         |  2 ++
>  3 files changed, 34 insertions(+), 21 deletions(-)
> 
> diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
> index 08c09ad755d2..cd6349ebd0d6 100644
> --- a/tools/perf/ui/browsers/hists.c
> +++ b/tools/perf/ui/browsers/hists.c
> @@ -2263,10 +2263,7 @@ static int perf_evsel__hists_browse(struct perf_evsel 
> *evsel, int nr_events,
>                       continue;
>               }
>  
> -             if (!sort__has_sym)
> -                     goto add_exit_option;
> -
> -             if (browser->selection == NULL)
> +             if (!sort__has_sym || browser->selection == NULL)
>                       goto skip_annotation;
>  
>               if (sort__mode == SORT_MODE__BRANCH) {
> @@ -2294,23 +2291,33 @@ static int perf_evsel__hists_browse(struct perf_evsel 
> *evsel, int nr_events,
>                                                      browser->selection->sym);
>               }
>  skip_annotation:
> -             nr_options += add_thread_opt(browser, &actions[nr_options],
> -                                          &options[nr_options], thread);
> -             nr_options += add_dso_opt(browser, &actions[nr_options],
> -                                       &options[nr_options], map);
> -             nr_options += add_map_opt(browser, &actions[nr_options],
> -                                       &options[nr_options],
> -                                       browser->selection ?
> -                                             browser->selection->map : NULL);
> -             nr_options += add_socket_opt(browser, &actions[nr_options],
> -                                          &options[nr_options],
> -                                          socked_id);
> +             if (sort__has_thread) {
> +                     nr_options += add_thread_opt(browser, 
> &actions[nr_options],
> +                                                  &options[nr_options], 
> thread);
> +             }
> +             if (sort__has_dso) {
> +                     nr_options += add_dso_opt(browser, &actions[nr_options],
> +                                               &options[nr_options], map);
> +                     nr_options += add_map_opt(browser, &actions[nr_options],
> +                                               &options[nr_options],
> +                                               browser->selection ?
> +                                               browser->selection->map : 
> NULL);
> +             }
> +             if (sort__has_socket) {
> +                     nr_options += add_socket_opt(browser, 
> &actions[nr_options],
> +                                                  &options[nr_options],
> +                                                  socked_id);
> +             }
> +
>               /* perf script support */
>               if (browser->he_selection) {
> -                     nr_options += add_script_opt(browser,
> -                                                  &actions[nr_options],
> -                                                  &options[nr_options],
> -                                                  thread, NULL);
> +                     if (sort__has_thread) {
> +                             nr_options += add_script_opt(browser,
> +                                                          
> &actions[nr_options],
> +                                                          
> &options[nr_options],
> +                                                          thread, NULL);
> +                     }
> +
>                       /*
>                        * Note that browser->selection != NULL
>                        * when browser->he_selection is not NULL,
> @@ -2320,16 +2327,17 @@ skip_annotation:
>                        *
>                        * See hist_browser__show_entry.
>                        */
> -                     nr_options += add_script_opt(browser,
> +                     if (sort__has_sym && browser->selection->sym) {
> +                             nr_options += add_script_opt(browser,
>                                                    &actions[nr_options],
>                                                    &options[nr_options],
>                                                    NULL, 
> browser->selection->sym);
> +                     }
>               }
>               nr_options += add_script_opt(browser, &actions[nr_options],
>                                            &options[nr_options], NULL, NULL);
>               nr_options += add_switch_opt(browser, &actions[nr_options],
>                                            &options[nr_options]);
> -add_exit_option:
>               nr_options += add_exit_opt(browser, &actions[nr_options],
>                                          &options[nr_options]);
>  
> diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
> index 4632475bc5e4..8ff873ee39a8 100644
> --- a/tools/perf/util/sort.c
> +++ b/tools/perf/util/sort.c
> @@ -21,6 +21,7 @@ const char  *field_order;
>  regex_t              ignore_callees_regex;
>  int          have_ignore_callees = 0;
>  int          sort__need_collapse = 0;
> +int          sort__has_thread = 0;
>  int          sort__has_parent = 0;
>  int          sort__has_sym = 0;
>  int          sort__has_dso = 0;
> @@ -2249,6 +2250,8 @@ static int sort_dimension__add(const char *tok,
>                       sort__has_dso = 1;
>               } else if (sd->entry == &sort_socket) {
>                       sort__has_socket = 1;
> +             } else if (sd->entry == &sort_comm || sd->entry == 
> &sort_thread) {
> +                     sort__has_thread = 1;
>               }
>  
>               return __sort_dimension__add(sd);
> diff --git a/tools/perf/util/sort.h b/tools/perf/util/sort.h
> index 051739615847..879513e61dba 100644
> --- a/tools/perf/util/sort.h
> +++ b/tools/perf/util/sort.h
> @@ -32,7 +32,9 @@ extern const char default_sort_order[];
>  extern regex_t ignore_callees_regex;
>  extern int have_ignore_callees;
>  extern int sort__need_collapse;
> +extern int sort__has_thread;
>  extern int sort__has_parent;
> +extern int sort__has_dso;
>  extern int sort__has_sym;
>  extern int sort__has_socket;
>  extern enum sort_mode sort__mode;
> -- 
> 2.6.4

Reply via email to