perf scripting python: Assign perf_script_context

The scripting_context pointer itself does not change and nor does it need
to. Put it directly into the script as a variable at the start so it does
not have to be passed on each call into the script.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/r/20210530192308.7382-6-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Adrian Hunter 2021-05-30 22:23:00 +03:00 committed by Arnaldo Carvalho de Melo
parent 67e50ce0e3
commit cf9bfa6c15
2 changed files with 35 additions and 1 deletions

View File

@ -91,6 +91,12 @@ PyMODINIT_FUNC PyInit_perf_trace_context(void)
NULL, /* m_clear */
NULL, /* m_free */
};
return PyModule_Create(&moduledef);
PyObject *mod;
mod = PyModule_Create(&moduledef);
/* Add perf_script_context to the module so it can be imported */
PyObject_SetAttrString(mod, "perf_script_context", Py_None);
return mod;
}
#endif

View File

@ -1599,6 +1599,31 @@ static void python_process_stat_interval(u64 tstamp)
Py_DECREF(t);
}
static int perf_script_context_init(void)
{
PyObject *perf_script_context;
PyObject *perf_trace_context;
PyObject *dict;
int ret;
perf_trace_context = PyImport_AddModule("perf_trace_context");
if (!perf_trace_context)
return -1;
dict = PyModule_GetDict(perf_trace_context);
if (!dict)
return -1;
perf_script_context = _PyCapsule_New(scripting_context, NULL, NULL);
if (!perf_script_context)
return -1;
ret = PyDict_SetItemString(dict, "perf_script_context", perf_script_context);
if (!ret)
ret = PyDict_SetItemString(main_dict, "perf_script_context", perf_script_context);
Py_DECREF(perf_script_context);
return ret;
}
static int run_start_sub(void)
{
main_module = PyImport_AddModule("__main__");
@ -1611,6 +1636,9 @@ static int run_start_sub(void)
goto error;
Py_INCREF(main_dict);
if (perf_script_context_init())
goto error;
try_call_object("trace_begin", NULL);
return 0;