perf tools: Add a global variable "const char *input_name"
authorFeng Tang <feng.tang@intel.com>
Tue, 30 Oct 2012 03:56:02 +0000 (11:56 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 29 Oct 2012 13:45:34 +0000 (11:45 -0200)
Currently many perf commands annotate/evlist/report/script/lock etc all
support "-i" option to chose a specific perf data, and all of them
create a local "input_name" to save the file name for that perf data.

Since most of these commands need it, we can add a global variable for
it, also it can some other benefits:

1. When calling script browser inside hists/annotation browser, it needs
to know the perf data file name to run that script.

2. For further feature like runtime switching to another perf data file,
this variable can also help.

Signed-off-by: Feng Tang <feng.tang@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1351569369-26732-2-git-send-email-feng.tang@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-annotate.c
tools/perf/builtin-buildid-list.c
tools/perf/builtin-evlist.c
tools/perf/builtin-kmem.c
tools/perf/builtin-lock.c
tools/perf/builtin-report.c
tools/perf/builtin-sched.c
tools/perf/builtin-script.c
tools/perf/builtin-timechart.c
tools/perf/perf.c
tools/perf/perf.h

index c4bb6457b19edd4e5bc21d8dcc737f88556d1fe8..cb234765ce3d1fbd583bf73915f6131a79c80e46 100644 (file)
@@ -34,7 +34,6 @@
 
 struct perf_annotate {
        struct perf_tool tool;
-       char const *input_name;
        bool       force, use_tui, use_stdio;
        bool       full_paths;
        bool       print_line;
@@ -175,7 +174,7 @@ static int __cmd_annotate(struct perf_annotate *ann)
        struct perf_evsel *pos;
        u64 total_nr_samples;
 
-       session = perf_session__new(ann->input_name, O_RDONLY,
+       session = perf_session__new(input_name, O_RDONLY,
                                    ann->force, false, &ann->tool);
        if (session == NULL)
                return -ENOMEM;
@@ -260,7 +259,7 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)
                },
        };
        const struct option options[] = {
-       OPT_STRING('i', "input", &annotate.input_name, "file",
+       OPT_STRING('i', "input", &input_name, "file",
                    "input file name"),
        OPT_STRING('d', "dsos", &symbol_conf.dso_list_str, "dso[,dso...]",
                   "only consider symbols in these dsos"),
index a0e94fffa03ec123255f37738389d36229ac4c39..a82d99fec83e2b2f9b1e9ea1d941847baa5243fc 100644 (file)
@@ -44,8 +44,7 @@ static int filename__fprintf_build_id(const char *name, FILE *fp)
        return fprintf(fp, "%s\n", sbuild_id);
 }
 
-static int perf_session__list_build_ids(const char *input_name,
-                                       bool force, bool with_hits)
+static int perf_session__list_build_ids(bool force, bool with_hits)
 {
        struct perf_session *session;
 
@@ -81,7 +80,6 @@ int cmd_buildid_list(int argc, const char **argv,
        bool show_kernel = false;
        bool with_hits = false;
        bool force = false;
-       const char *input_name = NULL;
        const struct option options[] = {
        OPT_BOOLEAN('H', "with-hits", &with_hits, "Show only DSOs with hits"),
        OPT_STRING('i', "input", &input_name, "file", "input file name"),
@@ -101,5 +99,5 @@ int cmd_buildid_list(int argc, const char **argv,
        if (show_kernel)
                return sysfs__fprintf_build_id(stdout);
 
-       return perf_session__list_build_ids(input_name, force, with_hits);
+       return perf_session__list_build_ids(force, with_hits);
 }
index 997afb82691b8afe71660169484bc4473bd39793..c20f1dcfb7e226f3348727c9957d3260554a032d 100644 (file)
@@ -48,12 +48,12 @@ static int __if_print(bool *first, const char *field, u64 value)
 
 #define if_print(field) __if_print(&first, #field, pos->attr.field)
 
-static int __cmd_evlist(const char *input_name, struct perf_attr_details *details)
+static int __cmd_evlist(const char *file_name, struct perf_attr_details *details)
 {
        struct perf_session *session;
        struct perf_evsel *pos;
 
-       session = perf_session__new(input_name, O_RDONLY, 0, false, NULL);
+       session = perf_session__new(file_name, O_RDONLY, 0, false, NULL);
        if (session == NULL)
                return -ENOMEM;
 
@@ -111,7 +111,6 @@ static int __cmd_evlist(const char *input_name, struct perf_attr_details *detail
 int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
 {
        struct perf_attr_details details = { .verbose = false, };
-       const char *input_name = NULL;
        const struct option options[] = {
        OPT_STRING('i', "input", &input_name, "file", "Input file name"),
        OPT_BOOLEAN('F', "freq", &details.freq, "Show the sample frequency"),
index 14bf82f6365950e275cd00823f1ecfb8c815c494..0b4b796167beca45dc12736527fa7bcfe2560d9e 100644 (file)
@@ -477,7 +477,7 @@ static void sort_result(void)
        __sort_result(&root_caller_stat, &root_caller_sorted, &caller_sort);
 }
 
-static int __cmd_kmem(const char *input_name)
+static int __cmd_kmem(void)
 {
        int err = -EINVAL;
        struct perf_session *session;
@@ -743,7 +743,6 @@ static int __cmd_record(int argc, const char **argv)
 int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)
 {
        const char * const default_sort_order = "frag,hit,bytes";
-       const char *input_name = NULL;
        const struct option kmem_options[] = {
        OPT_STRING('i', "input", &input_name, "file", "input file name"),
        OPT_CALLBACK_NOOPT(0, "caller", NULL, NULL,
@@ -779,7 +778,7 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)
                if (list_empty(&alloc_sort))
                        setup_sorting(&alloc_sort, default_sort_order);
 
-               return __cmd_kmem(input_name);
+               return __cmd_kmem();
        } else
                usage_with_options(kmem_usage, kmem_options);
 
index 6f5f328157aa623f34cbd1c112a3b218d5c0b9c1..4258300697493ecdd2758c82a080834ed7f69dd6 100644 (file)
@@ -335,8 +335,6 @@ alloc_failed:
        return NULL;
 }
 
-static const char *input_name;
-
 struct trace_lock_handler {
        int (*acquire_event)(struct perf_evsel *evsel,
                             struct perf_sample *sample);
index 90d1162bb8b84f0e9db9ce2eb425f54ec799395c..f07eae73e692e60ade48129cde75cf468a683ce4 100644 (file)
@@ -40,7 +40,6 @@
 struct perf_report {
        struct perf_tool        tool;
        struct perf_session     *session;
-       char const              *input_name;
        bool                    force, use_tui, use_gtk, use_stdio;
        bool                    hide_unresolved;
        bool                    dont_use_callchains;
@@ -571,7 +570,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
                .pretty_printing_style   = "normal",
        };
        const struct option options[] = {
-       OPT_STRING('i', "input", &report.input_name, "file",
+       OPT_STRING('i', "input", &input_name, "file",
                    "input file name"),
        OPT_INCR('v', "verbose", &verbose,
                    "be more verbose (show symbol address, etc)"),
@@ -657,13 +656,13 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
        if (report.inverted_callchain)
                callchain_param.order = ORDER_CALLER;
 
-       if (!report.input_name || !strlen(report.input_name)) {
+       if (!input_name || !strlen(input_name)) {
                if (!fstat(STDIN_FILENO, &st) && S_ISFIFO(st.st_mode))
-                       report.input_name = "-";
+                       input_name = "-";
                else
-                       report.input_name = "perf.data";
+                       input_name = "perf.data";
        }
-       session = perf_session__new(report.input_name, O_RDONLY,
+       session = perf_session__new(input_name, O_RDONLY,
                                    report.force, false, &report.tool);
        if (session == NULL)
                return -ENOMEM;
@@ -694,7 +693,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
 
        }
 
-       if (strcmp(report.input_name, "-") != 0)
+       if (strcmp(input_name, "-") != 0)
                setup_browser(true);
        else {
                use_browser = 0;
index 30e53360d3c22e536d66539282d4db1b8736638d..cc28b85dabd5a6d6c5cd70d92c726f1fe7fb33f6 100644 (file)
@@ -120,7 +120,6 @@ struct trace_sched_handler {
 
 struct perf_sched {
        struct perf_tool tool;
-       const char       *input_name;
        const char       *sort_order;
        unsigned long    nr_tasks;
        struct task_desc *pid_to_task[MAX_PID];
@@ -1460,7 +1459,7 @@ static int perf_sched__read_events(struct perf_sched *sched, bool destroy,
        };
        struct perf_session *session;
 
-       session = perf_session__new(sched->input_name, O_RDONLY, 0, false, &sched->tool);
+       session = perf_session__new(input_name, O_RDONLY, 0, false, &sched->tool);
        if (session == NULL) {
                pr_debug("No Memory for session\n");
                return -1;
@@ -1708,7 +1707,7 @@ int cmd_sched(int argc, const char **argv, const char *prefix __maybe_unused)
        OPT_END()
        };
        const struct option sched_options[] = {
-       OPT_STRING('i', "input", &sched.input_name, "file",
+       OPT_STRING('i', "input", &input_name, "file",
                    "input file name"),
        OPT_INCR('v', "verbose", &verbose,
                    "be more verbose (show symbol address, etc)"),
index 04ceb0779d399037567cc80b0f97a7e8e131ebc3..7c6e4b2f401a744d8e5fa0a9c430671c87e70bc0 100644 (file)
@@ -1175,7 +1175,6 @@ static int have_cmd(int argc, const char **argv)
 int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
 {
        bool show_full_info = false;
-       const char *input_name = NULL;
        char *rec_script_path = NULL;
        char *rep_script_path = NULL;
        struct perf_session *session;
index f251b613b2f3e89dd345cb7fdc231d10c96b340e..ab4cf232b8522db25dfaeaf399c05790053d39c9 100644 (file)
@@ -965,7 +965,7 @@ static void write_svg_file(const char *filename)
        svg_close();
 }
 
-static int __cmd_timechart(const char *input_name, const char *output_name)
+static int __cmd_timechart(const char *output_name)
 {
        struct perf_tool perf_timechart = {
                .comm            = process_comm_event,
@@ -1061,7 +1061,6 @@ parse_process(const struct option *opt __maybe_unused, const char *arg,
 int cmd_timechart(int argc, const char **argv,
                  const char *prefix __maybe_unused)
 {
-       const char *input_name;
        const char *output_name = "output.svg";
        const struct option options[] = {
        OPT_STRING('i', "input", &input_name, "file", "input file name"),
@@ -1092,5 +1091,5 @@ int cmd_timechart(int argc, const char **argv,
 
        setup_pager();
 
-       return __cmd_timechart(input_name, output_name);
+       return __cmd_timechart(output_name);
 }
index d480d8a412b88addb457f580b5d0fa0160604d77..e9683738d89f04e3e0446bca1e5e185893da236f 100644 (file)
@@ -24,6 +24,7 @@ const char perf_more_info_string[] =
 
 int use_browser = -1;
 static int use_pager = -1;
+const char *input_name;
 
 struct cmd_struct {
        const char *cmd;
index c50985eaec41f479d2593dab749d061d3cb03c3d..469fbf2daea49cfeb86b9bcb1c876cf751929071 100644 (file)
@@ -208,6 +208,7 @@ struct branch_stack {
        struct branch_entry     entries[0];
 };
 
+extern const char *input_name;
 extern bool perf_host, perf_guest;
 extern const char perf_version_string[];