mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 13:06:59 +02:00
perf python: Add evlist metrics function
The function returns a list of the names of metrics within the
evlist. For example:
```
>>> import perf
>>> perf.parse_metrics("TopdownL1").metrics()
['tma_bad_speculation', 'tma_frontend_bound', 'tma_backend_bound', 'tma_retiring']
```
Reviewed-by: Howard Chu <howardchu95@gmail.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Chun-Tse Shao <ctshao@google.com>
Cc: Collin Funk <collin.funk1@gmail.com>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: Gautam Menghani <gautam@linux.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Falcon <thomas.falcon@intel.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
Cc: Weilin Wang <weilin.wang@intel.com>
Cc: Xu Yang <xu.yang_2@nxp.com>
Link: https://lore.kernel.org/r/20250819013941.209033-8-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d0550be70f
commit
5ffa0246db
|
|
@ -1303,6 +1303,33 @@ static PyObject *pyrf_evlist__all_cpus(struct pyrf_evlist *pevlist)
|
|||
return (PyObject *)pcpu_map;
|
||||
}
|
||||
|
||||
static PyObject *pyrf_evlist__metrics(struct pyrf_evlist *pevlist)
|
||||
{
|
||||
PyObject *list = PyList_New(/*len=*/0);
|
||||
struct rb_node *node;
|
||||
|
||||
if (!list)
|
||||
return NULL;
|
||||
|
||||
for (node = rb_first_cached(&pevlist->evlist.metric_events.entries); node;
|
||||
node = rb_next(node)) {
|
||||
struct metric_event *me = container_of(node, struct metric_event, nd);
|
||||
struct list_head *pos;
|
||||
|
||||
list_for_each(pos, &me->head) {
|
||||
struct metric_expr *expr = container_of(pos, struct metric_expr, nd);
|
||||
PyObject *str = PyUnicode_FromString(expr->metric_name);
|
||||
|
||||
if (!str || PyList_Append(list, str) != 0) {
|
||||
Py_DECREF(list);
|
||||
return NULL;
|
||||
}
|
||||
Py_DECREF(str);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
static PyObject *pyrf_evlist__mmap(struct pyrf_evlist *pevlist,
|
||||
PyObject *args, PyObject *kwargs)
|
||||
{
|
||||
|
|
@ -1531,6 +1558,12 @@ static PyMethodDef pyrf_evlist__methods[] = {
|
|||
.ml_flags = METH_NOARGS,
|
||||
.ml_doc = PyDoc_STR("CPU map union of all evsel CPU maps.")
|
||||
},
|
||||
{
|
||||
.ml_name = "metrics",
|
||||
.ml_meth = (PyCFunction)pyrf_evlist__metrics,
|
||||
.ml_flags = METH_NOARGS,
|
||||
.ml_doc = PyDoc_STR("List of metric names within the evlist.")
|
||||
},
|
||||
{
|
||||
.ml_name = "mmap",
|
||||
.ml_meth = (PyCFunction)pyrf_evlist__mmap,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user