Commit cf9bfa6c authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarAdrian 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 67e50ce0
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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
+28 −0
Original line number Diff line number Diff line
@@ -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;