Commit-ID:  74ec14f3893c3065053b91cec850cffa2d565e0a
Gitweb:     http://git.kernel.org/tip/74ec14f3893c3065053b91cec850cffa2d565e0a
Author:     Arun Kalyanasundaram <arunk...@google.com>
AuthorDate: Fri, 21 Jul 2017 15:04:20 -0700
Committer:  Arnaldo Carvalho de Melo <a...@redhat.com>
CommitDate: Tue, 25 Jul 2017 22:43:19 -0300

perf script python: Add sample_read to dict

Provide time_enabled, time_running and counter value in the perf_sample
dict.

Signed-off-by: Arun Kalyanasundaram <arunk...@google.com>
Acked-by: Jiri Olsa <jo...@kernel.org>
Cc: Alexander Shishkin <alexander.shish...@linux.intel.com>
Cc: Daniel Borkmann <dan...@iogearbox.net>
Cc: David Carrillo-Cisneros <davi...@google.com>
Cc: David S. Miller <da...@davemloft.net>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Seongjae Park <sj38.p...@gmail.com>
Cc: Stephane Eranian <eran...@google.com>
Link: http://lkml.kernel.org/r/20170721220422.63962-4-arunk...@google.com
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 .../util/scripting-engines/trace-event-python.c    | 51 ++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/tools/perf/util/scripting-engines/trace-event-python.c 
b/tools/perf/util/scripting-engines/trace-event-python.c
index 69d1b6d..55a4578 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -391,6 +391,56 @@ exit:
        return pylist;
 }
 
+static PyObject *get_sample_value_as_tuple(struct sample_read_value *value)
+{
+       PyObject *t;
+
+       t = PyTuple_New(2);
+       if (!t)
+               Py_FatalError("couldn't create Python tuple");
+       PyTuple_SetItem(t, 0, PyLong_FromUnsignedLongLong(value->id));
+       PyTuple_SetItem(t, 1, PyLong_FromUnsignedLongLong(value->value));
+       return t;
+}
+
+static void set_sample_read_in_dict(PyObject *dict_sample,
+                                        struct perf_sample *sample,
+                                        struct perf_evsel *evsel)
+{
+       u64 read_format = evsel->attr.read_format;
+       PyObject *values;
+       unsigned int i;
+
+       if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) {
+               pydict_set_item_string_decref(dict_sample, "time_enabled",
+                       PyLong_FromUnsignedLongLong(sample->read.time_enabled));
+       }
+
+       if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING) {
+               pydict_set_item_string_decref(dict_sample, "time_running",
+                       PyLong_FromUnsignedLongLong(sample->read.time_running));
+       }
+
+       if (read_format & PERF_FORMAT_GROUP)
+               values = PyList_New(sample->read.group.nr);
+       else
+               values = PyList_New(1);
+
+       if (!values)
+               Py_FatalError("couldn't create Python list");
+
+       if (read_format & PERF_FORMAT_GROUP) {
+               for (i = 0; i < sample->read.group.nr; i++) {
+                       PyObject *t = 
get_sample_value_as_tuple(&sample->read.group.values[i]);
+                       PyList_SET_ITEM(values, i, t);
+               }
+       } else {
+               PyObject *t = get_sample_value_as_tuple(&sample->read.one);
+               PyList_SET_ITEM(values, 0, t);
+       }
+       pydict_set_item_string_decref(dict_sample, "values", values);
+}
+
 static PyObject *get_perf_sample_dict(struct perf_sample *sample,
                                         struct perf_evsel *evsel,
                                         struct addr_location *al,
@@ -422,6 +472,7 @@ static PyObject *get_perf_sample_dict(struct perf_sample 
*sample,
                        PyLong_FromUnsignedLongLong(sample->time));
        pydict_set_item_string_decref(dict_sample, "period",
                        PyLong_FromUnsignedLongLong(sample->period));
+       set_sample_read_in_dict(dict_sample, sample, evsel);
        pydict_set_item_string_decref(dict, "sample", dict_sample);
 
        pydict_set_item_string_decref(dict, "raw_buf", 
PyString_FromStringAndSize(

Reply via email to