| #define PY_SSIZE_T_CLEAN | |
| #include <Python.h> | |
| #include "collection_control.hpp" | |
| #include "domain.hpp" | |
| #include "event.hpp" | |
| #include "id.hpp" | |
| #include "string_handle.hpp" | |
| #include "task.hpp" | |
| #include "thread_naming.hpp" | |
| #include "pt_region.hpp" | |
| namespace ittapi | |
| { | |
| /** | |
| Initialize ittapi. | |
| May be called multiple times, so avoid using static state. | |
| */ | |
| static int exec_ittapi_module(PyObject* module) | |
| { | |
| static PyMethodDef ittapi_functions[] = | |
| { | |
| /* Collection Control API */ | |
| {"pause", pause, METH_NOARGS, "Pause data collection."}, | |
| {"resume", resume, METH_NOARGS, "Resume data collection."}, | |
| {"detach", detach, METH_NOARGS, "Detach data collection."}, | |
| /* Thread Naming API */ | |
| {"thread_set_name", thread_set_name, METH_O, "Sets a name for current thread."}, | |
| /* Task API */ | |
| {"task_begin", task_begin, METH_VARARGS, "Marks the beginning of a task."}, | |
| {"task_end", task_end, METH_VARARGS, "Marks the end of a task."}, | |
| {"task_begin_overlapped", task_begin_overlapped, METH_VARARGS, "Marks the beginning of an overlapped task."}, | |
| {"task_end_overlapped", task_end_overlapped, METH_VARARGS, "Marks the end of an overlapped task."}, | |
| {"pt_region_begin", pt_region_begin, METH_VARARGS, "Marks the begining of a processor trace control region"}, | |
| {"pt_region_end", pt_region_end, METH_VARARGS, "Marks the end of a processor trace control region"}, | |
| /* marks end of array */ | |
| { nullptr }, | |
| }; | |
| PyModule_AddFunctions(module, ittapi_functions); | |
| PyModule_AddStringConstant(module, "__author__", "Egor Suldin"); | |
| PyModule_AddStringConstant(module, "__version__", "1.2.2"); | |
| PyModule_AddIntConstant(module, "year", 2026); | |
| return 0; | |
| } | |
| static void destroy_ittapi_module(void*) | |
| { | |
| __itt_release_resources(); | |
| } | |
| PyMODINIT_FUNC PyInit_native() | |
| { | |
| PyDoc_STRVAR(ittapi_doc, "The ittapi module."); | |
| static PyModuleDef_Slot ittapi_slots[] = | |
| { | |
| { Py_mod_exec, reinterpret_cast<void*>(exec_ittapi_module) }, | |
| { Py_mod_exec, reinterpret_cast<void*>(exec_domain) }, | |
| { Py_mod_exec, reinterpret_cast<void*>(exec_event) }, | |
| { Py_mod_exec, reinterpret_cast<void*>(exec_id) }, | |
| { Py_mod_exec, reinterpret_cast<void*>(exec_string_handle) }, | |
| { Py_mod_exec, reinterpret_cast<void*>(exec_pt_region) }, | |
| { 0, nullptr } | |
| }; | |
| static PyModuleDef ittapi_def = { | |
| PyModuleDef_HEAD_INIT, | |
| "ittapi", | |
| ittapi_doc, | |
| 0, /* m_size */ | |
| nullptr, /* m_methods */ | |
| ittapi_slots, | |
| nullptr, /* m_traverse */ | |
| nullptr, /* m_clear */ | |
| destroy_ittapi_module, /* m_free */ | |
| }; | |
| return PyModuleDef_Init(&ittapi_def); | |
| } | |
| } // namespace ittapi |