From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752594AbcAPQEq (ORCPT ); Sat, 16 Jan 2016 11:04:46 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:33635 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752535AbcAPQEn (ORCPT ); Sat, 16 Jan 2016 11:04:43 -0500 From: Namhyung Kim To: Arnaldo Carvalho de Melo Cc: Ingo Molnar , Peter Zijlstra , Jiri Olsa , LKML , David Ahern , Stephane Eranian , Andi Kleen , Wang Nan Subject: [PATCH 08/17] perf hists browser: Fix context menu item Date: Sun, 17 Jan 2016 01:03:08 +0900 Message-Id: <1452960197-5323-9-git-send-email-namhyung@kernel.org> X-Mailer: git-send-email 2.6.4 In-Reply-To: <1452960197-5323-1-git-send-email-namhyung@kernel.org> References: <1452960197-5323-1-git-send-email-namhyung@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Signed-off-by: Namhyung Kim --- 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