perf scripting: Add perf_session to scripting_context
authorAdrian Hunter <adrian.hunter@intel.com>
Sun, 30 May 2021 19:22:59 +0000 (22:22 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 1 Jun 2021 13:03:17 +0000 (10:03 -0300)
This is preparation for allowing a script to set the itrace options
for the session if they have not already been set.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/r/20210530192308.7382-5-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-script.c
tools/perf/util/scripting-engines/trace-event-perl.c
tools/perf/util/scripting-engines/trace-event-python.c
tools/perf/util/trace-event-scripting.c
tools/perf/util/trace-event.h

index 7a7a19f..fd5c257 100644 (file)
@@ -4017,7 +4017,7 @@ script_found:
        }
 
        if (script_name) {
-               err = scripting_ops->start_script(script_name, argc, argv);
+               err = scripting_ops->start_script(script_name, argc, argv, session);
                if (err)
                        goto out_delete;
                pr_debug("perf script started with script %s\n\n", script_name);
index 5bbf00c..32a721b 100644 (file)
@@ -473,11 +473,14 @@ static void run_start_sub(void)
 /*
  * Start trace script
  */
-static int perl_start_script(const char *script, int argc, const char **argv)
+static int perl_start_script(const char *script, int argc, const char **argv,
+                            struct perf_session *session)
 {
        const char **command_line;
        int i, err = 0;
 
+       scripting_context->session = session;
+
        command_line = malloc((argc + 2) * sizeof(const char *));
        command_line[0] = "";
        command_line[1] = script;
index d99f719..02d134b 100644 (file)
@@ -1746,7 +1746,8 @@ static void _free_command_line(wchar_t **command_line, int num)
 /*
  * Start trace script
  */
-static int python_start_script(const char *script, int argc, const char **argv)
+static int python_start_script(const char *script, int argc, const char **argv,
+                              struct perf_session *session)
 {
        struct tables *tables = &tables_global;
 #if PY_MAJOR_VERSION < 3
@@ -1762,6 +1763,7 @@ static int python_start_script(const char *script, int argc, const char **argv)
        int i, err = 0;
        FILE *fp;
 
+       scripting_context->session = session;
 #if PY_MAJOR_VERSION < 3
        command_line = malloc((argc + 1) * sizeof(const char *));
        command_line[0] = script;
index a2f0c1e..7172ca0 100644 (file)
@@ -66,7 +66,8 @@ static void print_python_unsupported_msg(void)
 
 static int python_start_script_unsupported(const char *script __maybe_unused,
                                           int argc __maybe_unused,
-                                          const char **argv __maybe_unused)
+                                          const char **argv __maybe_unused,
+                                          struct perf_session *session __maybe_unused)
 {
        print_python_unsupported_msg();
 
@@ -131,7 +132,8 @@ static void print_perl_unsupported_msg(void)
 
 static int perl_start_script_unsupported(const char *script __maybe_unused,
                                         int argc __maybe_unused,
-                                        const char **argv __maybe_unused)
+                                        const char **argv __maybe_unused,
+                                        struct perf_session *session __maybe_unused)
 {
        print_perl_unsupported_msg();
 
index a939318..73f5b29 100644 (file)
@@ -73,7 +73,8 @@ struct perf_stat_config;
 struct scripting_ops {
        const char *name;
        const char *dirname; /* For script path .../scripts/<dirname>/... */
-       int (*start_script) (const char *script, int argc, const char **argv);
+       int (*start_script)(const char *script, int argc, const char **argv,
+                           struct perf_session *session);
        int (*flush_script) (void);
        int (*stop_script) (void);
        void (*process_event) (union perf_event *event,
@@ -107,6 +108,7 @@ struct scripting_context {
        struct evsel *evsel;
        struct addr_location *al;
        struct addr_location *addr_al;
+       struct perf_session *session;
 };
 
 void scripting_context__update(struct scripting_context *scripting_context,