perf scripting: Add 'flush' callback to scripting API
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 15 Aug 2014 19:08:37 +0000 (22:08 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 22 Aug 2014 16:12:11 +0000 (13:12 -0300)
In order to defer some output via the scripting API, there needs to be a
callback after session processing but before the session is deleted.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1408129739-17368-3-git-send-email-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 c1b7029884b139f4e9bf30cf56a39e22ba2bd628..02dce9295e2c7eec4dfd9bfcac1d33f37f6e0a60 100644 (file)
@@ -485,6 +485,11 @@ static int default_start_script(const char *script __maybe_unused,
        return 0;
 }
 
+static int default_flush_script(void)
+{
+       return 0;
+}
+
 static int default_stop_script(void)
 {
        return 0;
@@ -498,6 +503,7 @@ static int default_generate_script(struct pevent *pevent __maybe_unused,
 
 static struct scripting_ops default_scripting_ops = {
        .start_script           = default_start_script,
+       .flush_script           = default_flush_script,
        .stop_script            = default_stop_script,
        .process_event          = process_event,
        .generate_script        = default_generate_script,
@@ -513,6 +519,11 @@ static void setup_scripting(void)
        scripting_ops = &default_scripting_ops;
 }
 
+static int flush_scripting(void)
+{
+       return scripting_ops->flush_script();
+}
+
 static int cleanup_scripting(void)
 {
        pr_debug("\nperf script stopped\n");
@@ -1813,6 +1824,8 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
 
        err = __cmd_script(&script);
 
+       flush_scripting();
+
 out_delete:
        perf_session__delete(session);
 
index b2dba9c0a3a1843e91d0095e71845af45db1d5df..0a01bac4ce023e136ef15357e80360a90f35d40e 100644 (file)
@@ -432,6 +432,11 @@ error:
        return err;
 }
 
+static int perl_flush_script(void)
+{
+       return 0;
+}
+
 /*
  * Stop trace script
  */
@@ -633,6 +638,7 @@ static int perl_generate_script(struct pevent *pevent, const char *outfile)
 struct scripting_ops perl_scripting_ops = {
        .name = "Perl",
        .start_script = perl_start_script,
+       .flush_script = perl_flush_script,
        .stop_script = perl_stop_script,
        .process_event = perl_process_event,
        .generate_script = perl_generate_script,
index 26e5f14239edb43023e35395c3fc7f361b65ee43..56ba07cce549ef5b5a79c2f2ae31e0799f245907 100644 (file)
@@ -639,6 +639,11 @@ error:
        return err;
 }
 
+static int python_flush_script(void)
+{
+       return 0;
+}
+
 /*
  * Stop trace script
  */
@@ -823,6 +828,7 @@ static int python_generate_script(struct pevent *pevent, const char *outfile)
 struct scripting_ops python_scripting_ops = {
        .name = "Python",
        .start_script = python_start_script,
+       .flush_script = python_flush_script,
        .stop_script = python_stop_script,
        .process_event = python_process_event,
        .generate_script = python_generate_script,
index 57aaccc1692e616ee0f257c90472272541f7d5b3..5c9bdd1591a975c2d1f7f028701504f228da70a0 100644 (file)
 
 struct scripting_context *scripting_context;
 
+static int flush_script_unsupported(void)
+{
+       return 0;
+}
+
 static int stop_script_unsupported(void)
 {
        return 0;
@@ -74,6 +79,7 @@ static int python_generate_script_unsupported(struct pevent *pevent
 struct scripting_ops python_scripting_unsupported_ops = {
        .name = "Python",
        .start_script = python_start_script_unsupported,
+       .flush_script = flush_script_unsupported,
        .stop_script = stop_script_unsupported,
        .process_event = process_event_unsupported,
        .generate_script = python_generate_script_unsupported,
@@ -137,6 +143,7 @@ static int perl_generate_script_unsupported(struct pevent *pevent
 struct scripting_ops perl_scripting_unsupported_ops = {
        .name = "Perl",
        .start_script = perl_start_script_unsupported,
+       .flush_script = flush_script_unsupported,
        .stop_script = stop_script_unsupported,
        .process_event = process_event_unsupported,
        .generate_script = perl_generate_script_unsupported,
index 7b6d68688327a75286eb3ab1a77fea15bb74ffb8..52aaa19e1eb13125dd30c4c82b6abe2d89de2735 100644 (file)
@@ -64,6 +64,7 @@ struct perf_session;
 struct scripting_ops {
        const char *name;
        int (*start_script) (const char *script, int argc, const char **argv);
+       int (*flush_script) (void);
        int (*stop_script) (void);
        void (*process_event) (union perf_event *event,
                               struct perf_sample *sample,