diff options
| author | Arun Kalyanasundaram <arunkaly@google.com> | 2017-07-21 15:04:20 -0700 | 
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-07-25 22:43:19 -0300 | 
| commit | 74ec14f3893c3065053b91cec850cffa2d565e0a (patch) | |
| tree | 59bb340703d16f11b1c3795596ac7f1d8a527840 /tools/perf/util/scripting-engines | |
| parent | 892e76b2e8c5e85e69514478e3319575a68b9770 (diff) | |
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 <arunkaly@google.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: David Carrillo-Cisneros <davidcc@google.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Seongjae Park <sj38.park@gmail.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/20170721220422.63962-4-arunkaly@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/scripting-engines')
| -rw-r--r-- | tools/perf/util/scripting-engines/trace-event-python.c | 51 | 
1 files changed, 51 insertions, 0 deletions
| diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 69d1b6db96f6..55a45784c910 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( | 
