Integrate the script browser into "perf report" framework, users can
use function key 'r' or the drop down menu to list all perf scripts
and select one of them, just like they did for the annotation.

Signed-off-by: Feng Tang <feng.t...@intel.com>
---
 tools/perf/ui/browsers/hists.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index a21f40b..c491b78 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -1139,6 +1139,7 @@ static int perf_evsel__hists_browse(struct perf_evsel 
*evsel, int nr_events,
        int nr_options = 0;
        int key = -1;
        char buf[64];
+       char script_opt[64];
 
        if (browser == NULL)
                return -1;
@@ -1149,6 +1150,7 @@ static int perf_evsel__hists_browse(struct perf_evsel 
*evsel, int nr_events,
 
        ui_helpline__push(helpline);
 
+       memset(script_opt, 0, 64);
        memset(options, 0, sizeof(options));
 
        while (1) {
@@ -1157,6 +1159,7 @@ static int perf_evsel__hists_browse(struct perf_evsel 
*evsel, int nr_events,
                int choice = 0,
                    annotate = -2, zoom_dso = -2, zoom_thread = -2,
                    annotate_f = -2, annotate_t = -2, browse_map = -2;
+               int scripts_comm = -2, scripts_symbol = -2, scripts_all = -2;
 
                nr_options = 0;
 
@@ -1209,6 +1212,8 @@ static int perf_evsel__hists_browse(struct perf_evsel 
*evsel, int nr_events,
                                hist_browser__reset(browser);
                        }
                        continue;
+               case 'r':
+                       goto do_scripts;
                case K_F1:
                case 'h':
                case '?':
@@ -1227,6 +1232,7 @@ static int perf_evsel__hists_browse(struct perf_evsel 
*evsel, int nr_events,
                                        "E             Expand all callchains\n"
                                        "d             Zoom into current DSO\n"
                                        "t             Zoom into current 
Thread\n"
+                                       "r             Run available scripts\n"
                                        "P             Print histograms to 
perf.hist.N\n"
                                        "V             Verbose (DSO names in 
callchains, etc)\n"
                                        "/             Filter symbol by name");
@@ -1315,6 +1321,25 @@ static int perf_evsel__hists_browse(struct perf_evsel 
*evsel, int nr_events,
                    browser->selection->map != NULL &&
                    asprintf(&options[nr_options], "Browse map details") > 0)
                        browse_map = nr_options++;
+
+               /* perf script support */
+               if (browser->he_selection) {
+                       struct symbol *sym;
+
+                       if (asprintf(&options[nr_options], "Run scripts for 
samples of thread [%s]",
+                               browser->he_selection->thread->comm) > 0)
+                               scripts_comm = nr_options++;
+
+                       sym = browser->he_selection->ms.sym;
+                       if (sym && sym->namelen &&
+                               asprintf(&options[nr_options], "Run scripts for 
samples of symbol [%s]",
+                                               sym->name) > 0)
+                               scripts_symbol = nr_options++;
+               }
+
+               if (asprintf(&options[nr_options], "Run scripts for all 
samples") > 0)
+                       scripts_all = nr_options++;
+
 add_exit_option:
                options[nr_options++] = (char *)"Exit";
 retry_popup_menu:
@@ -1409,6 +1434,18 @@ zoom_out_thread:
                        hists__filter_by_thread(hists);
                        hist_browser__reset(browser);
                }
+               /* perf scripts support */
+               else if (choice == scripts_all || choice == scripts_comm ||
+                               choice == scripts_symbol) {
+do_scripts:
+                       if (choice == scripts_comm)
+                               sprintf(script_opt, " -c %s ", 
browser->he_selection->thread->comm);
+
+                       if (choice == scripts_symbol)
+                               sprintf(script_opt, " -S %s ", 
browser->he_selection->ms.sym->name);
+
+                       script_browse(script_opt);
+               }
        }
 out_free_stack:
        pstack__delete(fstack);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to