linux/tools/perf/scripts/python/Perf-Trace-Util/Context.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * Context.c.  Python interfaces for perf script.
   4 *
   5 * Copyright (C) 2010 Tom Zanussi <tzanussi@gmail.com>
   6 */
   7
   8#include <Python.h>
   9#include "../../../util/trace-event.h"
  10
  11#if PY_MAJOR_VERSION < 3
  12#define _PyCapsule_GetPointer(arg1, arg2) \
  13  PyCObject_AsVoidPtr(arg1)
  14
  15PyMODINIT_FUNC initperf_trace_context(void);
  16#else
  17#define _PyCapsule_GetPointer(arg1, arg2) \
  18  PyCapsule_GetPointer((arg1), (arg2))
  19
  20PyMODINIT_FUNC PyInit_perf_trace_context(void);
  21#endif
  22
  23static PyObject *perf_trace_context_common_pc(PyObject *obj, PyObject *args)
  24{
  25        static struct scripting_context *scripting_context;
  26        PyObject *context;
  27        int retval;
  28
  29        if (!PyArg_ParseTuple(args, "O", &context))
  30                return NULL;
  31
  32        scripting_context = _PyCapsule_GetPointer(context, NULL);
  33        retval = common_pc(scripting_context);
  34
  35        return Py_BuildValue("i", retval);
  36}
  37
  38static PyObject *perf_trace_context_common_flags(PyObject *obj,
  39                                                 PyObject *args)
  40{
  41        static struct scripting_context *scripting_context;
  42        PyObject *context;
  43        int retval;
  44
  45        if (!PyArg_ParseTuple(args, "O", &context))
  46                return NULL;
  47
  48        scripting_context = _PyCapsule_GetPointer(context, NULL);
  49        retval = common_flags(scripting_context);
  50
  51        return Py_BuildValue("i", retval);
  52}
  53
  54static PyObject *perf_trace_context_common_lock_depth(PyObject *obj,
  55                                                      PyObject *args)
  56{
  57        static struct scripting_context *scripting_context;
  58        PyObject *context;
  59        int retval;
  60
  61        if (!PyArg_ParseTuple(args, "O", &context))
  62                return NULL;
  63
  64        scripting_context = _PyCapsule_GetPointer(context, NULL);
  65        retval = common_lock_depth(scripting_context);
  66
  67        return Py_BuildValue("i", retval);
  68}
  69
  70static PyMethodDef ContextMethods[] = {
  71        { "common_pc", perf_trace_context_common_pc, METH_VARARGS,
  72          "Get the common preempt count event field value."},
  73        { "common_flags", perf_trace_context_common_flags, METH_VARARGS,
  74          "Get the common flags event field value."},
  75        { "common_lock_depth", perf_trace_context_common_lock_depth,
  76          METH_VARARGS, "Get the common lock depth event field value."},
  77        { NULL, NULL, 0, NULL}
  78};
  79
  80#if PY_MAJOR_VERSION < 3
  81PyMODINIT_FUNC initperf_trace_context(void)
  82{
  83        (void) Py_InitModule("perf_trace_context", ContextMethods);
  84}
  85#else
  86PyMODINIT_FUNC PyInit_perf_trace_context(void)
  87{
  88        static struct PyModuleDef moduledef = {
  89                PyModuleDef_HEAD_INIT,
  90                "perf_trace_context",   /* m_name */
  91                "",                     /* m_doc */
  92                -1,                     /* m_size */
  93                ContextMethods,         /* m_methods */
  94                NULL,                   /* m_reload */
  95                NULL,                   /* m_traverse */
  96                NULL,                   /* m_clear */
  97                NULL,                   /* m_free */
  98        };
  99        return PyModule_Create(&moduledef);
 100}
 101#endif
 102